《太原理工大学数值计算方法实验报告.pdf》由会员分享,可在线阅读,更多相关《太原理工大学数值计算方法实验报告.pdf(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、本科实验报告本科实验报告课程名称:计算机数值方法实验项目:方程求根、线性方程组的直接解法、线性方程组的迭代解法、代数插值和最小二乘拟合多项式实验地点:行勉楼专业班级:*学号:*学生姓名:*指导教师:李誌,崔冬华2016 年 4 月 8 日学生姓名学生姓名实验成绩实验成绩实验名称实验名称实验一实验一 方程求根方程求根实验内容和要求实验内容和要求熟悉使用二分法、迭代法、牛顿法、割线法等方法对给定的方程进行根的求解。选择上32述方法中的两种方法求方程:f(x)=x+4x-10=0 在1,2内的一个实根,且要求满足精度*-5|x-xn|0.510(1)了解非线性方程求根的常见方法,如二分法、牛顿法、割
2、线法。(2)加深对方程求根方法的认识,掌握算法。(3)会进行误差分析,并能对不同方法进行比较。实验原理实验原理1.二分法:如果要求已知函数 f(x)=0 的根(x 的解),那先要找出一个区间 a,b,使得 f(a)与 f(b)异号。根据介值定理,这个区间内一定包含着方程式的根。求该区间的中点 m=(a+b)/2,并找出 f(m)的值。若 f(m)与 f(a)正负号相同,则取 m,b 为新的区间,否则取 a,m。重复第 3 步和第 4 步,直到得到理想的精确度为止。2.割线法是利用牛顿迭代法的思想,在根的某个领域内,函数有直至二阶的连续导数,并且不等于 0,则在领域内选取初值 x0,x1,迭代均
3、收敛。(1)在区间m,n内输入初值 x0,x1.(2)计算 x2。x2=x1-f(x1)*(x1-x0)/(f(x1)-f(x0)(3)x0=x1,x1=x2(4)判断是否达到精度,若是输出 x1,若否 执行(2)主要仪器设备主要仪器设备HPHP 计算机计算机实验记录实验记录 1.二分法/方程求根(二分法).cpp:定义控制台应用程序的入口点。/#include stdafx.h#includeiostreamusing namespace std;class Textpublic:float x,y,a,b,c,n=0;void Getab()cout 请输入计算区间:(以空格隔开)a b;
4、float GetY(float x)y=x*x*x+4*x*x-10;return y;float Calculate(float a,float b)c=(a+b)/2;n+;if(GetY(c)=0|(b-a)/2)0.000005)cout c 为方程的解 endl;return 0;if(GetY(a)*GetY(c)0)return Calculate(a,c);if(GetY(c)*GetY(b)0)return Calculate(c,b);int main()cout 方程组为:f(x)=x3+4x2-10=0 endl;float a,b;Text text;text.Ge
5、tab();a=text.a;b=text.b;text.Calculate(a,b);return 0;2.割线法:/方程求根(割线法).cpp:定义控制台应用程序的入口点。/#include stdafx.h#includeiostreamusing namespace std;class Apublic:float x0,x1,y;float GetY(float x)y=x*x*x+4*x*x-10;return y;void GetNumber()cout请输入两个初始近似值:(以空格隔开)x0;cin x1;void Calculate(float x0,float x1)floa
6、t x2;x2=x1-(GetY(x1)/(GetY(x1)-GetY(x0)*(x1-x0);if(x2=x1)cout x2为方程的解 endl;elsecout x2 endl;return Calculate(x1,x2);int main()cout 方程组为:f(x)=x3+4x2-10=0 endl;float a,b;A text;text.GetNumber();a=text.x0;b=text.x1;text.Calculate(a,b);return 0;心得体会心得体会使用不同的方法,可以不同程度的求得方程的解,通过二分法计算的程序实现更加了解二分法的特点,二分法过程简
7、单,程序容易实现,但该方法收敛比较慢一般用于求根的初始近似值,不同的方法速度不同。面对一个复杂的问题,要学会简化处理步骤,分步骤一点一点的循序处理,只有这样,才能高效的解决一个复杂问题。实验名称实验名称实验二实验二 线性方程组的直接求解线性方程组的直接求解实验内容和要求实验内容和要求合理选择利用 Gauss 消元法、主元素消元法、LU 分解法、追赶法求解下列方程组:123x114012x82241x313(1)了解线性方程组常见的直接解法,如Guass 消元法、LU 分解法、追赶法。(2)加深对线性方程组求解方法的认识,掌握算法。(3)会进行误差分析,并能对不同方法进行比较。实验原理实验原理1
8、.高斯分解法:将原方程组化为三角形方阵的方程组:lik=aik/akk aij=aij-lik*akj k=1,2,n-1 i=k+1,k+2,n j=k+1,k+2,n+1由回代过程求得原方程组的解:xn=ann+1/ann xk=(akn+1-akj xj)/akk(k=n-1,n-2,2,1)2.LU 分解法:将系数矩阵 A 转化为 A=L*U,L 为单位下三角矩阵,U 为普通上三角矩阵,然后通过解方程组 l*y=b,u*x=y,来求解 x.主要仪器设备主要仪器设备HPHP 计算机计算机实验记录实验记录1.高斯消元法:#include stdio.h#include math.h#inc
9、lude double a56,a056;double l5,tmp;void Exchange(int i)int j,l,k;double max=a0ii,temp;j=i;for(k=i;kmax)max=a0ki;j=k;for(l=i;l=4;l+)temp=a0il;a0il=a0jl;a0jl=temp;for(i=1;i=3;i+)for(j=1;j=4;j+)aij=a0ij;void displayA()int i,j;printf(n);for(j=1;j=3;j+)for(i=1;i=4;i+)printf(%lf,aji);printf(n);void main()
10、int i,j,k;for(i=1;i=3;i+)for(j=1;j=4;j+)scanf(%lf,&aij);a0ij=aij;displayA();printf(列主元素消元法如下);/消元过程k=1;doExchange(k);displayA();for(i=k+1;i=3;i+)li=a0ik/a0kk;printf(l%i%i=%lf,i,k,li);for(j=k;j=4;j+)aij=a0ij-li*a0kj;displayA();k+;if(k=3)break;for(j=1;j=3;j+)for(i=1;i=1;k-)tmp=0;for(j=k+1;j=3;j+)tmp+=
11、akj*lj;lk=(ak4-tmp)/akk;for(i=1;i=3;i+)printf(x%i=%lfn,i,li);2.LU 分解法:#include#includeint i,j,k,r;double m=0,p=0;double a33;voidlu(double a33)for(i=1;i=2;i+)if(a00!=0)ai0=ai0/a00;for(k=1;k=2;k+)for(j=k;j=2;j+)for(r=0;r=k-1;r+)m=m+akr*arj;akj=akj-m;m=0;for(i=k+1;i=2;i+)for(r=0;r=k-1;r+)p=p+air*ark;ai
12、k=(aik-p)/akk;p=0;void main()static double a33=1,2,3,0,1,2,2,4,1;static double b3=14,8,13;double c3;double d3;double f33;double m=0;double n=0;int r;int i,j;lu(a);printf(输出 U 的矩阵为n);for(i=0;i=2;i+)for(j=i;j=2;j+)fij=aij;printf(%f,fij);printf(n);printf(输出 L 的矩阵为n);for(i=0;i=2;i+)for(j=0;j=i;j+)if(i=j
13、)aij=1;printf(%f,aij);elseprintf(%f,aij);printf(n);c0=b0;for(i=1;i=2;i+)for(r=0;r=0;i=i-1)for(r=2;ri;r=r-1)n=n+fir*dr;di=(ci-n)/fii;n=0;printf(所求方程组解为x1=%f,x2=%f,x3=%f,d0,d1,d2);/*根据LU分解所得两个矩阵及求解步骤计算所求X 一组解*/心得体会心得体会对于求解线性方程组的各种直接方法来说各有优缺点,在所有的求解方法中都应该注意其解的精度。注意不同求解方法的不同误差求法。编写程序的时候需要一步一步慢慢来,逐步增加自己的
14、算法知识水平和解决问题的能力。实验名称实验名称实验三实验三线性方程组的迭代求解线性方程组的迭代求解实验内容和要求实验内容和要求10 x1x22x3 7.2 x110 x22x38.3 x x 5x 4.2231使用雅可比迭代法或高斯-赛德尔迭代法对下列方程组进行求解。实验原理实验原理雅可比迭代法:设线性方程组Ax x=b b的系数矩阵 A 可逆且主对角元素 a11,a22,ann均不为零,令D=diag(a11,a22,ann)并将 A 分解成A=(A-D)+D从而线性方程组可写成Dx x=(D-A)x x+b b则有迭代公式(k+1)(k)x x=B1x x+f1-1-1其中,B1=I-D
15、A,f1=D b b。主要仪器设备主要仪器设备HPHP 计算机计算机实验记录实验记录#include#includeint main()int i;double x120,x220,x320;double x10,x20,x30;printf(please input x1,x2,x3:n);scanf(%lf%lf%lf,&x10,&x20,&x30);printf(nx1nx2nx3nn);for(i=0;i18;i+)x10=x10;x20=x20;x30=x30;x1i+1=0.1*x2i+0.2*x3i+0.72;x2i+1=0.1*x1i+0.2*x3i+0.83;x3i+1=0.
16、2*x1i+0.2*x2i+0.84;printf(%5d%5lf%5lf%5lfn,i,x1i,x2i,x3i);return 0;心得体会心得体会在编写算法是不熟悉,查阅了很多资料,经过反复研究和试验后实现了题目的要求,使用雅克比迭代法和高斯-赛德尔都可以得到方程的解,但相比之下,高斯-赛德尔的迭代次数要比雅克比的迭代次数少,能够更快的达到所求的解的精度。实验名称实验名称实验四实验四 代数插值和最小二乘法拟合代数插值和最小二乘法拟合实验内容和要求实验内容和要求1.学习使用拉格朗日插值法或牛顿插值法求解方法。2.了解最小二乘法的多项式拟合的具体计算方法并且注意克服正规方程组的病态。给定数据点
17、(xi,yi)如下:xiyi010.51.750.61.960.72.190.82.440.92.711.03.00(1)使用拉格朗日插值法或牛顿插值法,求 f(0.856)的近似值.(2)用最小二乘法拟合数据的(n 次)多项式,求 f(0.856)的近似值.(3)对比、分析上两结果实验原理实验原理设函数在区间a,b上n+1互异节点x0,x1,xn上的函数值分别为y0,y1,yn,求 n 次插值多项式 Pn(x),满足条件Pn(xj)=yj,j=0,1,n令Ln(x)=y0l0(x)+y1l1(x)+ynln(x)=yili(x)其中 l0(x),l1(x),ln(x)为以 x0,x1,xn为
18、节点的 n 次插值基函数,则 Ln(x)是一次数不超过 n 的多项式,且满足Ln(xj)=yj,L=0,1,n再由插值多项式的唯一性,得Pn(x)Ln(x)主要仪器设备主要仪器设备HPHP 计算机计算机实验记录实验记录(写出实验内容中的程序代码和运行结果写出实验内容中的程序代码和运行结果)()(可分栏或加页可分栏或加页)拉格朗日插值法:#include stdio.hint main()double m=1.0,a=0.856,l=0;int i,j;double x6=0.50,0.60,0.70,0.80,0.90,1.00;double y6=1.75,1.96,2.19,2.44,2.
19、71,3.00;for(i=0;i=5;i+)for(j=0;j=5;j+)if(i=j)continue;m=m*(a-xj)/(xi-xj);l+=yi*m;m=1;printf(结果为%lf,l);return 0;最小二乘法:#include stdio.h#include math.hint main()double x7=0,0.5,0.6,0.7,0.8,0.9,1.0,y7=1,1.75,1.96,2.19,2.44,2.71,3.00,a0,a1,sum1=0,sum2=0,sum3=0,sum4=0,sum5=0,l,r;int m=6,i,k;for(i=0;i7;i+)
20、sum1+=xi;sum2+=xi*xi;sum3+=yi;sum4+=xi*yi;sum5+=yi*yi;l=sum1/(m+1);a1=(sum4-l*sum3)/(sum2-l*sum1);a0=(sum3-sum1*a1)/(m+1);double s=sum3*a0+sum4*a1;r=sum5-s;printf(y=a0+a1*xn);printf(a0=%f a1=%ftn,a0,a1,r);double q=0.856,p;p=a0+a1*q;printf(y=%fn,p);return 0;心得体会心得体会拉格朗日插值的优点是插值多项式特别容易建立,缺点是增加节点是原有多项式不能利用,必须重新建立,即所有基函数都要重新计算,这就造成计算量的浪费。牛顿插值多项式的优点是增加节点时,原先的差商仍旧不变,仍可以使用。数据拟合的具体作法是:对给定的数据(xi,yi)(i=0,1,m),在取定的函数类中,求 p(x)属于此函数类,使误差ri=p(xi)-yi(i=0,1,m)的平方和最小,即:22ri=(p(xi)-yi)=min从几何意义上讲,就是寻求与给定点(xi,yi)(i=0,1,m)的距离平方和为最小的曲线 y=p(x)。