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
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 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)在线全文阅读。
相关推荐: