数值计算课程设计_第1页
数值计算课程设计_第2页
数值计算课程设计_第3页
数值计算课程设计_第4页
数值计算课程设计_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数值计算方法课程设计设计题目: 非线性方程(组)的解法 设计时间: 2010-6-11至2010-6-18 姓名学号成绩 指导教师: 题目 非线性方程(组)的数值解法 -求解非线性方程组的几种方法问题的提出分析比较Newton法、Newton法的变形格式。然后分别用Newton 法、简化Newton 法、选取不同的初值求解下面方程组,对于相同的精度要求,比较这两种方法的运行时间。背景分析牛顿法是一种重要迭代法,他是逐步线性化方法的典型代表,牛顿法的特点是每一步都需要计算以及,其计算量比较大,为了减少计算量,提出简化牛顿法。算法思想1、牛顿法设有非线性方程组 其中 由偏导数作成的矩阵记为,称为的

2、雅克比矩阵 设为的解,且设为的近似解。现利用多元函数在点的泰勒公式有其中,在与的所连的线段内。如果用上式中的线性函数近似替代,并将线性方程组 .(1)的解作为的第次近似解记为将(1)式写成矩阵形式,即 为非奇异矩阵,则牛顿迭代公式: (2 )求解非线性方程组牛顿方法为2、简化牛顿法在牛顿法的基础上,为了减少计算量,将均取为,得如下简化牛顿公式: (3 )其中(2)(3)式均为线性收敛的。算法设计将一个非线性方程组写成向量的形式有: F(x) = 0       牛顿迭代法的公式就是: x(k+1)=x(k)-F(x(k)-1F(x(k) 

3、60;     其中F(x(k)为Jacobi矩阵,我写的这段程序就是根据这个公式来的。运用MATLAB中的jacobian求出F的雅克比矩阵,用inv求逆matrix=(varargin)varargin:构造迭代函数在比较牛顿法和简化牛顿法运行时间方面,我们主要是通过比较迭代次数。程序清单牛顿法源程序:function x=newton_solve(F,v,x0,e) if (ischar(F) | ischar(v) %定义类型 error('Parameter F and v should be char type!'); end

4、 if (isnumeric(x0) | isnumeric(e) error('Parameter x0 and e should be numeric type!'); end F=sym(F);v=sym(v);dF=jacobian(F,v);tF=inv(dF)*Ffor index=1:numel(v) tF=subs(tF,v(index),'x(' num2str(index) ')'); %把x分量化,把x1变成x(1),把x2变成x(2)end matrix=(varargin)varargin:.' %构造迭代函数p

5、hi='x-' char(tF); eval('phi=(x)' phi ''); err=inf; %无穷大xold=phi(x0); n=0; while err>e xnew=phi(xold); %用本次结果与上次结果差的范数来衡量误差 err=norm(xnew-xold); xold=xnew; n=n+1; %迭代次数大于10000是退出循环 if (n>10000) break; end n%迭代次数end x=xold;简化牛顿法的源程序:function x=simnewton_solve (F,v,x0,e) i

6、f (ischar(F) | ischar(v) %定义类型 error('Parameter F and v should be char type!'); end if (isnumeric(x0) | isnumeric(e) error('Parameter x0 and e should be numeric type!'); end F=sym(F);v=sym(v);dF=jacobian(F,v);tF=inv(dF)% dF的逆矩阵tF11= -x0(2)/(-x0(2)+4*x0(1);tF12=1/(-x0(2)+4*x0(1);tF21=

7、 2*x0(1)/(-x0(2)+4*x0(1);tF22=-1/2/(-x0(2)+4*x0(1);tF=tF11,tF12;tF21, tF22 % 把dF的逆矩阵用初始值x0代入,得到一常数矩阵,(简化牛顿法的思想)tF=tF*F;for index=1:numel(v) tF=subs(tF,v(index),'x(' num2str(index) ')'); %把x分量化,把x1变成x(1),把x2变成x(2)end matrix=(varargin)varargin:.' %构造迭代函数phi='x-' char(tF); e

8、val('phi=(x)' phi ''); err=inf; %无穷大xold=phi(x0); n=0; while err>e xnew=phi(xold); %用本次结果与上次结果差的范数来衡量误差 err=norm(xnew-xold); xold=xnew; n=n+1; %迭代次数大于10000是退出循环 if (n>10000) break; end n%迭代次数end x=xold;运行结果分析newton_solve('x1+2*x2-3;2*x12+x22-5','x1;x2',1.5;1,0.0

9、001)n = 2ans = 1.4880 0.7560simnewton_solve('x1+2*x2-3;2*x12+x22-5','x1;x2',1.5;1,0.0001) n = 3ans = 1.48800.7560newton_solve('x1+2*x2-3;2*x12+x22-5','x1;x2',100;56,0.0001)n = 10ans = 1.48800.7560simnewton_solve('x1+2*x2-3;2*x12+x22-5','x1;x2',100;56,0

10、.0001)n = 388ans =1.49380.7531上面的结果是牛顿法和简化牛顿法同精度同初值的解法以及不同初值同精度得出来的,我们利用迭代次数来比较它们运行的快慢(即运行的时间),我们本题的初值和精度可以任意取值,从而得出迭代次数以及结果。从结果可以看出,简化牛顿法相比起牛顿法迭代次数要多一些,而且简化牛顿法的值误差较大,因此用牛顿法解非线性方程组要比简化牛顿法要好。问题分析在我们参考了MATLAB相关书籍之后,通过在网上的查阅,基本编写出牛顿法解非线性方程组的程序,在这个程序的基础上我们来改进用以实现简化牛顿法解非线性方程组,我们主要遇到的是要怎么使它可以在程序中赋初值之后直接生成

11、,最后这个没有解决,所以我们选择了赋初值后,直接把求出来,再把的值作为常量带入程序中求解。总结本次的程序设计,我们用MATLAB编写了牛顿法解非线性方程以及简化的牛顿法解非线性方程的程序。牛顿法是通过牛顿迭代法的公式:x(k+1)=x(k)-F(x(k)-1F(x(k) ,带入初值及给定精度的范围,得出方程组的解。简化牛顿法,实在牛顿法的基础上,把雅可比矩阵的逆的初始矩阵算出来,再通过迭代的出的解。我们选取了不同的初值解非线性方程组。并且对于同初值同精度问题,分别用牛顿法和简化的牛顿法解得简化的牛顿法迭代的次数更多。说明简化的牛顿法迭代精度更低而且求的的解误差较大。这与理论是相符合的。牛顿法和

12、简化牛顿法都有优点也有缺点,我们在解决问题的时候,要结合自己的实力和自己所需的选择恰当的方法。我们从不懂到懂得这个过程让我们收获很多,通过不断地学习,查阅资料以及修改程序,一个从无到有的积累,我们不仅仅是在做题,也是在学习处理任何问题的方法。遇到困难不要轻易放弃,要善于利用和整合资源,这都是生活必不可少的。参考文献数值计算方法郑继明 重庆大学出版社 2005数值分析翟瑞彩和谢伟松 天津大学出版社2000matlab 工程数学应用许波和刘征 清华大学出版社 2000心得体会何靖(08120304):为期一周的数值计算方法的课程设计结束了,与其说是一个星期,实质只有四天,中间有三天放假,所以我们在

13、上机设计的时间里抓得很紧。通过两年来的学习,我觉得这样的课程设计是非常有意义的。数值计算方法是一门应用范围很广的课程,是信息与计算科学专业的一门主要专业基础课程,通过这次实验上机才知道原来我们可以运用MATLAB和C语言以及其他的相关汇编语言来编辑程序解决数值计算方法里面的很多问题。在学习了理论知识之后,如何去具体的处理数学中的问题,如何把我们的理论运用到实践中去,这样的课程设计为我们提供了这样一个实践平台。通过这次实验,我收获颇多。首先是对MATLAB软件的认识有了进一步的提升。它简单易学、计算功能强等。MATLAB具有强大的矩阵运算、数据处理的功能,它输出的结果可视化。编程效率高,比C语言

14、简单,让我们比较容易接受,所以我们在解决这道题的时候选择了使用matlab这种高级编程语言。我们也通过这次上机实验对数值计算方法有了更进一步的巩固。其次,通过这次上机实验,我对牛顿法有了更深一层的理解。牛顿法是一种重要迭代法,他是逐步线性化方法的典型代表。为了减少计算量,牛顿法还衍生出许多的变格形式,比如下降牛顿法、阻尼牛顿法、简化牛顿法、修正牛顿法、拟牛顿法等等,这里我们主要是用了牛顿法和简化牛顿法来解非线性方程组,并对这两种方法做了一个比较,通过精度的分析,迭代次数的比较得出牛顿法迭代次数比较少,但计算量大;简化的牛顿法迭代次数多但计算量相对较少。所以是各有所长,都能解决我们的问题。在做本

15、次课程设计的过程中我感触最深的当属查阅了很多书籍,为了让自己的设计更加完善,更加符合标准,一次次翻阅相关书籍书是十分必要的,同时也是必不可少的。通过这次实验让我了解到合作的重要性,在处理问题的时候,当自己冥思苦想也想不出来解决方案的时候,不妨选择请教老师,和同学讨论。可以达到事半功倍的效果。我们的工作是一个团队的工作,团队需要个人,个人也离不开团队,必须发扬团结协作的精神。某个人的离群都可能导致导致整项工作的失败。实习中只有一个人知道原理是远远不够的,必须让每个人都知道,否则一个人的错误,就有可能导致整个工作失败。团结协作是我们实习成功的一项非常重要的保证。而这次实习也正好锻炼了我们的这一点,

16、这对于我们的整个人生来说,都是非常宝贵的。 通过这一个星期数值计算方法上机实验,我对数值计算方法有了进一步的巩固,我们不仅掌握数值计算方法的基本概念,数值求解数学问题的基本方法,更进一步为学习和解决科学与工程中的实际问题打好基础,使我们具备基本的算法分析、设计能力和一定的编程能力。当然,若要是得自己在这一方面更有能力,仅仅一个星期的上机实验是远远不够的,还需要自己课下的多多努力,不过通过这次实验为我们进一步更好的学习引进了一个方向,我相信,这次上机实验之后,我能够更有方向性的、目的性去更深的学习数值计算方法以及其他的数学相关的学科的学习。最后,谢谢老师在这次上机实验中给予的指导和帮助。宋程静(

17、08120306)本学期我们08级信息与计算科学专业开设了数值计算方法课程和该课程的上机实践课。要做好上机实验,首先在理论知识的学习中必须先打好基础。经过预习、听课、复习、作业四个环节的学习,我对于这门课的理论知识有了一定了解。我们组抽到的是用牛顿法以及简化的牛顿法解非线性方程组的问题。要求选取不同的初值求解非线性方程组,对于相同的精度要求,比较它们运行的时间。刚拿到这道题,我们就在数值计算方法教材上找到了牛顿法解非线性方程组的迭代原理以及迭代公式。之后查阅相关的资料找到了简化的牛顿法的迭代公式。通过理论的分析,牛顿法解非线性方程组比简化的牛顿法解非线性方程组更强大。于是我们开始了最具挑战的编

18、程环节。编写程序需要扎实的matlab语言功底和较强的逻辑思维能力及一定的编程技巧。在刚开始编程的时候,我们所编写的程序大都有问题,虽然根据提示只有很少的几处错误,但修正以后也未能调试成功,这说明程序本身就存在很大的逻辑上的问题。后面的几次上机实验我们借鉴了部分别人编写的现成程序,但是这些程序一样有问题,经过无数次的调试与修改。最后我们得到了牛顿法解非线性方程组的程序。经过对迭代公式的分析,我们发现简化的牛顿法迭代过程与牛顿法十分相似,只有部分内容没有参与迭代。只需要将这部分内容用矩阵表示出来,然后不参与迭代就可以了。思想是有了,可是修改程序的时候怎么改怎么错。最后在指导老师的帮助下,经历无数

19、次的失败以后我们写出了简化的牛顿法的迭代程序。选取相同的初值相同的精度,牛顿法比简化的牛顿法迭代次数更少,这与理论是符合的。经过这次上机,我对matlab进一步熟悉起来,发现它很多强大的功能我以前都没有用到。并且对于很多数值计算算法很简单,可是要用程序代码写出来,中间就会出现很多问题。但是解决问题,编写好程序以后的心情是十分开心的。其实运用计算机编程,把大量的运算过程交给计算机去做,正是计算方法学科的意义:把算法简单化,做大量可重复的工作,发挥计算机的强大功能。这就是我们为什么要学计算方法的原因。    经过这一段时间的学习的实践,我们已经开始对本课程有所了解,有

20、了这样实验课程经验对于以后的学习我心更加充足了。在这次上机实验中,老师亲和友善,教学经验丰富,让我受益匪浅,在此向老师表示敬意和感谢!    祝老师工作顺利万事如意!朱卉妍(08120324):本次上机实验,我们通过MATLAB用牛顿法和简化牛顿法来编程解出非线性方程组的解使得我对MATLAB软件有了进一步的认识。它的功能强大,计算精度高而且简单易学。MATLAB具有强大的矩阵运算、数据处理的功能,它输出的结果可视化。编程效率高,比C语言简单,让我们比较容易接受,所以我们在解决这道题的时候选择了使用matlab这种高级编程语言。其次,通过这次上机实验,锻炼我们实践能力并且让我对牛顿法有了更深一层的理解。原来从牛顿法,人们还得出了许多的变形公式(比如下降牛顿法、阻尼牛顿法、简化牛顿法、修正牛顿法、拟牛顿法等等)来不断的使求解非线性方程组的解更简便,运算时间和迭代次数尽量的少。由于所学的知识比较少,通过上网搜索资料和翻阅书本,最终只能找到比较完整牛顿法和简化牛顿法的解法思想,所以经过询问老师,最终只用这两种算法来求解并进行比较。我们用的牛顿迭时通过雅可比矩阵和其逆矩阵,通过迭代收敛成方程组的解,而简化牛顿法先把初始值的雅可比的逆矩阵算出来,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论