77范文网 - 专业文章范例文档资料分享平台

数值计算基础实验指导+部分实验源代码+复习指导+三套试题及其答(5)

来源:网络收集 时间:2019-02-15 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

MatrixThr::MatrixThr() { //初始化相关数据

N=0; a=NULL; b=NULL; c=NULL; f=NULL; }

MatrixThr::~MatrixThr() { //释放分配的内存空间

delete []a; delete []b; delete []c; delete []f; }

void MatrixThr::SetMatrixThr(const int n)

{ //根据输入的未知数个数设置矩阵的数据

N=n;

a=new double[N]; b=new double[N]; c=new double[N]; f=new double[N];

//若内存分配失败,退出程序

if(a==NULL||b==NULL||c==NULL||f==NULL) {

cout<<\初始化分配存储空间失败!\\n\exit(EXIT_FAILURE); }

//依次输入三对角矩阵每行的元素 cin>>*b>>*c>>*f;

for(int i=1;i>*(a+i-1)>>*(b+i)>>*(c+i)>>*(f+i); cin>>*(a+i-1)>>*(b+i)>>*(f+i); }

void MatrixThr::Result()

{ //对系数矩阵 A 作 Crout 分解

for(int i=0;i

{ //将 U 中的α 存于指针 b 中,L 中的β 存于指针 c 中

*(c+i)/=(*(b+i));

*(b+i+1)-=(*(a+i))*(*(c+i)); }

//解方程组 Ly=f,求得的 y 值存于指针 b 中 *b=(*f)/(*b);

for(i=1;i

//解方程组 Ux=y,求得的 x 值存于指针 a 中 *(a+N-1)=*(b+N-1);

for(i=N-2;i>=0;--i) *(a+i)=*(b+i)-(*(c+i))*(*(a+i+1)); }

int MatrixThr::GetN()const {

return N; }

double MatrixThr::GetX(const int i)const {

return *(a+i-1); }

运行结果

Lagrange 插值法的源程序:

#include

#include using namespace std;

class Lagrange {

public:

Lagrange(); ~Lagrange();

void SetLagrange(const int n);//根据用户的输入设置 Lagrange 类中的插值点数 据

bool Exist(const double x,const int i);//检测是否输入了与前 i 个插值结点横坐 标相同的点

int GetN()const;//获取插值结点的数目

void Calculate(const double a);//计算横坐标 a 对应的函数值 double GetResult()const;//返回计算的函数值 private:

int N;//插值结点的数目

double *x,*y,zx,zy;//x、y 分别用于存储插值点的数据,zx、zy 表示所求的坐 标点 };

int main() {

int n=2; Lagrange L; do {

if(n<2) cout<<\用于模拟曲线的插值点数目 N>2\cout<<\请输入用于模拟曲线的插值点数目 N:\cin>>n; }while(n<2);

cout<<\请输入各插值点横、纵坐标的数据\\n\L.SetLagrange(n);

double a;

cout<<\请输入所求点的横坐标 X:\cin>>a;

L.Calculate(a);

cout<<\横坐标\对应的函数值为:\ return 0; }

Lagrange::Lagrange() { //初始化相关数据

N=0;

x=y=NULL; zx=zy=0; }

Lagrange::~Lagrange()

{ //释放分配给指针的内存空间

delete []x; delete []y; }

bool Lagrange::Exist(const double a,const int i)

{ //遍历以输入的插值点,看是否重复插入横坐标相同的插值点

for(int j=0;j

if(a==*(x+j)) return true;

return false;

}

void Lagrange::SetLagrange(const int n) {

N=n;

x=new double[N]; y=new double[N];

//判断是否成功为指针分配了内存空间 if(x==NULL||y==NULL) {

cout<<\分配存储空间失败!\exit(EXIT_FAILURE); }

//输入插值点

for(int i=0;i

cin>>*(x+i)>>*(y+i);

//如果不是输入第一个坐标值,则会对输入的横坐标进行合法性检测 while(i!=0&&Exist(*(x+i),i)==true) {

cout<<\输入了重复的横坐标-------请重新输入第\个插入结

点的数据\\n\

cin>>*(x+i)>>*(y+i); }

}

}

void Lagrange::Calculate(const double a) {

zx=a;

for(int i=0;i

double temp=1;

for(int j=0;j

zy+=(*(y+i)*temp); } }

int Lagrange::GetN()const {

return N;//返回插值点的数目 }

double Lagrange::GetResult() const {

return zy;//返回求得的函数值 }

Lagrange 插值法的运行结果

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库数值计算基础实验指导+部分实验源代码+复习指导+三套试题及其答(5)在线全文阅读。

数值计算基础实验指导+部分实验源代码+复习指导+三套试题及其答(5).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/471450.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: