计算方法实验报告doc.docx

上传人:b****7 文档编号:15347849 上传时间:2023-07-03 格式:DOCX 页数:6 大小:18.82KB
下载 相关 举报
计算方法实验报告doc.docx_第1页
第1页 / 共6页
计算方法实验报告doc.docx_第2页
第2页 / 共6页
计算方法实验报告doc.docx_第3页
第3页 / 共6页
计算方法实验报告doc.docx_第4页
第4页 / 共6页
计算方法实验报告doc.docx_第5页
第5页 / 共6页
计算方法实验报告doc.docx_第6页
第6页 / 共6页
亲,该文档总共6页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

计算方法实验报告doc.docx

《计算方法实验报告doc.docx》由会员分享,可在线阅读,更多相关《计算方法实验报告doc.docx(6页珍藏版)》请在冰点文库上搜索。

计算方法实验报告doc.docx

计算方法实验报告doc

计算方法实验报告

实验报告

一、求方程fxx3-sinx-12x1的全部根,ε1e-61、用一般迭代法;2、用牛顿迭代法;并比较两种迭代的收敛速度。

一、首先,由题可求得.其次,分析得到其根所在的区间。

①令,可得到.②用一阶导数分析得到和两个函数的增减区间;再用二阶导数分析得到两个函数的拐点以及凹凸区间.③在直角坐标轴上描摹出和的图,在图上可以看到他们的交点,然后估计交点所在的区间,即是所要求的根的区间。

经过估计,得到根所在的区间为,和.1、一般迭代法

(1)算法步骤设为给定的允许精度,迭代法的计算步骤为①选定初值.由确定函数,得等价形式.②计算.由迭代公式得.③如果,则迭代结束,取为解的近似值;否则,用代替,重复步骤②和步骤③.

(2)程序代码①在区间内,代码clcx0-3.5;初值iter_max100;迭代的最大次数ep1e-6;允许精度k0;whilekiter_maxk从0开始到iter_max循环x1sinx012*x0-1.1/3;代入,算出的值ifabsx1-x0ep与允许精度作比较break;条件成立,跳出循环endx0x1;条件不成立,用代替kk1;k加1endx_starx1,iterk为解的近似值,iter为迭代次数运行结果x_star-3.4101;iter14②在区间内,代码clcx00.5;初值iter_max100;迭代的最大次数ep1e-6;允许精度k0;whilekiter_maxk从0开始到iter_max循环x11/12*x0.3-sinx01;代入,算出的值ifabsx1-x0ep与允许精度作比较break;条件成立,跳出循环endx0x1;条件不成立,用代替kk1;k加1endx_starx1,iterk为解的近似值,iter为迭代次数结果x_star0.07696;iter6③在区间内,代码clcx03.5;初值iter_max100;迭代的最大次数ep1e-6;允许精度k0;whilekiter_maxk从0开始到iter_max循环x1sinx012*x0-1.1/3;代入,算出的值ifabsx1-x0ep与允许精度作比较break;条件成立,跳出循环endx0x1;条件不成立,用代替kk1;k加1endx_starx1,iterk为解的近似值,iter为迭代次数运行结果x_star3.4101;iter102、牛顿迭代法

(1)算法步骤①选定初值,计算,.②按公式迭代,得新的近似值,并计算,.③对于给定的允许精度,如果,则终止迭代,取;否则,,在转回步骤②计算.

(2)程序代码①在区间内,clcx1-3.5;初值k0;whilek100k从0开始到100循环x0x1;将初值赋给f0x0.3-sinx0-12*x01;计算f13*x0.2-cosx0-12;计算x1x0-f0/f1;计算得到新的近似值ifabsx1-x01.0e-6与允许精度作比较break;条件成立,跳出循环endkk1;条件不成立,k加1endx_starx1,iterk为解的近似值,iter为迭代次数运行结果x_star-3.4911;iter2②在区间内,clcx10.5;初值k0;whilek100k从0开始到100循环x0x1;将初值赋给f0x0.3-sinx0-12*x01;计算f13*x0.2-cosx0-12;计算x1x0-f0/f1;计算得到新的近似值ifabsx1-x01.0e-6与允许精度作比较break;条件成立,跳出循环endkk1;条件不成立,k加1endx_starx1,iterk为解的近似值,iter为迭代次数运行结果x_star0.07696;iter3③在区间内,clcx13.5;初值k0;whilek100k从0开始到100循环x0x1;将初值赋给f0x0.3-sinx0-12*x01;计算f13*x0.2-cosx0-12;计算x1x0-f0/f1;计算得到新的近似值ifabsx1-x01.0e-6与允许精度作比较break;条件成立,跳出循环endkk1;条件不成立,k加1endx_starx1,iterk为解的近似值,iter为迭代次数运行结果x_star3.4101;iter33、运行结果x_stariterx_stariterx_stariter一般迭代3.4101140.769663.410110牛顿法3.491120.7069633.410134、结果分析从这题的结果可以看出,牛顿迭代法的迭代速度比一般迭代法的速度要快,牛顿法的迭代次数比较少。

例如,求在的根时,一般迭代法迭代了14次(iter14),而牛顿法只用了2次(iter2)。

总而言之,一般迭代法是一种逐次逼近的方法,具有原理简单、编制程序方便等优点,但存在是否收敛和收敛速度的快慢等问题。

牛顿迭代法是一种特殊的迭代法,用于求方程的单根时具有2阶收敛。

因此是一种求非线性方程解的好方法,还可以用于求重根和复根,而且可以推广到求非线性方程组的解.

二、解方程组直接法1、已知对矩阵A做LU分解。

2、用追赶法解下述方程组,并给出n10的结果,其中,1、杜利特尔分解法(直接三角分解法)设方程组的系数矩阵的各阶主子式,则可知该方程组存在唯一的杜利特尔分解,其中,.我们记矩阵的第行第列元素为,则矩阵的第一行和的第一列可由公式(1.1)求出(2.1)再由公式(2.2)求出的第行、的第列元素(2.2)

(1)算法步骤由于系数矩阵的各阶主子式,则可知该方程组存在唯一的杜利特尔分解。

①利用公式(2.1)和(2.2)求出和的元素和。

②求解单位下三角形方程组,即按公式(2.3)求出。

④求解上三角形方程组,即按公式(2.4)可求得方程组的解。

(2)程序代码function[L,U]LUAA[n,n]sizeA;定义为阶矩阵Lzerosn,n;矩阵初始化Uzerosn,n;矩阵初始化fori1nLi,i1;矩阵的对角线元素为1endfork1nforjknUk,jAk,j-sumLk,1k-1.*U1k-1,j;求出元素endforik1nLi,kAi,k-sumLi,1k-1.*U1k-1,k/Uk,k;求出的元素endendA[4215;87210;4836;1261120];矩阵[L,U]LUA2、追赶法设所求方程组为,(2.5)

(1)算法步骤①由方程组的第1个方程,将未知元用表示为记,,得。

①以此类推,用表示,用表示。

我们可以得到一般式(其中记)(2.6)(2.7)②将代入方程组(2.5)的第n个方程,并解出得,上式右端恰好是式(2.6)的。

于是,可由式(2.7)求出三对角方程组的解,即,(2.8)

(2)程序代码clca[0111111111];b[2222222222];c[1111111110];r[-7-5-5-5-5-5-5-5-5-5];u[0000000000];v[0000000000];x[0000000000];u1r1/b1;计算v1c1/b1;计算fork210ukrk-uk-1*ak/bk-vk-1*ak;计算vkck/bk-vk-1*ak;计算endx10u10;fork19xkuk-vk*xk1;由,解出endx运行结果x[-3.5000-1.0000-3.0000-1.6000-2.8333-1.8571-2.7500-2.0000-0.8182-2.0909]3、运行结果

(1)杜利特尔分解法

(2)追赶法。

4、结果分析

(1)杜利特尔分解法在实现分解后,解具有相同系数矩阵的方程组,非常方便,每解一个方程只需用式(2.3)和式(2.4)解两个三角形方程组即可,大大减少了运算工作量。

另外,矩阵和的元素可采用紧凑格式存放在系数矩阵的相应元素位置上,节省了存储单元。

(2)追赶法追赶法仅适用于三对角方程组的求解。

我们由式(2.6)和式(2.8)可以算出,追赶法的乘、除运算次数仅为,加、减运算次数仅为。

故追赶法具有运算量小和存储量小的优势。

三、解方程组迭代法1、用迭代法解Axb,其中b5,5,,5T,给定误差,用Jacobi和SOR两种迭代法计算,并给出n10的结果。

对于阶方程组,假定系数矩阵的对角元时,可得雅可比迭代格式为,(3.1)记为方程组的系数矩阵的对角元组成的对角阵,和分别为由的元素组成的严格下三角阵和上三角阵,则系数矩阵可分解为.1、Jacobi(雅可比)迭代法

(1)算法步骤①根据矩阵,算出矩阵、和,即,,。

②计算雅可比迭代矩阵.③计算矩阵.④代入给出的初值,得到雅可比迭代公式(3.1)的矩阵形式.3.2由式(3.2)就可以得到向量序列.

(2)程序代码clcA[3-1/2-1/40000000;-1/23-1/2-1/4000000;-1/4-1/23-1/2-1/400000;0-1/4-1/23-1/2-1/40000;00-1/4-1/23-1/2-1/4000;000-1/4-1/23-1/2-1/400;0000-1/4-1/23-1/2-1/40;00000-1/4-1/23-1/2-1/4;000000-1/4-1/23-1/2;0000000-1/4-1/23];x0[0000000000];初值b[5555555555];L[0000000000;1/2000000000;1/41/200000000;01/41/20000000;001/41/2000000;0001/41/200000;00001/41/20000;000001/41/2000;0000001/41/200;00000001/41/20];U[01/21/40000000;001/21/4000000;0001/21/400000;00001/21/40000;000001/21/4000;0000001/21/400;00000001/21/40;000000001/21/4;0000000001/2;0000000000];D[3000000000;0300000000;0030000000;0003000000;0000300000;0000030000;0000003000;0000000300;0000000030;0000000003];BJinvD*LU;计算雅可比迭代矩阵FJinvD*b;计算矩阵N1000;ep1e-10;误差k0;whilekiter_maxk从0开始到iter_max循环x1BJ*x0fJ;计算ifnormx1-x0,infep与误差做比较break;满足,跳出循环endx0x1;不满足,将赋给kk1;k加1endx_starx1,iterk2、SOR(超松弛)迭代法

(1)算法步骤①根据矩阵,算出矩阵、和,即,,。

②计算超松弛迭代矩阵.其中,为松弛因子,。

③计算矩阵.其中,为松弛因子,。

④代入给出的初值,得到超松弛迭代公式的矩阵形式.由式(3.2)就可以得到向量序列.

(2)程序代码clcA[3-1/2-1/40000000;-1/23-1/2-1/4000000;-1/4-1/23-1/2-1/400000;0-1/4-1/23-1/2-1/40000;00-1/4-1/23-1/2-1/4000;000-1/4-1/23-1/2-1/400;0000-1/4-1/23-1/2-1/40;00000-1/4-1/23-1/2-1/4;000000-1/4-1/23-1/2;0000000-1/4-1/23];x0[0000000000];b[5555555555];L[0000000000;1/2000000000;1/41/200000000;01/41/20000000;001/41/2000000;0001/41/200000;00001/41/20000;000001/41/2000;0000001/41/200;00000001/41/20];U[01/21/40000000;001/21/4000000;0001/21/400000;00001/21/40000;000001/21/4000;0000001/21/400;00000001/21/40;000000001/21/4;0000000001/2;0000000000];D[3000000000;0300000000;0030000000;0003000000;0000300000;0000030000;0000003000;0000000300;0000000030;0000000003];w1.3;超松弛因子BwinvD-w*L*1-w*Dw*U;计算超松弛迭代矩阵Fww*invD-w*L*b;计算矩阵iter_max1000;ep1e-10;误差k0;whilekiter_maxx1Bw*x0fw;ifnormx1-x0,infep与误差做比较break;endx0x1;kk1;endx_starx1,iterk3、运行结果

(1)雅可比迭代法迭代次数iter31

(2)超松弛迭代法迭代次数iter254、结果分析雅可比迭代法和超松弛迭代法从迭代次数上比较,可以看出超松弛迭代比雅可比迭代的次数少,表明超松弛迭代法比雅可比迭代法的收敛速度快。

四、插值逼近题目,将10等分,作Lagrange插值,将插值函数的图形与的图形比较,并给出结论。

1、算法步骤已知,①求出各个节点的拉格朗日插值基函数多项式,就称为以为节点的拉格朗日插值基多项式。

②利用基函数的线性组合得到插值多项式。

2、程序代码functionylagrangex0,y0,xnlengthx0;mlengthx;fori1mzxi;s0.0;fork1np1.0;forj1nifjkpp*z-x0j/x0k-x0j;求出,p即为endendsp*y0ks;计算,s即为endyis;endx[-515];y1./1x.2;插值函数x0[-50.15];y0lagrangex,y,x0;y11./1x0.2;绘制图形plotx0,y0,--r插值曲线holdonplotx0,y1,-b原曲线3、运行结果插值曲线为红色,原曲线为蓝色4、结果分析当很大时,在内能很好的逼近,而在这个区间外,误差反而很大。

由图像我们可以看出,在内部,与偏差小;而在端点附近,偏差大。

这就是龙格现象。

五、复化求积题目分别用复化梯形公式、复化辛卜生公式计算,其中.用区间逐步分半递推算法1、复化梯形公式

(1)算法步骤①将区间分成等分,步长为,分点为.其中,我们又题意已知。

②建立与的递推公式。

③给定误差,当时,停止计算,取为所给积分的近似值。

(2)程序代码clca1;b2;m1;h0.5;ep0.5e-7;faexp1;fb2*exp2;x0h*fafb;iter_max100;i0;whileiiter_maxk1;F0;whilek2m-1FFa2*k-1*h*expa2*k-1*h;kk1;endx10.5*x0h*F;ifabsx1-x0epbreak;endmm1;hh/2;x0x1;ii1;endx1i2、复化辛卜生公式

(1)算法步骤①将区间分成等分,为偶数,步长为,分点为.其中,我们又题意已知。

②在每个小区间上用辛卜生公式,即。

③再将各个小区间的积分相加,即。

④给定误差,当时,停止计算,取为所给积分的近似值.

(2)程序代码clca1;b2;n2;hb-a/n;f1exp1;f22*exp2;f6.7225;S1b-a/6*[f14*ff2];i0;ep0.5e-7;whilei100;Pah*expah;Q0;j2;whilejnPPaj1*h*expaj1*h;QQaj*h*expaj*h;jj2;endSh/3*[f14*P2*Qf2];ifabsS1-Sepbreak;endhh/2;n2*n;S1S;ii1;endSi3、运行结果

(1)复化梯形法x17.3891;i13

(2)复化辛卜生法S7.3891;i64、结果分析从结果上我们可以看出,为了达到相同的精度,用复化梯形公式时,需将[1,2]分成;用复化辛卜生公式时,需将[1,2]分成等分。

说明了复化辛卜生公式的计算量比复化梯形公式的计算量要小。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2