《2023年计算机数值方法实验报告.pdf》由会员分享,可在线阅读,更多相关《2023年计算机数值方法实验报告.pdf(26页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、域 去 唬 行/大 孝TAIYUAN UNIVERSITY OF TECHNOLOGY本 科 实 验 报 告课 程 名 称:计 算 机 数 值 方 法 _ _ _ _ _ _ _ _ _ _ _ _ _ _实 验 项 目:方程求根线性方程组的直接解法线性方程组的迭代解法代数插值和最小二乘法拟合多项式实 验 地 点:_ _ _ _ _ _ _ _ _ _ 逸 夫30 2专 业 班 级:软件_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _学号:学 生 姓 名:_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
2、 _ _ _ _ _ _ _ _ _指导教师:田华2023年4 月2 4日学生姓名实验成绩实验名称实验一方程求根实验目的和规定(必填)熟悉使用、迭代法、牛顿法、割线法等方法对给定的方程进行根的求解。选择上述方法中的两种方法求方程:二分法f(x)=x 3+4 x 2-1 0=0在 1,2 内的一个实根,且规定满足精度1 X*-X n|0 .5 x 1 0-5实验内容和原理(必填)函数f(x)在区府异号,说明在运假 设F(a)v 假 如ft 假 如f 假 如fW b ;返回重象半的方法,使区1(x,y)上连续,先 在 区 间(X ,y )拟 定a与b,若f(a),f(b)1间(a,b)内存在零点,
3、然 后 求f(a +b)/2 。0,a b,(a +b)/2 =0,该点即为零点;(a+b)/2 0,则 区 间(a,(a+b)/2)内 存 在 零 点,(a +b)/2不循环,不断接近零点。通 过 每 次 把f(x)的零点所在区间收缩一间内的两个端点逐步逼近函数零点,最终求得零点近似值。重要仪器设备台式或笔记本计算机实验记录(写出实验内容中的程序代码和运营结果)(可分栏或加页)代码 1.二分法:#in c lu d e#i n clu d e#inc 1 udei n t main()dou b le a=1.0,b=2.0;doubl e x,s;wh i 1 e(1)(x=(a+b)/2
4、;s=pow(x,3)+4*x*x-10;if(-0.0 00005 s&s 0.000005)(break;e Ise i f(s 0)b=x;p r i n t f(%ft%An,a,b);)pri n t f(%fn,x);p r int f(%fn,s);return 0;)2 .割线法:#incl u d e Ms t d i o.h”#incl u d e ma t hh”in t main()(f l o a t c,a=l.0,b=2.0;whi 1 e(l)(c=b-(b*b*b+4*b*b-10)*(b-a)/(b*b*b+4*b*b(a*a*a+4*a*a);3 i f(
5、f a bs(b-c)0.5*0.0 0001)br e ak;b=c;p rin t fC f nn,b);)pr i n tf(n%f nM,c);)1.2 5 0 0 0 01.2 5 0 0 0 01.3 1 2 5 0 01.3 4 3 7 5 01.3 5 9 3 7 51.3 5 9 3 7 51.3 6 3 2 8 11.3 6 3 2 8 11.3 6 4 2 5 81.3 6 4 7 4 61.3 6 4 9 9 01.3 6 5 1 1 21.3 6 5 1 7 31.3 6 5 2 0 41.3 6 5 2 1 91.3 6 5 2 2 71.3 6 5 2 2 71.
6、3 6 5 2 2 91.3 6 5 2 3 01.3 6 5 2 3 00.0 0 0 0 0 1J.J J J J J J1.5 0 0 0 0 01.3 7 5 0 0 01.3 7 5 0 0 01.3 7 5 0 0 01.3 7 5 0 0 01.3 6 7 1 8 81.3 6 7 1 8 81.3 6 5 2 3 41.3 6 5 2 3 41.3 6 5 2 3 41.3 6 5 2 3 41.3 6 5 2 3 41.3 6 5 2 3 41.3 6 5 2 3 41.3 6 5 2 3 41.3 6 5 2 3 41.3 6 5 2 3 11.3 6 5 2 3 11.3
7、 6 5 2 3 11.3 8 7 2 5 61.3 6 0 7 3 11.3 6 6 1 6 01.3 6 5 0 3 81.3 6 5 2 7 01.3 6 5 2 2 21.3 6 5 2 3 21.3 6 5 2 3 02割线法实验结果和分析两种方法均能求出方程的解,但割线法比二分法的收效速度更快,且程序的代码更简洁。心得体会(碰到的问题和解决方法)通过实验,加深了对方程求根方法的理解,加强了实践操作能力,实现了理论和实践相结合。合理运用G a u s s 消元法、LU分解法、追赶法求解下列方程组:实验名称实验二线性方程组的直接求解实验目的和规定实验内容高斯消元:10.3x 10年5.
8、29111.2159.14-6.130923-1511221王了259.1746.7 81248412278621121123111(n=5,10,100,)1 ik=a I k /a,k ka ij-H ij 1 i k*a,k j (k=l,2,,ni=k+l,k+2,n j=k+l,k+2,n +1)由回代过程求得原方程组的解:xn=an n+1 /an n xa kn+l-S Hkj X j)/&kk追赶法:当 矩 阵A为三对角矩阵,在A 的L U分解中,L取下三角阵,U取单位上三角阵,这 样 求 解 方 程 组A x =d的方法称为追赶法.L U分解法:将系数矩阵A转化为A =L *
9、U ,L为单位下三角矩阵,U为普通上三角矩阵,然后通过解方程组l*y=b ,u*x =y,来求解x。重要仪器设备台式或笔记本计算机实验记录(写出实验内容中的程序代码和运营结果)(可分栏或加页)高斯消元法#in c 1 u d e#d e f i n e n 3m a in ()i n t i,j ,k ;f l o a t a n n,c n n,b n,d n ;f o r (i=0;in;i+)f o r (j =0;j n;j +)(s c a n f (%f ,&a i j );c ij s c a n f (%f”,&b i);d i=b i;)f o r (k=0;kn;k+)b
10、k =d k /c k k;f o r (i=0;i n;i +)i f (i =k )c o n t in u e;c i k=c i k/c k k;f o r (j=k +1;j n;j+)a k j =c k j/c k k;a i j=c i j-c i k*c k j :b i=d i-c i k *d k;for(i=0;in;i+)d i =b i;f o r (j=k +1;j n;j +)=a ij ;f o r(i=0;i n;i +)p r in t f (?,b%d=%f n,i,b i );)LU分解法:#i n clu d e#i n cl u de#define
11、 L 30d o u b le aL L,bL,1LL,uL L,x L,y L;i n t mai n()(in t n,i,j,k,r;opr in tf(请输入矩阵元次:n );sc an f(%d,&n);它 i ntf(请输入矩阵各项:n );for(i=l;i=n;+i)(f or(j=l;j=n;+j)。sea n f(%1 f,&a ij);)print f(请输入方程组的常数项:n);f o r(i=l;i=n ;+i)s e a n f(%l f”,&b Li );0)f o r(i=l;i=n;+i)o f o r(j=l;j=n;+j)(l ij 1=0;中皿=0.0;
12、)f o r(k=l;k=n ;+k)0 000 f o r(j=k ;j =n ;+j)(。o u k j=a E k j ;f o r (r=l;r k;+r )U k j E j -1 E k I r *u r j j;0 0 J)f o r (i=k+1;i=n;+i)(-l i k =a i k;。f 0 r(r =1;r k ;+r)。l i k -=1 i r j*u l r j E k J;)l ik /=u k k;)1 k J k J=1.0;f o r (i=l ;i=n;+i)(y i=b i ;f o r(j =l;j 0;i)x i=y i ;for(j=i+1;j
13、x i-=uij*xj;)xi/=uii;)f o r(i=l;i=n;+i)(p rintf(%0.21fn ,xi);)ret u r n 0;追赶法#i n clud e”s t dio.h”#defin e n 5main()(flo a t an,bn,cn-l,d n,t;inti;scanf(n%f%f%f H,&b0,&c0,&d0);for(i=l;in-l;i+)sean f(H%f%f%f%f,&ai,&bi,&c i,&d i);scanf(%f%f%f ,&an-l,&b Ln-1,&d n -1 );clO=c 0 /b LO;d0 =d 0/b0;fo r(i=l
14、;i=0;i-)di=d i-ci*d i+1;f or(i=0;i 1-7 1 2 1-5 1 2 1-5 1 2 1-5 1 2-5U0=-4.166667U1J=1.333333i2=-3.500000H30.666667i4J=-2.833333,士二 上地上N,任_3追赶法实验分析:高斯消元法,是先消元,再回带的过程。由程序段可以发现,始终消去对角线下方的元素。从消元过程可以看出,对于n 阶线性方程组,只要各步主元素不为零,通 过 n-1 步消元,就可以得到一个等价的系数矩阵为上三角形阵的方程组,然后再运用回代过程可求得原方程组的解。LU分解法,分解矩阵为单位下三角阵L 与上三角阵U
15、 的乘积,然后解方程组 L y=b,回代,解方程组U x=y。其中的L 为 n 阶单位下三角阵、U为上三角阵.对于追赶法,追赶法是合用于三角矩阵的线性方程组的求解的方法,并不合用于其他类型矩阵。心得体会(碰到的问题和解决方法)本次实验难度比较大,在编译时经常出现各种错误,程序代码也比较繁琐,深深感觉到自己的上机操作能力有限,应加强自己的编程能力,以后-要继续努力。实验名称实验三线性方程组的迭代求解实验目的和规定使用雅可比迭代法或高斯-赛德尔迭代法对下列方程组进行求解。10国一 Xj-2x=7.2-一玉+1 0 1 2/=8 3。1 一天一 5+5 巧=4 2实验内容设线性方程组 Ax=b的系数
16、矩阵A可逆,且主对角元素a 一,a22,a 向 均不为零,令D=d i ag(an,22,a nn)并将A分解成 A=(A-D)+D从而线性方程组可写成 Dx=(D-A)x+b则有迭代公式x(k+1)=B 1 x(k)+f 1其中,B1=I-D-1A,f l=D-lbo重要仪器设备台式或笔记本计算机实验记录(写出实验内容中的程序代码和运营结果)(可分栏或加页)雅可比迭代法#includ e#in c 1 ude#define n 3v o id f(float*b,f 1 oa t x口)f 1 o a t y n+1 =0,0,0,1;i nt i ,j,k ;d o k =0;f or(i
17、 =0;i n+1 ;i+)x i =y i ;f o r(i=0;i n;i +)y i =0;f o r(j =0;j n+1 ;j+)y i +=*(b+(n+1)*i +j )*x j ;f or(i=0;i n;i+)i f (f a b s(y i -x i )=0.5 e-3 )k +;i f (k=3)b re a k ;8wh i le (1);f or(i=0;i n;i+)pri n t f (“y%d =%f n,i,y i );)ma i n()f loa t b n n+1 =0,0.1,0.2,0.7 2,0.1,0,0.2 ,0.8 3,0.2,0.2,0 ,0
18、.84;f lo a t x n+l =0,0 ,0,1);f (b 0 ,x);高斯一赛德尔迭代法#include i o st r e a m#include i o mani pusi n g nam e sp a ce std;i n t main()i n t i,j,k=0,m,n;d ouble tl,t2,e 1,e2=0.0;cout”请输入精度e:”;ci n e l;cout”请输入系数矩阵行数:”;c i nm;cout”请输入系数矩阵列数:”;c i n n;c outendl;dou b 1 e(*a)=new doubl e*m;/生成二维动态数组of o r(i
19、=0;i=m;i+)(a i=new d o ubl e n;)o d o ubl e(*b)=n ew dou b le m;4double(*x)=new d oubl e n;cout 请输入系数矩阵:Vendl;cout -.-.-n e ndl;f o r(i n t num 1=0;numlm;n u ml+)f or(int n um 2=0;num2a n um 1 n u m2;0coute n d 1 ;cout 输入的系数矩阵为:V endl;for(in t num 3=0;num3m;num3+)(fo r(in t n u m 4=0;num4n;num4+)cou
20、tanum3num 4 ;0co u t c out”请输入矩阵 b:e n di;scoutC -.”Vendl;f o r(i n t num 5=0;num5 b num5;)cout 输入的矩阵b为:e nd 1 ;for(int n u m6=0;n um6m;num6+)(cout b n u m 6 n”;)cou t endl;c o u t -.-e n d 1;for(i n t num7=0;num7n;num 7+)。(o x num7=0.00 0 0;)do(o ut“第 V k V”次迭代值:“;e2=0.0;for(i=0;i m;i+)s(double sum
21、=0.0;o for(j=0;j=0?(x i)-t 1:tl-(x i);e2=(e2=t2?e2:t 2);c outset p r ecisi o n(8)x inc o u tendl;k+;whi 1 e(e2=e 1&k3 0);c o utV V”共迭代了 V k V次”;del e tea;del e te b;delet e x;r et u rn 0;)实验结果和分析1雅克比迭代y 0=l.099811y t l1=1.199811y2=1,2997?7请按任意键继续.2高斯一一赛德尔迭代请输入系数矩阵:10-1-2T 10-2-1 T 5请输入矩阵上7.2 8.3 4.2
22、值值值值-1俏值百弋代代代代代代”次次次次次次次次01234567第第第第第第第里H.721.043081.09312951.09912651.09989041.09998621.09999831.09999980.9021.1671881.19572371.19946681.19993281.19999151.19999891.19999991.16441.28205361.29777061.29971871.29996461.29999561.29999941.2999999实验分析:使用这两种方法都可以求出方程的解,高斯赛德尔迭代法所需的迭代次数比雅克比迭代少,可以更早的达成精度规定。但
23、是雅克比的时效性要比高斯赛德尔的好。心得体会(碰到的问题和解决方法)本次实验,让我对这两种方法更加理解,在编程操作上也更加纯熟,此后继续努力,不断丰富自己的知识,增强操作能力。实验名称 实验四代数插值和最小二乘法拟合实验目的和规定1使用拉格朗日插值法或牛顿插值法求解:已知f(X)在6个点的函数值如下表所示,运用插值方法,求f(0.5 9 6)的近似值。X0.4 00 .5 50.6 50.8 00.9 01.0 5f (X)0 .4 1 0.5 7 80.6 9 6 0.88 8 1 11.0 2 6 51 .2 5 3 86075157522给定数据点(方,6),用最小二乘法拟合数据的多项式
24、,并求平方误差。Xi00.50.60.70.80.91.0yii1.751.962.192 .4 42.713.00实验内容1设函数在区间 a,b 上n+1互异节点X o,X 1,Xn上的函数值分别为y ,yi,y n,求n次插值多项式R(X),满足条件P n(X j)=y j,j=0 ,1 ,n令Ln(x)=y olo(x)+y ili(x)+-+ynln(x)=y ili(x)其 中1 0 (x ),1 1(x),,L(x)为以x Q,X1,X n为节点的n次插值基函数,则L n(x)是一次数不超过n的多项式,且满足L n(x j)=y j,L =0,1,,n再由插值多项式的唯一性,得P
25、n(X)=Ln(X)2 建立正规方程组:E(Z X iJ+k)ak=E xy i,j=o,1,-,n平方误差:丁k9I=E (L akx i -y i)对给定数据点(X i,Y i)(i=0,l,,m),在取定的函数类 中,求p(x)e,使误差的平方和E 2最小,E2=Z E p(x i )-Y i1 2o1#in c 1 u d e#i n cl u de#inclu d e#in c lu de v o i d di f f e ren c e(flo a t *x ,float *y,in t n)(ofloa t *f;in t k,i;f=(f 1 o a t *)m all o c
26、(n*s i z e o f(f 1 o a t);for(k=l;k=n;k+)fl 0 =y k;f o r (i=0 ;i k;i+)of i+1 =(f i-y i)/(X k-x i);y k=nk;)6 ret u r n;)int m a in()(i n t i,n;f l o a t x 2 0 ,y 2 0,x x,y y;pr i n t f(请输入数据个数n:);从几何意义上讲,就是寻求与给定点(X i,Y i)(i =0,1,的距离平方和为最小的曲线y=P(x)。函数p(x)称为拟合函数或最小二乘解,求拟合函数P(x)的方法称为曲线拟合的最小二乘法。得到的两个关于a。
27、、al为未知数的两个方程组,解这两个方程组得出:a0 =(S Y i)/m al(E X i)/ma 1 =m S X i Y i -(X X iX Y i)/m S X i2 -(S Xi )2 )即最终的拟合多项式各项系数重栗仪器设备台式或笔记本计算机实验记录(写出实验内容中的程序代码和运营结果)(可分栏或加页)scanf(%d ,&n);pr i n t f(n);for(i=0;i=0;i-)y y=y y *(x x-x i)+y i;prin t f(nn 近似值为:(f)=%fn n,x x,y y);)2#i nclu de#i n clu de#d e fi n e N 1
28、5d ou ble pow er(dou ble&a 9 i nt n)(dou ble b=l;d f or(i n t i=0;i n ;i+),b*=a;re t u rn b;)v o i d Gau ss();d o u bl e X N,Y N,su m X N,s u m Y N ,a N N,b N,1 N N,x N;int m ain()(ofst r e a m o u t d at a;i f st r e a m i ndat a;d o u b 1 e s;o i n t iJ,k,n,index;c o u t v v”请输入已知点的个数n=H;o c i n n
29、;cou t e ndl;ocou t v v”请输入X和Y:“we n d I;/獭入给定数据of o r(i=0 ;i n;i+)(d c o u t MXM i H。c i nXi;ddsumX 1+=Xi;3coutMYM i H=n;gcinY i;dsumYl+=Y i;coutendl;coutnsumX 1 =nsum X 1 ,tHH s umYl=sumYlind e x;dcoutend 1 ;i=n;s u mX0=i;f o r(i=2;iv=2*in d ex;i+)mXi=0;of or(j=O;jn;j+)0slimX i+=pow e r(Xj,i);c o
30、u tnsumX H i n=sum Xiend 1 ;4fifor(i=2;i=in d e x+1;i+)qo sumYi=0;4*0 r(j=0;j n;j+)dsumYi+=p o wer(Xj,i 1)*Y j;geo u t nsumY n i n=n s u mYiendl;for(i=1:i=i n d e x+1;i+)“建立正规方程组gfo r(j=1;j=i n d e x+l;j+)ai j 1=s u mX i+j-2;?b i=s umYi;)k=l;用高斯消元法解方程组0(10(for(j=k+l;j=index+l;j+)1 jk=aj k/ak k;dfo r
31、(i=k+1;i=i n d e x+l;i+)fo r(j=k+1;j=l;i)(a s=0;o f o r(j=i+1;j=index+l;j+),s=s+ai j*x j;x i=(b i-s)/aii;),c。u t 拟合系数为:;/检出拟合系数for(i=l;i=in d ex+1;i+)oco u t x iH t”;d o u b 1 e m=0;c o utvVendlvv”平方误差为:;for(i=0;in;i+)double t=x l+x 2*X i-Y i;,m=m+powe r(t,2);,c o u t m e n di;实验结果和分析1 代数插值 百题 人 敢 据
32、 个 敷n,x(0 J-0.4 0J-W.4 1 0 7 Sx(l 1-0.5 5y【l J-0.5 7 8 1 5x(2 J-0.6 5V(2 J-W.6 9 6 7 5x E 3 1-0.8 0S3 3-0.8 8 8 1 1x(4 J-0.9 0y(4 J-l.0 2 6 5 2x t 5 J-l.0 5y l S J-l.2 5 3 8 6请 输 入 插 值 x x.0.5 9 6近在 的为 0.5 9 6 S 0 0)0.6 3 1,9 2 32最小二乘法请输入已知点的个数n=7请输入X和Y:XE0=0V0=1X tl=0.5V13=1.75X23=0.6V21=1.96XC3=0.
33、7V3=2.19Xt4=0.8Vt4=2.44X53=0.9V5=2.71X 6=1.0V6=3.00半:sunX Cl=4.5 sunY1=15.05请输入拟合次数index=2sunX2=3.55sunX33=2.925sunX43=2.4979sunV23=10.975sum?3=8.9729拟 直 系 数 刃i平方误差为:2.49791Press any key to continue实验分析:1拉格朗日插值的插值多项式特别容易建立,缺陷是增长节点是原有多项式不能运用,必须重新建立,即所有基函数都要重新计算,这就导致计算量的浪费。2数据拟合的具体作法是:对给定的数据(石,y;)(i=0,1,,m),在取定的函数类中,求p(x)属于此函数类,使误差r i=p(x j yi(i=0,1,,m)的平方和最小,即X X i-S (S p(x i)-y i)2=m i n从几何意义上讲,就是寻求与给定点(x,/)(i =0,1,m)的距离平方和为最小的曲线y=p(x)。心得体会(碰到的问题和解决方法)1通过做代数差值实验,加深了对牛顿插值和拉格朗日差值的理解,体现了这些算法的优点,提高了自己的能力,巩固了知识。2本次实验设计,很好地实现了最小二乘法的程序模拟。感觉收获很大。特别是对平方误差的计算模块,一次成功。最后还对程序进行优化,删去冗余以及标准化模块。很好,坚持下去便是。
限制150内