数值分析作业_第1页
数值分析作业_第2页
数值分析作业_第3页
数值分析作业_第4页
数值分析作业_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

1、数值分析作业非线性方程的求解方法与分析 学院: 学号: 姓名: 摘 要本文主要阐述了五种非线性方程的求解方法,分别为二分法、简易牛顿法、牛顿迭代法、牛顿下山法与弦截法。并分别对五种求解方法的计算结果进行了相应地分析。二分法运用函数有根区间中点与端点的函数值,缩小根区间,从而得到较快的收敛速度。牛顿迭代法,是一种常见的求解具有单重零点的非线性方程的数值方法,具有局部二阶收敛性。简易牛顿法便是简化的牛顿迭代法,将迭代点的导数值固定为初始值点的导数值,从而简化计算次数。牛顿下山法,为避免初值选取不当而使得迭代不收敛而在牛顿迭代法改进的方法。弦截法,克服了牛顿迭代法需求零点处函数导数的缺点,使用两次迭

2、代点的差商替代了函数的导数值。本文非线性方程的求解方法均运用MATLAB编程及实现。关键词:非线性方程;二分法;牛顿迭代法;牛顿下山法;弦截法数值分析目 录第一章 非线性方程11.1 非线性方程简介11.2 非线性方程求解方法简介11.2.1 二分法11.2.2 牛顿迭代法21.2.3 牛顿下山法41.2.4 简易牛顿法41.2.5 弦截法5第二章 计算机配置72.1 处理器72.2 存储设备72.3 显卡82.4 显示屏82.5 操作系统8第三章 算法的MATLAB实现及结果分析93.1 二分法93.2 牛顿迭代法123.3 简易牛顿法143.4 牛顿下山法173.5 弦截法20结 论24第

3、 24 页数值分析第一章 非线性方程1.1 非线性方程简介非线性方程,就是因变量与自变量之间的关系不是线性关系。在永恒变化发展的自然界与人类社会中,在研究其内部规律的各个科学领域中,更深刻、更精确地描述其内部规律的数学工具之一,就是非线性方程。非线性代数是研究大规模离散数据的运算处理与内在性状的数学科学。科学技术离不开数据处理与数据分析,因此非线性代数具有非常广泛的应用,在力学、化学、生命科学、控制理论等众多科学领域中,非线性方程早已屡见不鲜。因此,非线性方程的求解就显得愈加重要。然而求解非线性方程有很多种方法,每种方法都有自己的优缺点。1.2 非线性方程求解方法简介求函数零解作为数学研究领域

4、的一个热点已经延续了几百余年,所以已经建立了许多种方法,拥有比较完备的求解体系。本文中,主要介绍非线性方程求解方法中最常用也是比较简单的几种方法。在解决实际问题的中,大都会遇到非线性方程或非线性方程组的数学模型,这类方程的求解用一般的代数方法求解是不可能实现的。所以,在解决这类问题的时候,多是将求零解转化为求近似解。1.2.1 二分法若是区间上的连续函数,且,则在内必有一个零点。因为,所以函数在区间上改变符号,因此它在这个区间内至少存在一个零点。二分法就是利用这一中值定理来求解非线性方程零解。二分法求解的具体方法:若,则计算区间中点,并且检验是否为真。若为真,则在内有零点。因而把中点设为作为区

5、间新的右极点。若检验为假,则在区间内有零点,因而把中点设为作为区间新的左极点。这样新的区间的宽度就为原区间宽度的二分之一。并在此区间中重复上述操作。当然,若,则从而求出一个零点。然而由于舍入误差的存在,在计算机计算的过程中,精确为0是完全不可能存在的。因此,主卧室算法循环的停止判断准则不应该是是否成立,而必须提供一个合理的允许误差。当计算结果的值在误差范围内,便可停止运算。1.2.2 牛顿迭代法牛顿法迭代法是一种能在许多不同情况下应用的通用过程。特别地,当用牛顿法来求实值变量函数零点时,常常被称为牛顿-拉弗森迭代。通常,牛顿迭代法比二分法与弦截法获取答案的速度要快,这是因为它的收敛是二次的而不

6、是线性或者超线性的。一旦二次收敛变得有效时,即牛顿法序列的值充分地接近根时,其收敛是如此之快以致于仅仅再需要几个数值即可。但是,牛顿迭代法并无法保证总是收敛的。所以牛顿法经常与其他较慢的方法结合形成一种数值上整体收敛的混合方法。若存在一个函数,其零点由数值方法计算得出。设是的零点,而是的一个近似,若的阶导数存在并且连续,则由泰勒定理将函数在零点处进行展开可得:其中。若较小(即在附近),则可以略去项,并且在余下的方程中求。由此可得到结果是。若使的一个近似,则应该是的一个更好的近似。牛顿迭代法从的一个估计开始,则归纳出迭代的格式为 下面叙述一下牛顿迭代法的几何意义。是的根,选取作为的初始近似值,经

7、过上的点做的切线方程:,求出与横轴焦点的横坐标,则称为的一次近似值。将作为下一次迭代的初值,重复上述过程可得到的二次近似值。如此循环,可以获取的近似值序列。下述三个定理分别讨论了牛顿法的收敛性质:定理1:对于方程,设在上有二阶连续导数且满足下述条件:(1) ;(2) ,对任意的;(3) 选取,满足则牛顿法产生的序列收敛于在内的唯一根。定理2:对于方程,设在上连续可导。若,的根,且,则存在的一个邻域,使任意初值,牛顿迭代收敛于,且满足。定理3:设是方程的根,在的某个开区间内连续且,则存在,当时,由牛顿迭代法产生的近似值序列是以不低于二阶的收敛速度收敛到。1.2.3 牛顿下山法牛顿下山法是牛顿迭代

8、法的一种变形。它是为了减弱牛顿迭代法对初始近似的限制而提出的一种算法。牛顿迭代法的收敛速度快,但初值不容易确定,往往由于初值选取不得当而使迭代不收敛。但是,若能保证(下山条件),则有可能保证收敛。把新求得的近似值看做初始值,会比最先取得的初始值,更有可能落入局部收敛的邻域内。下面简单叙述牛顿下山法的算法。设下山因子为,则是以与的加权平均作为新的近似解的。先取1,若已经满足,实质上是原来的牛顿迭代法。若不满足下山条件,取下山因子,带入并判断是否满足下山条件。若满足,则可以把作为第次近似值。若仍不满足条件,则将的值再进行对分,知道找到满足下山条件的初始值为止。最后,再将得到的带入到牛顿迭代法的公式

9、中,最终求得方程的零解。1.2.4 简易牛顿法简易牛顿法,又称平行弦法,就是将牛顿迭代法进行简化而得到的简易求解非线性方程零解的方法。使用牛顿迭代法求解非线性方程根时,每一步的迭代都需要计算一次上次迭代点的一阶导数值。为了避免在计算导数值的复杂性,选择使用初始值点的导数值代替迭代的导数值,则,于是牛顿迭代公式转化为很大程度上减少了计算机的计算量。1.2.5 弦截法弦截法是在牛顿迭代法的基础上得出的求解非线性方程的一种十分重要的插值方法。用牛顿迭代法求解非线性方程的根时,每一步迭代都要计算一次导数值。当函数较为复杂时,计算导数往往较为困难,并且,在计算机上,计算一次导数的近似值比计算函数的近似值

10、要麻烦的多。因此,为了避免求解函数的导数,选择使用差商近似代替微商:于是,牛顿迭代公式转化为:下面研究弦截法的几何意义:经过点及点亮点做函数的割线,其点斜式方程为:,其零点为。把X用表示即得到迭代格式。它又成为割线法,需要两个初始值,割线与X轴交点的横坐标就是新的近似值。如图所示:下面两个定理为弦割法收敛定理:定理1:设在其零点的邻域内有二阶连续导数,则当时,由弦截法迭代公式产生的序列收敛于,且收敛的阶为1.618。定理2:设函数在区间上二阶连续可导,且满足下述三点:(1);(2)对任意的,;(3),则对于任意初始、,由弦截法产生的迭代序列收敛于的唯一的根。第二章 计算机配置所用的计算机型号为

11、acer(宏碁)Aspire V5-471G 33214G50Mabb。下面对本款笔记本电脑的配置进行简单介绍。2.1 处理器CPU系列:英特尔 酷睿i3 3代系列CPU型号:Intel 酷睿i3 3217UCPU主频:1.8GHz总线规格:DMI 5 GT/s三级缓存:3MB核心类型:Ivy Bridge核心/线程数:双核心/四线程制程工艺:22nm指令集:AVX,64bit功耗:17W2.2 存储设备内存容量:4GB内存类型:DDR3插槽数量:2xSO-DIMM最大内存容量:32GB硬盘容量:500GB硬盘描述:5400转光驱类型:DVD刻录机设计类型:光驱内置光驱描述:支持DVD Sup

12、erMulti双层刻录2.3 显卡显卡类型:入门级独立显卡显卡芯片:NVIDIA GeForce GT 620M显存容量:1GB显存类型:DDR3显存位宽:128bit流处理器数量:96DirectX:112.4 显示屏屏幕尺寸:14英寸屏幕比例:16:9屏幕分辨率:1366x768背光技术:LED背光2.5 操作系统操作系统:Windows 7 旗舰版系统类型:32位操作系统第三章 算法的MATLAB实现及结果分析本章主要阐述了利用数学软件MATLAB编写第一章所叙述的五种求解非线性方程的方法,并求解的零解。3.1 二分法根据第一章对二分法的叙述,可以得到二分法的算法流程图如下所示:二分法的

13、matlab程序代码:function k,c,err,yc=erfen(f,a,b,emg1,emg2) %二分法求解非线性方程%f为所需求解的函数%a和b分别为所求解的区间左右极限值%emg1,emg2为所允许的误差界限%k为求解的循环次数%c为所求解的近似值%err为近似解c的误差估计%yc为函数f在c的函数值if nargin<4 emg1=1e-5; %输入的参数个数少于4个,则误差界限emg1、emg2默认为1e-5 emg2=1e-5;endya=feval(f,a); %函数f在区间端点a取得的右极限值yb=feval(f,b); %函数f在区间端点b取得的左极限值if

14、ya*yb>0 disp('(a,b)区间无法使用二分法进行求解,请更换a、b的值'); return;end %若两极限值符号相同,无法用二分法进行求解if ya=0 c=a; returnendif yb=0 c=b; return;end %函数f在右端点b取得零解k=0; c=(a+b)/2; %取a、b区间中值yc=feval(f,c);while abs(b-a)>emg1&&abs(yc)>emg2 %未达到精度要求则持续循环求近似解 c=(a+b)/2; %取a、b区间中值 yc=feval(f,c); if yc=0 a=c;

15、 b=c; return; %函数在区间中值处取得零解 elseif ya*yc<0 %判断出零解在区间(a,c)间 b=c; yb=yc; else %判断出零解在区间(c,b)间 a=c; ya=yc; end yc=feval(f,c); k=k+1;endc=(a+b)/2;err=abs(b-a);在matlab的command window内执行以下命令:-f=inline('x-4+3*log(x)');-k,c,err,yc=erfen(f,1,3)运行后,得到的计算结果为:k = 18c =1.9684err = 7.6294e-006yc = 2.91

16、49e-006由此得到,经过18次的区间二分,求解到符合误差要求的方程零解,方程的零解为1.9684。调用二分法的函数时,因输入量少于4位,所以,误差界限默认为。3.2 牛顿迭代法根据第一章对牛顿迭代法的叙述,可以得到牛顿迭代法的算法流程图如下所示:牛顿迭代法的matlab代码:function x,k,err,y=Newton(f,df,x0,emg1,emg2)%用途:使用牛顿迭代法解非线性方程f=0%f为所需求解的函数%df为所需求解函数的导函数%x0为迭代运算设置的初值%emg1、emg2表示误差界限%x表示所求方程的近似解%k表示迭代的次数%err表示x的误差估计%y为函数f在x的函

17、数值if nargin<2 emg1=1e-5; emg2=1e-5;end N=100; %N为允许的最大迭代次数x=x0;y=feval(f,x0); %函数在初值x0处取得的函数值x0=x+2*emg1;k=0;while abs(x0-x)>emg1&&k<N&&abs(y)>emg2 x0=x; x=x0-feval(f,x0)/feval(df,x0); k=k+1; y=feval(f,x);endif k=N warning('已达到最大迭代次数'); enderr=abs(x0-x);在matlab的co

18、mmand window内执行以下命令:-f=inline('x-4+3*log(x)');-df=inline(3/x + 1);-x,k,err,y=Newton(f,df,1)运行后,得到的计算结果:x = 1.9684k = 4err = 9.7235e-006y = -3.6604e-011由此得到,经过4次的牛顿法迭代计算,即可得到符合误差界限要求的方程零解,且解为1.9684。3.3 简易牛顿法根据第一章对简易牛顿法的叙述,可以得到简易牛顿法的算法流程图如下所示:简易牛顿法的matlba程序代码:function x,k,err,y=Easynewton(f,df

19、,x0,emg1,emg2)%用途:使用简易的牛顿迭代法解非线性方程的零解%f为所需求解的函数%df为所需求解函数的导函数%x0为迭代运算设置的初值%emg1、emg2表示误差界限%x表示所求方程的近似解%k表示迭代的次数%err表示x的误差估计if nargin<2 emg1=1e-5; emg2=1e-5;end N=100; %N为允许的最大迭代次数x=x0;a=x0;y=feval(f,x0); %函数在初值x0处取得的函数值x0=x+2*emg1;k=0;while abs(x0-x)>emg1&&k<N&&abs(y)>emg

20、2 x0=x; x=x0-feval(f,x0)/feval(df,a); k=k+1; y=feval(f,x);endif k=N warning('已达到最大迭代次数'); enderr=abs(x0-x);在matlab的command window内执行以下命令:-f=inline('x-4+3*log(x)');-df=inline('3/x + 1');-x,k,err,y=Easynewton(f,df,1)运行后,得到计算结果:x = 1.9684k = 12err = 5.8556e-006y = -8.6423e-006由计

21、算结果,可以得到从选定的初始值1开始,使用简易牛顿法迭代12次,能够得到符合误差界限要求的3.4 牛顿下山法根据第一章对牛顿下山法的叙述,可以得到牛顿下山法的算法流程图如下所示:牛顿下山法的matlba程序代码:主函数代码function x1,k,n,err=Mendnewton(x0,emg1,emg2)%用途:使用牛顿下山法求解非线性方程的零解%x0表示输入的初始值%emg1、emg2表示误差界限%x1表示所求方程的近似解%k表示迭代的次数%n表示初始值下山的次数%err表示x1的误差估计if nargin<2 emg1=1e-5; emg2=1e-5;endk=0;n=0;u=1

22、; %u表示下山因子f0,d0=fun0(x0);x1=x0-f0/d0;f1,d1=fun0(x1);while abs(x1-x0)>emg1 && abs(f1)>emg2 while abs(f1)>=abs(f0) %判断是否满足下山条件 u=u/2; n=n+1; x1=x0-u*(f0/d0); f1,d1=fun0(x1); end k=k+1; x0=x1; %将满足下山条件的值定为迭代的初始值 f1,d1=fun0(x0); %进行牛顿迭代法求解非线性方程 x1=x0-f1/d1; end err=abs(x1-x0);函数fun0()代码

23、:function f,df=fun0(x)f=x-4+3*log(x); %f表示需要求解的原函数df=3/x + 1; %df表示需要求解函数的导函数在matlab的command window内执行以下命令:-x1,k,err=Mendnewton(1)运行后,得到计算结果:x1 = 1.9684k = 3n =0err = 9.7235e-006由计算结果,可以得到从选定的初始值1开始,使用牛顿下山法迭代3次,初始值下山次数0次,就能够得到符合误差界限要求的零解。3.5 弦截法根据第一章对弦截法的叙述,可以得到弦截法的算法流程图如下所示:弦截法的matlba程序代码:function

24、x,err,y,k=xianjie(f,a,b,emg1,emg2)%用途:使用弦截法求解非线性方程的零解%f表示需要求解的函数%a、b均为初始的迭代值%emg1、emg2表示允许的误差界限%x为求得的近似解%err为x的误差估计%k为弦截法迭代的次数x1=a;x2=b;k=0;if nargin<4 emg1=1e-5; emg2=1e-5;endwhile k<=100 y1=feval(f,x1); y2=feval(f,x2); x=x2-y2/(y2-y1)*(x2-x1); y=feval(f,x); if abs(x-x2)>emg1&&abs(y)>emg2 x1=x2; x2=x; else break end k=k+1;enderr=abs(x-x2);在matlab的command window内执行以下命令:-f=inline('x-4+3*lo

温馨提示

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

评论

0/150

提交评论