计算方法报告程序.docx

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算方法报告程序

1作业内容2 解题思路和算法组织解题思路Gauss消去法在Matlab中利用列主元的Gauss消去法求解线性方程组,寻找主元的步骤可以借助find函数找到主元的索引坐标,行交换步骤在Matlab中可以借助一个中间矩阵变量方便的实现整行交换,同时列向量中的元素也应交换。消去过程结束后,即可回带解得解向量。值得注意的是,Matlab的索引是从(1,1)开始的,因此程序中应注意循环变量的控制。另外一点是,为了验证结果的正确性,需要提前保留系数矩阵。2. LDL’和Cholesky分解对于LDL’和Cholesky分解,教材上已经给出了详细的伪代码,只需要将其转换成相应的Matlab语言即可,需要注意Matlab的索引从(1,1)开始,在所要分解的矩阵生成方面,采用两步循环即可。由于Matlab的函数M文件利于模块编程,因此分别建立了LDL’和Cholesky分解的子函数 LD和Cholesky。事实上,对于题目中的待分解矩阵,LDL’和Cholesky分解的结果是相同的。3. 追赶法三带宽矩阵线性方程组的求解不需要像Gauss消去法那么繁琐,TSS方法只需要三个已知系数向量和一个增广向量即可求解,在Matlab中采用横向追赶法求解。编程时,根据教材的详尽的伪代码编译成Matlab语言即可。4.迭代法求解线性方程组迭代法的Matlab程序也可以根据教材的伪代码得出,此时需要注意D,E,F三个矩阵的得出,Matlab的diag指令可以提取矩阵的对角元素,得到D矩阵,再利用一个循环,消去上三角元素,即可得到E矩阵,计算A-D-E即可得到F矩阵。在迭代过程中,设置一个迭代次数的计数变量,即可比较Jacobi迭代和Jacobi-sediel迭代的速度。由于两种迭代方法均编写成函数形式,初始向量为一个参量,因此可以通过改变初始向量的值,观察初始向量对迭代的影响。5. 牛顿插值和三样条插值的比较首先编辑一个Matlab程序,获得Newton插值的差商表,将多项式所用的系数储存于一个向量中,再编写一个使用Newton插值多项式计算非插值点值的计算程序(使用秦九韶算法);三样条插值也是如此,需要注意的是两点,一是M矩阵边界处的处理,实际上,本题中所逼近的函数已经知道,因此两个边界点的二阶导数值可以直接求出。二是需要编写一个查找程序,求得非插值点的位置,然后求解其值。为了运行一个脚本文件分别计算出n=5,10,20时的情况,可以设定一个循环,循环变量i=1:3,则n就可以表示为5*2^(i-1).6. Simpson公式用于求解积分方程对于本题,Simpson积分公式设计用到九个节点,据此运用复化Simpson公式可以得到一个9*9的线性方程组。此时系数矩阵和已知向量的得出编写一个名为f71的程序得出。再运用Jacobi-sediel迭代方法求解该方程组,得到9个节点处的值,运用三次样条插值就可以得到近似的解函数。最后调用三次样条的计算函数,比较其与真解的误差。7. Romberg方法计算定积分本题拟编写一个函数M文件,计算出积分结果,并统计Romberg方法达到相应精度时的运算步数,因此误差设定为参量。教材上的伪代码用Matlab实现时需要设定一个死循环,循环里面设定跳出循环的条件。8. 二分法和割线法本题中积分函数的获得可以运用Matlab的符号运算功能和Int函数获得,运算subs函数计算其在端点处的值,算法实现上,二分法在教材上的伪代码可以通过Matlab方便的实现,并将其编写成一个函数M文件,其误差参数可调,(这里设定的误差比所要求的误差稍微大一点)并且得到其解所在的上下界,在命令窗中显示。割线法的伪代码实现在Matlab中实现也是比较容易的,只不过此时需要用户设定一个循环次数上界,用于规定循环的最大次数。命令窗中得到了解的上下界,则可以选定这两个界限作为割线法的迭代起始值,并且设定误差值,即可得到所求方程的解。程序清单(双栏)1.Gauss消去法format longt=rand(3,3);b=[1e-8,2,3;-1,3.712,4.623;-2,1.072,5.643];A=b;m=[1,2,3];for k=1:2[u,p]=find(abs(b(k:end,k))==max(abs(b(k:end,k))));%查找主元下标u=u+k-1;if b(u,k)==0 disp(error! It never be 0!)endt(k,:)=b(k,:);b(k,:)=b(u,:);b(u,:)=t(k,:);l=m(k);m(k)=m(u);m(u)=l;%行交换for i=k+1:3 b(i,k)=b(i,k)/b(k,k); for j=k+1:3 b(i,j)=b(i,j)

文档评论(0)

wyjy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档