1、计算数值方法实验报告概要课程名称: 计算机数值方法 实验项目:方程求根,线性方程组的直接解法与迭代 解法,代数插值,最小二乘法拟合多项式实验地点: 逸夫楼402 专业班级: 学号: 学生姓名: 指导教师: 于亚男 2012年4月26日太原理工大学学生实验报告学院名称软件学院专业班级学号学生姓名 实验日期4月26日成绩课程名称计算机数值方法实验题目 方程求根1、实验目的和要求(1)了解非线性方程求根的常见方法,如二分法、牛顿法、割线法。(2)加深对方程求根方法的认识,掌握算法。二、实验内容和原理熟悉使用二分法、迭代法、牛顿法、割线法等方法对给定的方程进行根的求解。选择上述方法中的两种方法求方程:
2、f(x)=x3+4x2-10=0在1,2内的一个实根,且要求满足精度|x*-xn|0.510-53、主要仪器设备 HP笔记本,VC+6.04、操作方法与实验步骤 1.二分法:#include #include double f(double x) double y; y=pow(x,3)+4*pow(x,2)-10; return (y);main() double a,b,yl,yr,ym,x1,xr,xm;a=1;b=2; yl=f(a); yr=f(b); while(yl*yr0) yl=f(a); yr=f(b); xr=a; x1=b; while(fabs(xr-x1)0.000
3、001) xm=(x1+xr)/2; ym=f(xm); yl=f(x1); yr=f(xr); if(yl*ym0) xr=xm; else x1=xm;printf(%ft%ft%fn,x1,xr,xm); printf(n所求根为x=%fn,xm); return 0;2.牛顿法:#include #include double f(double x) return (pow(x,3)+4*pow(x,2)-10);double f1(double x) return (3*pow(x,2)+10*x);int main() double x,x1,y1,y2; printf(请输入一个
4、任意实数:X=); scanf(%lf,&x); printf(方程的解为:n); do x1=x; y1=f(x); y2=f1(x1); x=x1-y1/y2; while (fabs(x-x1)=5e-6); printf( %lfn,x1);3.追赶法5、实验数据记录和处理1.二分法2.牛顿法6、实验结果与分析 通过这个两个程序可看出,二分法的计算量更大一些。7、讨论、心得 通过这个实验,我了解了线性方程的一些求根方法,对于方程近似值的求解有了更多的理解。实验地点 指导教师于亚男太原理工大学学生实验报告学院名称专业班级学号学生姓名 实验日期4月26日成绩课程名称计算机数值方法实验题目
5、求解线性方程组一、实验目的和要求(1)了解直接法解线性方程组(2)对Gauss消元法、LU分解法、追赶法有更深刻的理解二、实验内容和原理合理利用Gauss消元法、LU分解法、追赶法求解下列方程组: (n=5,10,100,)三主要仪器设备 HP笔记本,VC+6.0四操作方法与实验步骤 1.高斯:#include void main() int i,j,f,n; float a55,b5,x5,l,k; printf(Input n:); scanf(%d,&n); printf(Input a:); for(i=0;in;i+) for(f=0;fn;f+) scanf(%f,&aif); p
6、rintf(Input b:); for(i=0;in;i+) scanf(%f,&bi); for(i=0;in-1;i+) for(j=i+1;jn;j+) l=-aji/aii; bj=bj+bi*l; for(f=i;f=0;i-) xi=bi; k=0; for(f=i+1;fn;f+) k=k-aif*xf; xi=(k+bi)/aii; printf(The answer is ); for(i=0;in;i+) printf(%.4f ,xi);2.LU分解:#include #include #define L 30 double aLL,bL,lLL,uLL,xL,yL;
7、int main() int n,i,j,k,r; printf(n=n); scanf(%d,&n); printf(ann=n); for(i=1;i=n;+i) for(j=1;j=n;+j) scanf(%lf,&aij); printf(bn=n); for(i=1;i=n;+i) scanf(%lf,&bi); for(i=1;i=n;+i) for(j=1;j=n;+j) lij=0; uij=0.0; for(k=1;k=n;+k) for(j=k;j=n;+j) ukj=akj; for(r=1;rk;+r) ukj-=lkr*urj; for(i=k+1;i=n;+i) l
8、ik=aik; for(r=1;rk;+r) lik-=lir*urk; lik/= ukk; lkk=1.0; for(i=1;i=n;+i) yi = bi; for(j=1;j0;-i) xi = yi; for(j=i+1;j=n;+j) xi-=uij*xj; xi/= uii; for(i=1;i=n;+i) printf(%0.2lfn,xi); return 0; 五实验数据记录和处理1.高斯2.LU分解六、实验结果与分析 本次实验数据较多,在输入上要多费点功夫,一不小心就全部都错了。在今后编程过程中,一定要小心谨慎。七、讨论、心得 通过本次实验,我深刻理解了直接法在计算机上解
9、线性方程组的有效性,对于Gauss消元法、LU分解法也有了深刻的理解。实验地点 逸夫楼402指导教师于亚男太原理工大学学生实验报告学院名称软件学院专业班级学号学生姓名 实验日期4月26日成绩课程名称计算机数值方法实验题目 线性方程组的迭代解法1、实验目的和要求掌握雅可比迭代法和高斯-赛德尔迭代法对方程组进行求解二、实验内容和原理使用雅可比迭代法或高斯-赛德尔迭代法对下列方程组进行求解。三、主要仪器设备 HP笔记本,VC+6.0四、操作方法与实验步骤 雅可比迭代法:#include #include int main() double a33=10,-1,-2,-1,10,-2,-1,-1,5,
10、b3=7.2,8.3,4.2;/定义方程组 float x3=0,0,0,sum; int i,j,k,n=3; printf(tt X1tt X2tt X3n); for(k=0;k8;k+) for(i=0;i3;i+) sum=0; for(j=0;jn;j+) if(i=j)continue; sum=sum+aij*xj; xi=(bi-sum)/aii; printf(第%d次迭代:t,k+1); for(i=0;in;i+) printf(%ft,xi); printf(n); 五、实验数据记录和处理六、实验结果与分析 在本次实验中,编程不太容易,对c/c+的学习应该更进一步。七
11、、讨论、心得 通过这次实验,我明白了雅克比迭代的一般性解法,对于编程的应用也有了更深刻的理解。实验地点 逸夫楼402指导教师于亚男太原理工大学学生实验报告学院名称软件学院专业班级学号学生姓名 实验日期4月26日成绩课程名称计算机数值方法实验题目 代数插值1、实验目的和要求 掌握拉格朗日插值法和牛顿插值法求近似解二、实验内容和原理使用拉格朗日插值法或牛顿插值法求解:已知f(x)在6个点的函数值如下表所示,运用插值方法,求f(0.596)的近似值。X0.400.550.650.800.901.05f(x)0.410750.578150.696750.888111.026521.25386三、主要仪
12、器设备 HP笔记本,VC+6.0四、操作方法与实验步骤#include stdafx.h#include #include #include #include void difference(float *x,float *y,int n) float *f; int k,i; f=(float *) malloc (n*sizeof(float); for(k=1;k=n;k+) f0=yk; for(i=0;ik;i+)fi+1=(fi-yi)/(xk-xi); yk=fk; return; int main() int i,n; float x10,y10,xx,yy; printf(输
13、?入?结点?个?数簓n:阰); scanf(%d,&n);printf(n); for(i=0;i=0;i-)yy=yy*(xx-xi)+yi; printf(n近似?值为a:阰F(%f)=%fn,xx,yy); 五、实验数据记录和处理六、实验结果与分析 拉格朗日插值的优点是插值多项式特别容易建立,缺点是增加节点是原有多项式不能利用,必须重新建立,即所有基函数都要重新计算,这就造成计算量的浪费。所以要用到牛顿插值多项式,两种方法相结合才能更好的解决多项式的问题。实验地点 逸夫楼402指导教师于亚男太原理工大学学生实验报告学院名称软件学院专业班级学号学生姓名实验日期4月26日成绩课程名称计算机数
14、值方法实验题目 最小二乘法拟合多项式一、实验目的和要求掌握用最小二乘法拟合数据的多项式,并求平方误差二、实验内容和原理给定数据点(xi ,yi),用最小二乘法拟合数据的多项式,并求平方误差。xi00.50.60.70.80.91.0yi11.751.962.192.442.713.00三、主要仪器设备 HP笔记本,VC+6.0四、操作方法与实验步骤#include#include#define N 15double power(double &a,int n) double b=1; for(int i=0;in;i+) b*=a; return b;void Gauss();double X
15、N,YN,sumXN,sumYN,aNN,bN,lNN,xN;void main() ofstream outdata; ifstream indata; double s; int i,j,k,n,index; coutn; coutendl; cout请输入X和Y:endl; /输入给定数据 for(i=0;in;i+) coutXiXi; sumX1+=Xi; coutYiYi; sumY1+=Yi; coutendl; coutsumX1=sumX1tsumY1=sumY1endl; coutindex; coutendl; i=n; sumX0=i; for(i=2;i=2*inde
16、x;i+) sumXi=0; for(j=0;jn;j+) sumXi+=power(Xj,i); coutsumXi=sumXiendl; for(i=2;i=index+1;i+) sumYi=0; for(j=0;jn;j+) sumYi+=power(Xj,i-1)*Yj; coutsumYi=sumYiendl; for(i=1;i=index+1;i+) /建立正规方程组 for(j=1;j=index+1;j+) aij=sumXi+j-2; bi=sumYi; k=1; /用高斯消元法解方程组 do for(j=k+1;j=index+1;j+) ljk=ajk/akk; fo
17、r(i=k+1;i=index+1;i+) for(j=k+1;j=1;i-) s=0; for(j=i+1;j=index+1;j+) s=s+aij*xj; xi=(bi-s)/aii; cout拟合系数为:; /输出拟合系数 for(i=1;i=index+1;i+) coutxit; double m=0; coutendl平方误差为:; for(i=0;in;i+) double t=x1+x2*Xi-Yi; m=m+power(t,2); coutmendl;五、实验数据记录和处理六、讨论、心得 通过本次实验,我了解到了拟合的重要性,对于解决方程有了更多的方法和技巧。实验地点 逸夫楼402指导教师于亚男
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1