还剩24页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
TAIYUANUNIVERSITYOFTECHNOLOGY本科实验报告课程名称计算机数值方法实9佥项目方程求根线性方程组的直接解法线性方程组的迭代解法代数插值和最小二乘法拟合多项式实验地点逸夫302专业班级软件学号:学生姓名指导教师:田华2023年4月24日实验结果和分析12314012824113b[01=
1.000000b[11=
2.000000b
[2]=
3.000000请输入矩阵阶数n蓍输入矩阵各项42158721048361261120请输入方程组的常数项:2773x[l]=-
1.00xL2J=
1.00xt3]=-
1.00x
[4]=
1.003追赶法21-7121-5121-5121-512-5H0]=-
4.166667Hl]=l.333333i
[2]=-
3.5000001C3]=
0.66666U4]=-
2.833333=4/~r=上科11H实脸分析高斯消元法是先消元再回带的过程由程序段可以发现始终消去对角线下方的元素从消元过程可以看出,对于n阶线性方程组,只要各步主元素不为零,通过n-1步消元,就可以得到一个等价的系数矩阵为上三角形阵的方程组,然后再运用回代过程可求得原方程组的解LU分解法,分解矩阵为单位下三角阵L与上三角阵U的乘积,然后解方程组Ly=b回代,解方程组Ux=y其中的L为n阶单位下三角阵、U为上三角阵.对于追赶法,追赶法是合用于三角矩阵的线性方程组的求解的方法,并不合用于其他类型矩阵心得体会(碰到的问题和解决方法)本证实验难度比较式在编译时经常出现各种错误「程序代码也比较繁琐「谏深感觉到自己的上机操作能力有限,应加强自己的编程能力,以后•要继续努力{f1oaty[n+1]={0001};intijk;do{k=0;fori=0;in+1;i++x[i]=y[i];fori=0;in;i++{yLi]=0;forj=0;jn+1;j++y[i]+=*b+n+D*i+j*x[j];}fori=0;in;i++iffabsy[i]-x[i]=
0.5e-3k++;ifk==3break}while1;fori=0;in;i++printf〃y[%d]=%f\n〃iy[i];}main{floatb[n][n+l]={
00.
10.
20.
720.
100.
20.
830.
20.
200.84;floatx[n+l]={0001};fb
[0]x;高斯一赛德尔迭代法#includeiostream”#includeiomanip”usingnamespacestd;intmain{intiJk=mn;doublee1e2=
0.0;coutvv”请输入精度e H;,cin»el;coutvv”请输入系数矩阵行数:dcin»m;coutvv”请输入系数矩阵列数”;in»n;coutendl;doubIe**a=newdouble*[m];〃生成二维动态数组ori=0;i=m;i++ga[i]=newdouble[n];,double*b=newdouble[m];ddouble*x=newdouble[nJ;cout«请输入系数矩阵:vVendl;cout«”——--————一—・…n«endl;forintnum1=0;numlm;numl++forintnum2=0;num2n;num2++g,cina[num1][num2];gcoutvvend1;cout”输入的系数矩阵为了VVendl;dforintnum3=0;num3m;num3++{gforintnum4=0;num4n;num4++®®dcout«a[num3][num4]«H;®coutendl;cout-------------------M«endl;ocoutvv”请输入矩阵b nendl;♦coutVv”——■-■・-■・■・■-...—....一——-一VVendl;forintnum5=0;num5m;num5++{cinbEnum5];cout«”输入的矩阵b为:VVend1;dforintnum6=0;num6m;num6++coutb[num6]«nM;cout«endl;coutH————----———--11VVend;forintnum7=0;num7n;num7++,,x[num7]=
0.0000;,do,coUtvv第VvkVv次迭代值:“;de2=
0.0;fori=0;im;i++°{doublesum=
0.0;6forQ=0;jn;j++ifj!=isum+=a[i][j]*x[j];d},11=xfi];g“2=e2;^x[i]=b[i]-sum/a[i][i];^e2=x[i]-tl=0x[i]-11tl-x[i];®de2=e2=t2e2t2;cout«setprecision8«x[i]«H}cout«endl;,k++;}whi1ee2=e1k30;虱outVV”共迭代了“VvkvV次delete[]a;»delete[]b;delete[]x;»return0;}实验结果和分析1雅克比迭代k»
[0]=l.099811[U=
1.199811[23=
1.299777信按任意键继续一.2高斯一一赛德尔迭代请输入系数矩阵:10-1-2-110-2-1-15请输入矩阵b
7.
28.
34.2实验分析:使用这两种方法都可以求出方程的解,高斯赛德尔迭代法所需的迭代次数比雅克比迭代少,可以更早的达成精度规定但是雅克比的时效性要比高斯赛德尔的好心得体会碰到的问题和解决方法本次实验,让我对这两种方法更加理解,在编程操作上也更加纯熟,此后继续努力,不断丰富自己的知识,增强操作能力实验成绩实验名称实验一方程求根实验目的和规定必填熟悉使用、迭代法、牛顿法、割线法等方法对给定的方程进行根的求解选择上述方法中的两种方法求方程:二分法fx=x3+4x2-10=0在
[12]内的一个实根,且规定满足精度IX*-Xn|
0.5X1O-[2:代码
1.二分法:#includestdio.h#indudestd1ib.h#inc1udemath.h][3:ntmain][4:][5:doubIea=
1.0b=
2.0;][6:doubiexs;whi1e1x=a+b/2;][7:=powx3+4*x*x-10;if-
0.000005ss
0.000005break;eIseifs0{a=x;]实验内容和原理必填函数fx在区间xy上连续,先在区间xy拟定a与b若fafb异号说明在区间ab内存在零点,然后求f[a+b/2]假设FaV0Fb0ab
①假如f[a+b/2]=0该点即为零点;
②假如f[a+b/2]0则区间a+b/2b内存在零点,a+b/2Na;
③假如f[a+b/2]0则区间aa+b/2内存在零点a+b/2Wb;返回
①重新循环,不断接近零点通过每次把fx的零点所在区间收缩一半的方法,使区间内的两个端点逐步逼近函数零点,最终求得零点近似值重要仪器设备台式或笔记本计算机实验记录写出实验内容中的程序代码和运营结果可分栏或加页2给定数据点Hy用最小二乘法拟合数据的多项式,并求平方误差实验内容1设函数在区间[ab]上n+1互异节点XoX1•••Xn上的函数值分别为yoyi・・・,y2求n次插值多项式p“x满足条件PnXj=yjj=01•-•n令Lnx=yolox+yLx+--+ynlnx=XYilix其中10X11xlnx为以X0Xi•••Xn为节点的n次插值基函数,则Lnx是一次数不超过n的多项式且满足Lnxj=YjL=01…,n再由插值多项式的唯一性,得PnX=Lnx2建立正规方程组£EXijkak=LXijyij=01-n平方误差I=ESakxik-yi2对给定数据点{XiYi}i=0l…,m在取定的函数类
①中,求px£
①,使误差的平方和E2最小E=ZEpXi-Yi]o[8:#inc1udestdio.h#includestdlib.h#includeconio.h#includea11oc.hvoiddifferencefloat*xfloat*yintnofloat*f;intki;f=f1oat*mallocn*sizeoffloat;fork=l;k=n;k++0]=y[kl;fori=0;ik;i+-Fof[i+1]=ni]-y[i]/X[k]-x[i];3y[k]=f[k];叶dreturn;][9:}intmainintin;floatx
[20]y
[20]xxyy;printf请输入数据个数n”;]从几何意义上讲,就是寻求与给定点{XiYi}i=01…m的距离平方和为最小的曲线y=px函数px称为拟合函数或最小二乘解,求拟合函数px的方法称为曲线拟合的最小二乘法得到的两个关于a
0、al为未知数的两个方程组,解这两个方程组得出a0=EYi/m—alLXi/ma1=[mZXiYi-SXiZYi]/[mEXi2-EXi2]即最终的拟合多项式各项系数重要仪器设备台式或笔记本计算机实验记录写出实验内容中的程序代码和运营结果可分栏或加页oscanf%1,n;printf”\n;fori=0;i=n-l;i++,printfx[%d]=i;scanfC%fnx[i];,printfCy[%dl=i;aoprintf\nM;叩rintf”\nM;differencexfloat*yn;printf请输入插值xx:;oscanf,%xx;yy=yl20];fori=n-1;i=0;i--yy=yy*xx-x[i]+y[i];printfH\n近似值为%f=%Annxxyy;2#includeiostrearn.h#includefstream.h#defineN15doublepowerdoubleaintn{doubleb=l;®forinti=0;in;i+4-»b*=a;returnb;}voidGaussQ;doubleX[N]Y[N]^umX[N]sumY[N]a[N][N]b[N]1[N][N]x[N]intmainofstrearnoutdata;ifstreamindata;doub1es;®intijkindex;coutvv”请输入已知点的个数n=M;cin»n;coutendl;ocoutvv”请输入X和Y”vvendI;〃输入给定数据ori=0;in;i++®cout«nX[«i«H]二;cin»X[iJ;®osumX[l]+=X[i];®cout«Y[«i«M]=M;«®cin»Y[i];®dsumY[l]+=Y[i];acout«endl;■}®cout«MsumX
[1]=n«sumX
[1]\t«MsumY[l]=«sumY[lJendi;coutvV”请输入拟合次数index=M;cinindex;»coutend1;i=n;sumX[]=i;fori=2;iv=2*index;i++®sumX[i]=0;•forj=O;jn;j++®sumX[i]+=powerX[j]i;^coutMsumX[«i«nl=«sumX[ilend1;®fori=2;i=index+1;i++q®sumY[i]=0;®forj=0;jn;j++®sumY[i]+=powerX[j]i—1*Y[j];«coutvvsun】Y[i«,l=H«sumY[il«endl;}fori=1;i=index+1;i++{//建立正规方程组«®forj=1;j=index+l;j++a[i]Ej]=sumX[i+j-2];b[i]=sumY[i];k=l;〃用高斯消元法解方程组,do{forj=k+l;j=index+l;j++I[j][k]=a[j][k]/a[k][k];®fori=k+1;i=index+l;i++forj=k+1;j=index+1;j++Mi][j]=a[i][j]-l[i][kl*a[k][j];gblij=b[i]-l[i][k]*b[k];aifk==index+lbreak;k++;}whilel;x[index+1]=b[index+1]/a[index4-1][index+1];♦fori=index;i=l;i-{9s=0;oforj=i+1;j=index+l;j++s=s+a[i][j]*xU];,x[i]=b[i]-s/a[i][i];®cout«拟合系数为;//输出拟合系数afori=l;i=index+1;i++®cout«x[il«M\t;doub1em=0;coutvVendlvv”平方误差为:;fori=0;in;i++doublet=x[l]+x[21*X[i]-Y[i];gm=m+powert2;Ocout«m«endi;实验结果和分析1代数插值x0-
0.40xtl1-
0.55y【lJ-
0.57815x2J-
0.65VE21-
0.6967Sxt31-
0.814/[31-
0.88811x4J-
0.90J-l.02652x5J-l.05y153-
1.25386诗懈人插值xx,
0.596近似值为,0-596000-0・6319232最小二乘法请输入已知点的个数n=7请输入X和丫X
[0]=0V
[0]=1X[U=
0.5V[l]=
1.75Xt2]=
0.6¥E2]=
1.96Xt3]=
0.7V[31=
2.19XE4]=
0.8
[4]=
2.44XC51-
0.9¥[51=
2.71X
[6]=
1.0VE6]=
3.00半:sunX[U=
4.5sun[11=
15.05请输入拟合次数index=2sunX
[2]=
3.55sunX
[3]=
2.925sunX[43=
2.4979sum[23=
10.975sunY[31=
8.9729拟盒系婺力门11平芳误差为
2.4979Pressanykeytocontinue实脸分析1拉格朗日插值的插值多项式特别容易建立,缺陷是增长节点是原有多项式不能运用,必须重新建立,即所有基函数都要重新计算,这就导致计算量的浪费2数据拟合的具体作法是对给定的数据2,%i=01m在取定的函数类中,求px属于此函数类使误差n=pXi—yii=01…,m的平方和最小,即Sri2=SSpxj-yi2=min从几何意义上讲,就是寻求与给定点X,//i=01•••m的距离平方和为最小的曲线y=px心得体会碰到的问题和解决方法1通过做代数差值实验,加深了对牛顿插值和拉格朗口差值的理解,体现了这些算法的优点,提高了自己的能力,巩固了知识2本次实验设计,很好地实现了最小二乘法的程序模拟感觉收获很大特别是对平方误差的计算模块,一次成功最后还对程序进行优化删去冗余以及标准化模块很好,坚持下去便是eIseifs0b=x;printf%f\t%f\n”ab;}printf%AnMx;printfM%f\nns;return0;}
2.割线法#includeustdio.h#includemath.hMintmainfloatca=l.0b=
2.0;whi1elc=b-b*b51tb+4*b*b-10*b-a/b*b*b+4*b*b—a*a*a+4*a*a;0iffabsb-c
0.5*
0.00001break;b=c;printf%f\n0b;printfH%f\nMc;}流程图;(\「)「【j32H厂IiI运营结果;1二分法
1.
3872561.
3607311.
3661601.
3650381.
3652701.
3652221.
3652321.3652302割线法实验结果和分析两种方法均能求出方程的解,但割线法比二分法的收效速度更快,且程序的代码更简洁心得体会(碰到的问题和解决方法)通过实验,加深了对方程求根方法的理解,加强了实践操作能力,实现了理论和实践相结合取单位上三角阵,这样求解方程组Ax=d的方法称为追赶法.LU分解法将系数矩阵A转化为A=L*UL为单位下三角矩阵U为普通上三角矩阵然后通过解方程组l*y=bu*x=y来求解xo重要仪器设备台式或笔记本计算机实验记录写出实验内容中的程序代码和运营结果可分栏或加页高斯消元法#inc1udestdio.h#definen3main{intijk;floata[n][n]c[n][n]b[n]d[n];fori=0;in;i++{forj=0;jn;j++{scanfu%fHa[i][j];c[i][j}scanf〃%f〃b[i];d[i]=b[i];}fork=0;kn;k++[b[k]=d[k]/c[k][k];fori=0;in;i++{ifi==kcontinue;c[i]Lk]=c[i][k]/cEk][k];forj=k+1;jn;j++{a[k][j]=c[k][j]/c[k][k];aLi][j]=c[i][j]-c[i][k]*c[k][j];}b[i]=d[i]-c[i][k]*d[k];}fori=0;in;i++{d[i]=b[i];forj=k+1;jn;j++c[i][j]=a[i][j];}}fori=0;in;i++printfz,b[%d]=%f\n〃,ib[i];LU分解法includestdio.hincludemathh#dcfincL3doublea[L][L]b[L]1[L][L]u[L][L]x[L]y[L];intmainintnijkr;oprintf请输入矩阵无次:\n;scanf%dn;叩rintf请输入矩阵各项:\n;fori=l;iv=n;++iforj=l;j=n;++jseanf%1fa[i皿;0}}printf请输入方程组的常数项n;fori=l;i=n;++i{seanf%lfub[i];°fori=l;i=n;++i{®forj=l;j=n;++j,对[i][j1=0;u[i]U]=O.O;Ifork=1;k=n;++kO{00oforj=k;j=n;++j°{u[k][j]=a[k]|j];fbrr=l;rk;++r°{u[k][j]-=1[k][r]*u[r][j];00|fori=k+1;i=n;++i-l[i][kl=a[i][k];forr=1;rk;++r°{1[i][k]-=1[il[r]*u[r][kJ;l[i][k]/=u[k][k];1[k][k]=
1.0;fori=l;i=n;++iy[ij=b[i];®fbrj=l;ji;++jg{♦Ei]-=i[i]Ul*yUl;}fori=n;i0;-ix[i]fbrj=i+1;卜=n;++j-x[i]-=u[i]U]*xj];°x[i]/=u[i][i];fori=l;i=n;++iprintfH%021f\nxfil;return0;追赶法#includestdio.h#definen5mainfloata[n]b[n]d[n]t;inti;scanf%f%f%f0b
[0]c
[0]d
[0];fori=1;in-l;i++seanfc[i]d[i];scanf%f%f%f0a[n-l]b[n-1]d[n-1];c
[0]=c
[0]/b
[0];d
[0]=d
[0]/b
[0];fori=l;in—1;i++{t=b[i]-c[i-l]*a[i];c[il=c[il/t;d[i]=d[i]*a[i]/t;}d[n-l]=d[n-1]-d[n-2]*a[n-l]/b[n-1]-c[n-2]*a[n-l];fori=n-2;i=0;i--d[i]=d[i]-c[i]*d[i+1];fori=0;in;i++printfd[%d]=%f\nid[i];实验名称实验三线性方程组的迭代求解实验目的和规定使用雅可比迭代法或高斯-赛德尔迭代法对下列方程组进行求解jlO不一“一2巧=72一巧+10巧-2巧=83°[一天一巧+54=42实验内容设线性方程组Ax=b的系数矩阵A可逆且主对角元素aIta22・・・,a而均不为零令D=diagana22•ann并将A分解成A=A-D+D从而线性方程组可写成Dx=D-Ax+b则有迭代公式xk+l=B1xk+fl其中,B1=I-D-1Afl=D-lbo重要仪器设备台式或笔记本计算机实验记录写出实验内容中的程序代码和运营结果可分栏或加页雅可比迭代法#includestdio.h#inc1udemath.httdefinen3voidffloat*bf1oatx[1实验名称实验四代数插值和最小二乘法拟合实验目的和规定1使用拉格朗日插值法或牛顿插值法求解:已知fX在6个点的函数值如下表所示,运用插值方法,求f.596的近似值X
0.
400.
550.
650.
800.
901.05fX
0.
410.
5780.
696.
888111.
02651.2538607515752Xi
0.
50.
60.
70.
80.
91.
011.
751.
962.
192.
442.
713.00实验名称实验二线性方程组的直接求解实验目的和规定合理运用
①②③④JGauss消元法、LU分解法、追赶法求解下列方程组-1231x1F14012x2=8_24lJ[x3J[
130.3x10-
1559.143iTxJ「
59.
1715.291-
6.130-12x2_
46.
7811.29529—1121lJ|_x4J[2_-4215Tx][-287210x2_-74836x3--7126112J[x4J|_-3_~21Tx1r-7-21x2-5:n=510100••211-5_12h_|[-5]实验内容高斯消元1ik二aik/akkai尸aij—1ik*ajk=l2…,n—1i=k+lk+2•••nj=k+lk+2•••n+1由回代过程求得原方程组的解xn=ann+1/annxk=akn+i—Sakjxj/akk追赶法当矩阵A为三对角矩阵,在A的LU分解中,L取下三角阵,U。