计算方法非线性方程求根
信息与计算科学系Matlab软件实习(论文)——非线性方程求根

Matlab软件实习论文非线性方程求根系别信息与计算科学专业信息与计算科学学号姓名指导教师2008年8 月10 日非线性方程求根摘要随着科学技术,生产力经济的发展,在科学与工程计算中存在着大量方程求根问题,例如贷款购房问题,工厂的最佳订货问题等都需要求解一类非线性方程的根,而本文就针对这些求根问题提出了解决方案,本文利用牛顿迭代法来结决方程的求根问题.首先根据实际问题列出数学模型,确定变量,给出各个条件及相关函数;然后对建立的模型进行具体分析和研究,选择合适的求解方法;编写函数的程序,用计算机求出方程的解,通过所求解分析具体情况.关键词:非线性方程,牛顿迭代法,Matlab目录摘要 (I)1 绪论 (1)1.1非线性方程求根的背景 (1)1.2非线性方程求根的目的: (1)1.3非线性方程求根的内容: (1)2 牛顿迭代法的实现及应用 (3)2.1N EWTON迭代法具体例子的实现 (3)2.2应用牛顿法解决购房贷款利率问题 (4)2.3应用牛顿迭代法计算最佳订货量 (6)结论 (8)参考文献 (9)1 绪 论1.1 非线性方程求根的背景随着社会的进步,科学技术的快速发展,各种工程等也如雨后春笋一般破土而出,对我们的日常生活产生了巨大的影响如天气预报、石油的勘探、地质灾害的预报等.牛顿迭代法是牛顿在17世纪提出的一种求解方程()0f x =.多数方程不存在求根公式,从而求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要.而在各种科学和工程计算中往往要用到非线性方程组的求解,而牛顿法又是最基础的迭代法,在各种计算力学、控制工程等领域中发挥了不可代替的作用.而在数值计算中,非线性方程组的求解同样具有重要意义.随着计算机技术的成熟和高速发展,对于非线性方程求根问题出现了大量的数学软件(如MATLAB,Matheamatica,Maple,SAS,SPSSD 等),计算机已经成为工程师应用数学解决工程问题的主要运算工具.同时,工程专业的学生对数学教育的需求重点正在从手工演绎和运算能力的培养转变到结合计算机软件进行建模、求解和论证能力的培养[]1.本文采用Matlab 作为软件平台,介绍了非线性方程求根的内容.1.2 非线性方程求根的目的为了推动科学的进步,能够很简便的完成各种工程计算,非线性方程组的求解方法以其独有的方法解决了各种计算,为今天以及将来的应用打下了坚实的基础.非线性方程组的求解正是为了这个目的才广泛被人们应用,此文也将给出非线性方程组求解的实际应用.1.3 非线性方程求根的内容解非线性方程()0f x =的主要算法是迭代法,如fsolve 、二分法、牛顿迭代法等.迭代法是从已知的解的初始近似值0 x (简称初值)开始,利用某种迭代格式( )x g x =求得一近似值序列121,,,,,k k x x x x +逐步逼近于所求的解α(称为不动点).这一方法是否成功取决于三个因素,首先 ( )x g x =应与()0f x =同解,其次初值0 x 的选取是否合适,一般要与真解靠近,最后也是最关键的是迭代序列是否收敛,为了保证收敛性,在真解附近应有'| ()|1g x <否则迭代序列可能发散.最基本的迭代法是Newton 迭代法,其迭代格式为1'()()k k k k f x x x f x +=-. 从几何上说1k x +为用 ()f x 在 k x 出切线代替 ()f x 求得的解,所以也称为切线法,当初值0 x 与真值α足够靠近,Newton 迭代法收敛.对于单根,Newton 法收敛速度很快;对于重根,收敛较慢.牛顿迭代法的大概算法为:给定初始值0x ,ε为根的容许误差,η为()f x 的容许误差,N 为迭代次数的容许值.① 如果'0()0f x =或迭代次数大于N ,则算法失败,结束;否则执行② ② 计算010'0()()f x x x f x =-③ 若10x x ε-<或1()f x η<,则输出1x ,程序结束;否则执行④ ④ 令01x x =,转向①下面给出了Newton 迭代法的计算程序. function x=newton(fname,dfname,x0,e) %用途:Newton 迭代法解非线性方程f(x)=0%格式:x=nanewton( fname,dfname,x0,e) x 返回数值解, %fname 和dfname 分别表示f(x)及其导函数 %f'(x),x0为迭代初值,e 精度要求(默认为1e-4) if nargin<4,e=1e-4; %精度默认为1e-4 endx=x0;x0=x+2*e; %使while 成立,进入while 后x0得到赋值 while abs(x0-x)>e x0=x;x=x0-feval(fname,x0)/feval(dfname,x0); end2 牛顿迭代法的实现及应用2.1 Newton 迭代法具体例子的实现用Newton 迭代法解方程 32() -3-30 f x x x x =+= 在1.5附近的根.解:当2x >时,()0, ()0f x f x >>,即()f x 恒正,所以根在[0,2].我们先用图解法找初值,在用Newton 法程序newton.m 求解.fun= inline('x^3+x^2-3*x-3'); fplot(fun,[0,2]); grid on;图 2.1 ()f x 的函数图像由图可知方程有唯一正根在[1.6,1.8]之间,我们取初值1.5代入Newton 程序中. dfun=inline('3*x^2+2*x-3'); format long;newton(fun,dfun,1.5,1e-4); format short; ans =1.73205080756888而用Matlab 本身的函数fzero 求出来的结果为: format long;fzero(inline('x^3+x^2-3*x-3'),1.5); format short ans =1.73205080756888下面用牛顿迭代法解决一些实际问题 2.2 应用牛顿法解决购房贷款利率问题住房是居民消费的一个主要部分,大部分人选择银行按揭贷款,然后在若干年内逐月分期还款.如果你借了10万,还款额一定超过10万.设贷款总额为0x ,贷款期限为N 个月,采取逐月等额方式偿还本息.若k x 为第k 个月的欠款数,a 为月还款,r 为月利率.我们得到些列迭代关系式1 (1) - ,k k x r x a +=+那么1(1)k k x r x a -=+-22(1)(1)k r x r a a -=+-+-= 210(1)[1(1)(1)]k r x a r r -=+-+++++0(1)[(1)1]/k k r x a r r =+-+-, 由此可以得到月还款计算公式(1)(1)1N Nr x a r +=+-下面是《新民晚报》2000年3月30日第七版上的一则房产广告:不难算出,你向银行总共借了25.2万,30年内共要还51.96万,约为当初借款的两倍.这个案例中的贷款年利率是多少呢?我们根据a =0.1436, 0x =25.2, 360N =,由以上a 的求解公式得到:360360++=.25.2(1)-0.1436[(1)-1]0r r r我们令360360=++,( ) 25.2(1)-0.1436[(1)-1]f r r r r则次问题就转化成非线性方程求根的问题,令( )0,f r=求出r.我们先用Newton函数求解.在Matlab中输入如下程序:常识上,r应比当时活期存款月利率略高一些.我们用当时的活期存款月利率0.0198/2作为迭代初值,为了剔除0r=这个没有意义的根,我们对( )f r稍作变形:clear;fun=inline('25.2*(1+r)^360/0.1436-((1+r)^360-1)/r','r')fun =Inline function:fun(r) = 25.2*(1+r)^360/0.1436-((1+r)^360-1)/rdfun=inline('25.2*360*(1+r)^359/0.1436-(360*(1+r)^359*r-((1+r)^360-1))/(r^2)');r=newton(fun,dfun,0.0198/2,1e-4);R=12*r然后求得结果:R =0.0553于是得出年利率为 5.53%.下面我们用Matlab中的fzero函数检验一下:clear;fun=inline('25.2*(1+r)^360-((1+r)^360-1)/r*0.1436','r')fun =Inline function:fun(r) = 25.2*(1+r)^360-((1+r)^360-1)/r*0.1436r=fzero(fun,0.0198/2);R=12*rR =0.0553结果相同,可见牛顿迭代法的正确性. 2.3 应用牛顿迭代法计算最佳订货量汽车工厂为了保证生产的正常运作,配件供应一定要由保障.这些配件并不是在市场上随时可以买到的,所以往往要预先从配件供应商那里定货.由于配件供应商并不是生产单一产品,为你的定货必须要在流水线上作出调整,所以每次定货需要收取一定量的生产准备费.配件供应商的生产能力很大,开工后很快可以生产许多配件,但是你的汽车工厂并不是立即需要这么多,往往要在仓库里储存一段时间,为此你要付出储存费.如果订货量很小,必然需要频繁定货,造成生产准备费的增加;反之,若订货量很大,定货周期必然延长,生产准备费下降,但这样会造成储存费的增加.如何确定合适的订货量?实践中,这是一个相当复杂的问题,因为市场波动的影响是多方面的.我们先作一些必要的假设将问题简化.1) 汽车工厂对配件的日需量是恒定的,每日为r 件; 2) 所订配件按时一次性交货,生产准备费每次1 k 元; 3) 储存费按当日实际储存量计算,储存费每日每件2k 元; 4) 你的工厂不许缺货.设一次定货x 件,由于工厂不允许缺货,而为了节省存储费,交货日期应定为恰好用完时,所以定货日期/.T x r = (1)由于日需求量是恒定的,可以计算出第t 天的存储量为( )-, 0.q t x rt t T =<< (2)由于第t 天的储存费为2k q( t ),一个周期的总储存费为2201()()TTt t k q t k q t d -≈∑⎰. (3)根据(1),(2),(3)得到一个周期总费用212() 2x C x k k r=+,优化目标是使单位产品费用12()()2k k xC x f x x x r==+, 达到最小.由'()0f x =即122-02k k x r+=, 可直接解得x =这就是著名的经济批量定货公式. 当我们给出具体值时,非线性方程就可以求解了,由于具体的值不定,在此就不给出具体程序了.结论通过以上的论述我们可以知道计算机在现代生活中的应用已经如此普及,尤其是在数学计算当中,Matlab软件更是发挥了不可替代的作用.Matlab以其强大的功能,方便了当今数值计算,数学教程,及工程计算等众多领域.本文在以Matlab软件为平台的基础上,给出了非线性方程的一般解法,非线性方程的求解有二分法,牛顿迭代法,简单牛顿法,牛顿下山法,弦截法,抛物线法等.二分法的优点是算法简单,且总是收敛的,但由于二分法的收敛速度太慢,故一般不单独将其用于求根,只用其为根求得一个较好的近似[]2值.其他的求根方法各有优缺点,这里就不一一赘述.本文主要介绍了牛顿迭代法及其在现实生活中的应用.牛顿迭代法为平方收敛,故其收敛速度较快,但对初值的选取需要谨慎,如果初值选取错误,则可能导致方程迭代发散,最终不能求解出正确解.在计算一些对精度要求特别苛刻时,最好给出较高的精度输入及输出,防止因为精度问题导致误差过大,最终影响结果.牛顿迭代法可以应用于分形理论.分形理论是近二、三十年才发展起来的一门新的学科,其主要描述自然界和非线性系统中不光滑和不规则的几何形体.在地质、材料科学、物理学、计算机科学、艺术设计等方面有着十分广阔的应用前景. 利用牛顿迭代的数学原理和方法,实现牛顿迭代法的分形图形生成算法,将分形理论应用于计算机图形设计中,形.利用VC++6.0开发工具,实现了生成绚丽多彩的分形图[]3非线性方程的求根问题在计算机发展的基础上,被广泛应用于各种工程计算,大大方便了工程师们的计算过程,在现代的工业发展中发挥了重要作用.牛顿迭代法简便易学,为今后的学子们提供了更多的学习内容.参考文献[1] 胡良剑,孙晓君.Matlab数学实验[M]. 高等教育出版社,2006.[2] 李庆扬,王能超,易大义.数值分析(第4版)[M].清华大学出版社.施普林格出版社.2001.[3] 吴运兵,李勇.《西安科技大学学报》2005年03期.。
数值分析第

数值分析第7章答案第七章非线性方程求根一、重点内容提要 (一)问题简介 求单变量函数方程()0f x = (7.1)的根是指求*x (实数或复数),使得(*)0f x =.称*x 为方程(7.1)的根,也称*x 为函数()f x 的零点.若()f x 可以分解为()(*)()mf x x xg x =- 其中m 为正整数,()g x 满足()0g x ≠,则*x 是方程(7.1)的根.当m=1时,称*x 为单根;当m>1时,称*x 为m 重根.若()g x 充分光滑,*x 是方程(7.1)的m 重根,则有(1)()(*)'(*)...(*)0,(*)0m m f x f x f x f x -====≠ 若()f x 在[a,b]上连续且()()0f a f b <,则方程(7.1)在(a,b)内至少有一个实根,称[a,b]为方程(7.1)的有根区间.有根区间可通过函数作图法或逐次搜索法求得. (二)方程求根的几种常用方法 1.二分法设()f x 在[a,b]上连续,()()0f a f b <,则()0f x =在(a,b)内有根*x .再设()0f x =在(a,b)内仅有一个根.令00,a a b b ==,计算0001()2x a b =+和0()f x .若0()0f x =则*x x =,结束计算;若00()()0f a f x >,则令10,1a x b b ==,得新的有根区间11[,]a b ;若00()()0f a f x <,则令10,10a ab x ==,得新的有根区间11[,]a b .0011[,][,]a b a b ⊂,11001()2b a b a -=-.再令1111()2x a b =+计算1()f x ,同上法得出新的有根区间22[,]a b ,如此反复进行,可得一有根区间套1100...[,][,]...[,]n n n n a b a b a b --⊂⊂⊂⊂且110011*,0,1,2,...,()...()22n n n n n n a x b n b a b a b a --<<=-=-==-. 故 1lim()0,lim lim ()*2n n n n n n n n b a x a b x →∞→∞→∞-==+= 因此,1()2n n n x a b =+可作为()0f x =的近似根,且有误差估计11|*|()2n n x x b a +-≤- (7.2)2.迭代法将方程式(7.1)等价变形为 ()x x ϕ= (7.3)若要求*x 满足(*)0f x =则*(*)x x ϕ=;反之亦然.称*x 为函数()x ϕ的一个不动点.求方程(7.1)的根等价于求()x ϕ的不动点由式(7.3)产生的不动点迭代关系式(也称简单迭代法)为1(),0,1,2...k k x x k ϕ+== (7.4)函数()x ϕ称为迭代函数.如果对任意1(),0,1,2...k k x x k ϕ+==,由式(7.4)产生的序列{}k x 有极限 lim *k k x x →∞= 则称不动点迭代法(7.4)收敛.定理7.1(不动点存在性定理)设()[,]x C a b ϕ∈满足以下两个条件: 1.对任意[,]x a b ∈有();a x b ϕ≤≤2.存在正常数1L <,使对任意,[,]x y a b ∈,都有|()()|||x y x y ϕϕ-≤- (7.5) 则()x ϕ在[,]a b 上存在惟一的不动点*x .定理7.2(不动点迭代法的全局收敛性定理)设()[,]x C a b ϕ∈满足定理7.1中的两个条件,则对任意0[,]x a b ∈,由(7.4)式得到的迭代序列{}k x 收敛.到()x ϕ的不动点,并有误差估计式1|*|||1k k k Lx x x x L --≤-- (7.6)和 1|*|||1kk k k L x x x x L --≤-- (7.7)定理7.3(不动点迭代法的局部收敛性定理)设*x 为()x ϕ的不动点,'()x ϕ在*x 的某个邻域连续,且|'()|1x ϕ<,则迭代法(7.4)局部收敛.收敛阶的概念 设迭代过程(7.4)收敛于方程()x x ϕ=的根*x ,如果迭代误差*k k e x x =-当k →∞时成产下列渐近关系式1(0)k k e C C e +→≠常数 (7.8)则称该迭代过程是p 阶收敛的.特别地,p=1时称线性收敛,p>1时称超线性收敛,p=2时称平方收敛.定理7.4(收敛阶定理)对于迭代过程(7.4),如果()()K x ϕ在所求根*x 的邻近连续,并且(1)()'(*)''(*)...(*)0(*)0p p x x x x ϕϕϕϕ-====≠ (7.9)则该迭代过程在点*x 的邻近是收敛的,并有()11lim(*)!p k p k ke x e p ϕ+→∞= (7.10)斯蒂芬森(Steffensen)迭代法 当不动点迭代法(7.4)只有线性收敛阶,甚至于不收敛时,可用斯蒂芬森迭代法进行加速.具体公式为21(),()()20,1,2,...k k k k k k k k k k ky x z y y x x x z y x k ϕϕ+==-=--+= (7.11)此法也可写成如下不动点迭代式12(),0,1,2,...(())()(())2()k k x x k x x x x x x x ψϕψϕϕϕ+==-=--+ (7.12) 定理7.5(斯蒂芬森迭代收敛定理) 设*x 为式(7.12)中()x ψ的不动点,则*x 是()x ϕ的不动点;设''()x ϕ存在,'(*)1x ϕ≠,则*x 是()x ψ的不动点,则斯蒂芬森迭代法(7.11)是2阶收敛的. 3.牛顿迭代法牛顿迭代法是一种特殊的不动点迭代法,其计算公式为其迭代函数为1(),0,1,2,...'()k k k k f x x x k f x +=-= (7.13)()()'()f x x x f x ϕ=-牛顿迭代法的收敛速度 当(*)0,'(*)0,''(*)0f x f x f x =≠≠时,容易证明,'(*)0f x ≠,''(*)''(*)0'(*)f x x f x ϕ=≠,由定理7.4知,牛顿迭代法是平方收敛的,且12''(*)lim2'(*)k k k e f x e f x +→∞=(7.14) 重根情形的牛顿迭代法 当*x 是()0f x =的m 重根(2)m ≥时,迭代函数()()'()f x x x f x ϕ=-在*x 处的导数1'(*)10x m ϕ=-≠,且|'(*)|1x ϕ<.所以牛顿迭代法求重根只是线性收敛.若*x 的重数m 知道,则迭代式1(),0,1,2,...'()k k k k f x x x mk f x +==-= (7.15)求重根二阶收敛.当m 未知时,*x 一定是函数()()'()f x x f x μ=的单重零点,此时迭代式1()()'()'()['()]()''()0,1,2,...k k k k k k k k k k x f x f x x x x x f x f x f x k μμ+=-=--= (7.16)也是二阶收敛的.简化牛顿法 如下迭代法10(),0,1,2,...'()k k k f x x x k f x +=-=称为简化牛顿法或平行弦法.牛顿下山法 为防止迭代不收敛,可采用牛顿下山法.具体方法见教材. 4.弦截法将牛顿迭代法(7.13)中的'()k f x 用()f x 在1k x -,k x处的一阶差商来代替,即可得弦截法111()()()()k k k k k k k f x x x x x f x f x ++-=--- (7.17)定理7.6假设()f x 在其零点*x 的邻域:|*|x x δ∆-≤内具有二阶连续导数,且对任意x ∈∆有'()0f x ≠,又初值01,x x ∈∆,,则当邻域∆充分小时,弦截法(7.17)将按阶1.618p =≈收敛到*x .这里p 是方程210λλ--=的正根.5.抛物线法弦截法可以理解为用过11(,()),(())k k k k x f x x f x ---两点的直线方程的根近似替()0f x =的根.若已知()0f x =的三个近似根k x ,1k x -,2k x -用过1122(,()),(,()),(,())k k k k k k x f x x f x x f x ----的抛物线方程的根近似代替()0f x =的根,所得的迭代法称为抛物线法,也称密勒(Muller)法. 当()f x 在*x 的邻近有三阶连续导数,'(*)0f x ≠,则抛物线法局部收敛,且收敛阶为 1.839 1.84p =≈.二、知识结构图10[1,2]1x x --=≤≤--∈3-3-6k k 32三、常考题型及典型题精解例7-1 证明方程x 在上有一个实根x*,并用二分法求这个根,要求|x -x*|10.若要求|x -x*|10,需二分区间[1,2]多少次?解 设f(x)=x ,则f(1)=-1<0,f(2)=5>0,故方程f(x)=0在[1,2]上有根x*.又因f'(x)=3x -1,所以当x [1,2]时,f'(x)>0,即f (x)=0在[1,2]上有惟一实根x*.用二分法计算结果如表7-1所示.表7-1k ka kb kx ()k f x 的符号0 1 2 31 1 1.25 1.252 1.5 1.51.3751.51.25 1.375 1.3125+ - + -610x e -≤≤⨯≤≤≤≤≥∈-3-39910-6k k k+101此时x =1.3253满足|x -x*|0.9771010,可以作为x*的近2似值.1 若要求|x -x*|,只需|x -x*|10即可,解得k+119.932,2即只需把[1,2]二分20次就能满足精度要求.例7-2 已知函数方程(x-2)=1,(1)确定有根区间[a,b];(2)构造不动点迭代公式使之对任意初始近似x [a,b],31|10.k x ---<k 迭代方法均收敛;(3)用所构造的公式计算根的近似值,要求|x1lim lim x x x x x e e e e →+∞→-∞∞∞∞∈解 (1)令f(x)=(x-2)-1,由于f(2)=-1<0,f(3)=-1>0,因此区间[2,3]是方程f(x)=0的一个有根区间.又因f'(x)=(x-1),f(x)=+,f(x)=-1,f'(1)=--1<0,当x>1时f(x)单增,x<1时f(x)单减,故f(x)=0在(-,+)内有且仅有一根x*,即x*[2,3].2'k k x x x x x x e e e e e e e ϕϕϕ-----∈∈≤≤≤∀∈k+100k+1(2)将(x-2)=1等价变形为x=2+,x [2,3].则(x)=2+.由于当x [2,3]时2(x)3,|(x)|=|-|<1故不动点迭代法x =2+,k=0,1,2,...,对x [2,3]均收敛.(3)取x =2.5,利用x =2+进行迭代计算,结果如表7-2所示.表7-24 2.120094976.73cos 3120cos c k x x x x ϕ≈=--+=∈≤4k+10-30k+1k+1k 此时x 已满足误差要求,即x*例 考虑求解方程2的迭代公式2x =4+,k=0,1,2,...3(1)试证:对任意初始近似x R,该方法收敛;(2)取x =4,求根的近似值x ,要求|x -x |10;(3)所给方法的收敛阶是多少?2解 (1)由迭代公式知,迭代函数(x)=4+3{}os ,(,).|'sin |1(,)x x x ϕϕϕ∈-∞+∞≤<-∞+∞∀∈0k 022由于(x)的值域介于(4-)与(4+)之间,且3322(x)|=|-33故根据定理7.1,7.2知,(x)在内存在惟一的不动点x*,且对x R,迭代公式得到的序列x 收敛于x*.(2) 取x =4,迭代计算结果如表7-3所示.表7-3此时5x 已满足误差要求,即5* 3.347529903x x ≈=(3)由于'(*)0.1363231290x ϕ≈≠,故根据定理7 .4知方法是线性收敛的,并且有1lim'(*)k k k e x e ϕ+→∞=。
力学中的计算方法(方程求根)

ˆK x
Fixed-Point Iteration ( x K 1 x K ) 2 xK x K 2 x K 1 x K 2
y=x
x0 , x1 g( x0 ), x2 g( x1 ), ˆ 0 , x3 g( x2 ), x ˆ 1 , x4 g( x3 ), x ... ...
0 f ( x*) f ( x0 ) f ( x0 )( x * x0 ) y
x* x0
f ( xk ) x k 1 x k f ( x 线性 /* linear */ k)
f ( x0 ) f ( x0 )
x*
x
x0
只要 f C1,每一步迭代都有 xk x * , f ’( xk ) 0, 而且 lim k 则 x*就是 f 的根。
1 | x k 1 x k | | x * xk | 1 L
L | x1 x0 | | x * xk | 1 L
k
( k = 1, 2, … )
且存在极限
lim
k
x * x k 1 g x * x * xk
Fixed-Point Iteration
1 | x k 1 x k | ? ④ | x * xk | 1 L | x k 1 x k | | x * x k | | x * x k 1 | | x * x k | L | x * x k | | x k 1 x k | 来 Lk 可用 | x1 x0 | ? ⑤ | x * xk | 1 L 控制收敛精度
Bisection Method
When to stop?
数值分析-计算方法-方程求根a-文档资料

6.3 Fixed-Point Iteration
例 用收敛定理考察例题6.1两种解法的收敛性。 解 考察等价方程:
3 x g ( x ) x 1 1
当x∈[1.4, 1.6]时g1(x)∈[1.4, 1.6], 并且有 1 g ( x ) 1 1 2 33 (x 1 ) 所以迭代方程 xk+1= g1(xk) 收敛。 考察等价方程:
k k 1 0
( k = 1, 2, … )
且存在极限
1 L x * x k 1 x lim g * k x * x k
6.3 Fixed-Point Iteration
证明:① g(x) 在[a, b]上存在不动点?
令 f a g ( x ) b ( x ) g ( x ) x
( b ) g ( b ) b 0 f ( a ) g ( a ) a 0 ,f
f (x) 有根
② 不动点唯一?
~ ~ g ( x ) 反证:若不然,设还有 x ,则 ~ ~ ~ ~ 在 x* 和x 之间。 g ( x *) g ( x ) g ( ξ ) ( x * x ), x* x
对于给定的精度 ,可估计二分法所需的步数 k :
b a b a k k |x x*| k k 2 2
b a ln b a ln ε ε k k 2 ln 2
①简单; ② 对f (x) 要求不高(只要连续即可) . ①无法求复根及偶重根 ② 收敛慢 请同学们自行设计计算程序。
xk
k xk
1
6 1.32470
1.25992
7 1.32471
第1章 非线性方程迭代解法

ba xk x k 1 2 1 1 k 0.05 2 10 k 1 2 20 k log 2 10 3.3219
K 4
二分法的特点
优点: 总可以保证收敛,不会增根。 缺点: 只能对单个根的情况求解,无法求多根。 收敛速度较慢,计算量较大。 因此,先画图,找到根大致范围;再划分为 较小隔根区间;最后采用二分法,精确求根, 是求解简单非线性问题的有效途径。
改进:二分法
3) 二分法
思想:逐步缩小隔根区间,而逼近精确根。 方法:
ab ), 计算中点 f ( 2
若有隔根区间[a,b],则f(a)*f(b)<=0,
ab ab f ( ) f ( a ) 0 ]为新隔根区间 若 ,则 [a, 2 2 ab [ , b] 为新的隔根区间。 反之, 2
非线性问题的处理思路
非线性问题的处理思路: 作图——根存在的范围 隔根区间——单个根存在范围 二分法——精确求根 为加快求根速度: 迭代法取代二分法,其它部分不变
2. 迭代法原理
主要内容: 1) 基本原理 2) 迭代有效性的判断 3) 迭代的加速技巧
1) 迭代法基本原理
0.5
0
2
4
6
8
10
12
14
16
18
迭代次数 n
迭代的绝对误差限
0.07 0.06
误差限
0.05
0.04
0.03
0.02
0.01
0
0
2
4
6
8
10
12
14
16
18
迭代次数 n
迭代公式φ一阶导数
数值分析实验报告——非线性方程求根

数值分析实验报告——非线性方程求根二分法一、题目用二分法求方程=的所有根x.13要求每个根的误差小于-x+0.001..21二、方法二分法三、程序1、Jiangerfen.M的程序function[c,yc]=jiangerfen(f,a,b,tol1,tol2)if nargin<4 tol1=1e-3;tol2=1e-3;end%nargin<4表示若赋的值个数小于4,则tol1和tol2取默认值。
ya=feval('f',a);%令x=a代入到方程f中,ya即f(a)。
yb=feval('f',b);if ya*yb>0,disp('(a,b)不是有根区间');return,endmax=1+round((log(b -a)-log(tol2))/log(2));%round函数是将数据取整,使数据等于其最接近的整数。
for k=1:maxc=(a+b)/2;yc=feval('f',c);if((b-a)/2<tol2)|(abs(yc)<tol1),break,endif yb*yc<0a=c;ya=yc;elseb=c;yb=yc;endendk,c=(a+b)/2,yc=feval('f',c)2、f.M的程序function y=f(x);y=x^3-2*x-1;四、结果>> format compact>> fplot('[x^3-2*x-1,0]',[-1.5,2]);>> jiangerfen('f',-1.5,-0.8);k =8c =-0.9996yc =3.9017e-004>> jiangerfen('f',-0.8,-0.3);k =8c =-0.6184yc =2.7772e-004>> jiangerfen('f',1.3,2);k =10c =1.6179yc =-9.5348e-004>> jiangerfen('f',2,3);(a,b)不是有根区间方程f(x)=x^3-2*x-1的所有根为-0.9996,-0.6184 ,1.6179 。
求根公式法
求根公式法
求根公式法是一种解决非线性方程组的数学方法,它利用函数f(x)和它的导数f'(x)来构造一个特殊的多项式P(x),使得P(x)=0时,x就是原方程所要求的根。
它是一种重要的数学工具,在数学建模中有广泛的应用。
求根公式法的基本思想是将原方程f(x)=0转化为一个比较容易求解的表达式:P(x)=0,这里P(x)是一个多项式,它的定义如下:
P(x) = f(x) + xf′(x)
即,把原方程的右端的常数项加上x乘以方程的导数,然后遍历x的每一个值,求出P(x),当P(x)=0时,x 即为原方程的根。
因此,求根公式法就是一种迭代法,我们只需要采用不同的初值,然后不断更新,最终求出一组方程的根。
当然,还需要考虑一些问题,比如收敛性,算法的精度等。
求根公式法的优势在于它的简单性,而它的缺点也非常明显:求根公式法虽然简单,但它的收敛性和精度都不能保证。
它的收敛性取决于初值的选择,如果初值不合适,那么迭代的结果可能会收敛到一个偏差很大的值,甚至不收敛。
而精度则取决于迭代次数,如果迭代次数太少,那么精度也会受到影响。
求根公式法是一种解决非线性方程组的有效方法,尤其是对于不容易直接求解的方程,它能够有效地求解出精确的结果。
此外,它也适用于解决更复杂的方程,比如常微分方程、积分方程等。
总之,求根公式法是一种简单易用的数学工具,它的应用范围很广,可以用来解决复杂的非线性方程组,是数学建模中的重要工具。
第六章 非线性方程(组)的求解
* * 又当 n 充 分 大[ 以 a ,b 后 ] , (x ,x ), 于是 m 为偶数 n n 时, x [ a ,b ],f (x ) 0 ,不 变 号 了 ! n n
2)二分法线性收敛,收敛因子为1/2。
* x x n 1 1 * 1 * x x ( x a ) ( x x ), . n n 1 n 1 n 1 * 2 2 x x2 n 1
f (x) m(x x*)m1h(x) h(x) g(x) 1 (x x*)g(x),h(x*) 0, m f (x) (x) x x 1 (x-x* )g(x) / h(x), f (x) m (x*) 1 1 , (x*) 1 1 1 , m m 牛顿迭代线性收敛,且 随 m的增加收敛性越来越差 。 重根时的改进:
或
定理一的条件太强,不便于实际应用。下面给出一个局部 收敛定理。
由迭代( 6 -1 -1 ) 产产生的 x 均收 数 敛收敛 n * 1 x x x x n n n 1 1 L n L * 或 x x x x n 1 L1 0
* * * 定理二 :如果 (x ) 连续 (x , ) L 1, 则 x N (x , 0 δ )
关于初值的问题: 一般来说采用试探法,但对于一些实际问题初值的选择并 不困难,它是明确的。
关于重根的问题:
* 设 x 是 f( x ) 的 m 重零 m 点 1) , 此 (时 * m * f( x ) ( x x ) g ( x ), g ( x ) 0 , 1 * m 1 * f ( x ) m ( x x ) [ g ( x ) ( x x ) g ( x )], m
称算法(6-1-1)为牛顿迭代法。 f (x) 证明:令 (x) x ,则 xN (x*), f (x) 0 x (x) f (x) (x) f *) 0 (x) 1 f ( x ), ( x ,牛顿迭代收敛 2 [ f (x)] () * * 又 xn1 x (xn) (x ) (xn x*)2; 2 xn1 x* () c,至少二阶收敛。 2 2 (x x*)
第二章 非线性方程求解
(k 0),则称序列{xn}是p阶收敛的. 特别是当p=1时
称线性收敛; p>1时称超线性收敛;p=2时称平方收敛. 如果由迭代函
数g(x)产生的序列{xn}是p阶收敛的, 则称g(x)是p阶迭代函数, 并称 迭代法xn+1=g(xn)是p阶收敛. 定理3 对于迭代过程xn+1=g(xn), 如果迭代函数g(x)在所求根x*的 邻近有连续的二阶导数,且|g’(x*)|<1, 则有
对 x [0.5,0.6]时有 |( x) | e x e0.5 0.607 1, 故当取初值x0=0.5时,
迭代过程xk1 exk (k 0,1,2,...) 必收敛. 迭代结果如下:
k xk
xk-xk-1
k xk
xk-xk-1
1 0.60653 0.10653
(1) 当 g(x*) 0时,迭代过程为线性收敛
(2) 当 g(x*) 0 , g(x*) 0 时,迭代过程为平方收敛.
定理4 设x*是方程x=g(x)的根,在x*的某一邻域g(x)的m (m>1)阶
导数连续,并且g’(x*)=…=g(m-1)(x*)=0, g(m)(x*)不等于零, 则当初始
为: [a,b]=[a0,b0] [a1,b1] [a2,b2] …… [ai-1,bi-1] [ai,bi] 其中ai或bi (i=1,2,3,……)是区间[ai-1,bi-1]的中点. 若区间[ai-1,bi-1]的中点xi满足f(xi)f(bi-1)=0,则x* = xi. 若区间[ai-1,bi-1]的中点xi满足f(xi)f(bi-1)<0,则ai= xi, bi= bi-1. 若区间[ai-1,bi-1]的中点xi满足f(ai-1)f(xi)<0,则ai= ai-1, bi= xi.
非线性方程的五种解法
1、问题描述用五种不同的方法解方程x-s-ulog10(x)=0,令s=1,u=2;则原方程变为x-1-2*log10(x)=0。
2、计算机性能配置描述I5 处理器、主频2.4GHz 、内存2GB、双核3、处理方法与结果分析Ⅰ、牛顿法算法描述:⒈迭代公式:x n+1=x n-f(x n)/f′(x n)反复做一下操作:⒉计算x1处的函数值为f1,导数值为f2⒊若f2=0,则显示导数为零的信息,break⒋x2=x1-f1/f2,k=k+1,err=│x2-x1│⒌若err<eps,则输入近似根x2与迭代次数k,break⒍若k=n,则显示迭代次数超限的信息,break设置精度eps=10^(-8)、设置最大迭代次数n=100。
当初始值x1=100时,方程的根root=1.00000000、花费时间timecost=8.4840s结果分析:牛顿迭代法的收敛特性依赖于初始值x1的选择。
另外,牛顿法需要求导,这无疑限制牛顿法的使用范围。
结果精度相对较高。
Ⅱ、弦截法算法描述:⒈迭代公式:x n+1=x n-f(x n)*( x n-x1)/(f(x n)-f(x1))⒉计算x1处的函数值为3.5,x2处的函数值为2反复做一下操作:⒊x k+1=x k-f(x k)*( x k-x1)/(f(x k)-f(x1)),k=k+1⒋若│x2-x1│<eps,则输出近似根x k+1,break⒌若k=n,则显示迭代次数超限的信息,break设置精度eps=10^(-8)、设置最大迭代次数n=100。
当初始值x(1) =3.5,x(2)=2时,方程的根root=1.000000026、花费时间timecost=118.0630s结果分析:不需要计算导数,但是收敛速度比较慢。
所求根的精度不是很高。
Ⅲ、快速弦截法算法描述:⒈迭代公式:x n+1=x n-f(x n)*( x n-x n-1)/(f(x n)-f(x n-1))⒉计算x1处的函数值为3.5,x2处的函数值为2反复做一下操作:⒊x3=x3-f( x2-x1)/(f(2)-f(1)),k=k+1⒋若│x3-x2│<eps,则输出近似根x3,break⒌若k=n,则显示迭代次数超限的信息,break算法描述:⒈迭代公式:x n+1=x n-f(x n)/f′(x n)⒉计算x1处的函数值为f1,导数值为f2⒊若f2=0,则显示导数为零的信息,break⒋x2=x1-f1/f2,k=k+1,err=│x2-x1│⒌若err<eps,则输入近似根x2与迭代次数k,break⒍若k=n,则显示迭代次数超限的信息,break设置精度eps=10^(-8)、设置最大迭代次数n=100。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 计算方法第7章 非线性方程求根 本章主要内容:
1.区间二分法. 2切线法. 3.弦位法. 4.一般迭代法. 重点、难点 一、区间二分法 区间二分法是求方程f(x)=0根的近似值的常用方法。 基本思想:利用有根区间的判别方法确定方程根的区间[a,b] ,将有根区间平分为二;再利用有根区间的判别方法判断那一个区间是有根区间;重复上述步骤,直到小区间端点差的绝对值小于等于精度要求的数值,则用将上一区间的分半值作为方程的根的近似值。
区间二分法的计算步骤如下: 1. 计算区间端点的函数值f(a) , f(b)(不妨设f(a)<0,f(b)>0); 确定初始有根区间[a,b]. 2.二分有根区间[a,b],并计算)2(baf 取21bax 3.判断: 若0)(1xf,则方程的根为1xx; 若 0)(1xf,则有根区间为1,xax ;令],[,111baxa 若 0)(1xf ,则有根区间为bxx,1;令 ],[,111babx 4. 如果│b-a│继续二分有根区间[a1,b1],并计算中点值,继续有根区间的判断,直到满足精度要求为止,即│bn-an│二分次数的确定:如果给定误差限ε,则需要二分的次数可由公式 2
12lnln)ln(abn确定应二分的次数。
例1 用区间二分法求方程0353xx在某区间内实根的近似值(精确到0.001) 【思路】参见上述区间二分法的计算步骤 解 ∵f(1.8)=-0.168<0, f(1.9)=0.359>0 ∴f(x)在区间[1.8 ,1.9]内有一个根。 由公式 644.512ln001.0ln1.0ln12lnln)ln(abn 取n=6, 计算结果列表如下:
则方程在区间[1.8,1.9]内所求近似值为x*≈ x = 1.8328125 区间二分法的优点是计算程序简单,只要f(x)在区间[a,b]上连续,区间二分法就可使用,但区间二分法不能用来求偶次重根,由于区间二分法收敛比较慢,在实际计算中,区间二分法常用来求比较好的含根区间和初始近似值,以便进一步使用收敛更快的迭代法求出更精确的近似值。
迭代序列收敛阶的概念 设迭代序列nx收敛于*x,如果存在实数1p与正常数c,使得
n an bn xn f(xn) 1 1.8 1.9 1.85 + 2 1.8 1.85 1.825 - 3 1.825 1.85 1.8375 + 4 1.825 1.8375 1.83125 - 5 1.83125 1.8375 1.834375 + 6 1.83125 1.834375 1.8328125 3
cxxxxpnnn1lim,则称序列nx是p阶收敛于*x。
特别地,当1p时,称序列nx为线性(一次)收敛; nx为线性收敛时,必须要求1c。 当2p时,称序列nx为平方(二次)收敛; 当21p时,称序列nx为超线性收敛; 收敛阶p越大,则序列nx与*x的误差缩减越快,也就是序列nx收敛越快。
二、切线法(牛顿法) 1. 切线法的基本思想:假设方程f(x)=0在区间[a,b]上有唯一根x*,过曲线y= f(x)上的一点(x0,f(x0)),作曲线的切线,用此切线与x轴的交点的横坐标x1作为方程的根x*的新的近似值, 再过点(x1,f(x1)),作曲线的切线,则又得到新的近似值,按此方法进行迭代计算,直到满足精度要求为止。
切线法(牛顿法)的迭代公式为 ,...)1,0()()(1nxfxfxxnnnn 2.切线法的收敛性 我们利用定理(7.1)来判断切线法的收敛性。定理(7.1)还给出了一个初始值x0的选择方法, 定理7.1. 设f(x)在[a,b]上存在二阶连续导数,且满足条件 ⑴ f(a)f(b)< 0; ⑵f /(x) 在[a,b]上不等于零 (3)f //(x) 在[a,b]上不变号 则对任意初值x0∈[a,b] ,只要满足f(x0) f //(x)≥0. 则由切线法迭代公式得到的近似根序列nx平方收敛于方程f(x)=0在区间[a,b]的唯一根x*。
2. 切线法的计算步骤:先判断有根区间[a,b],然后选择初始值x0(一般地,若f//(x)>0,则选择区间的右端点;若f//(x)< 0,则选择区间的左端点),再建立迭代公式进行计算(列表计算)。 4
例2 用切线法求例1中方程在[1,2]内根的近似值,精确到0.000001 【思路】根据f(x0)f//(x)>0在有根区间上选择初始值x0,代入迭代公式进行计算
解 5332)()(2012)2(,01)2(6)(53)(35)(23111023nnnnnnxxxfxfxxxffxxfxxfxxxf代入迭代公式取初始值
计算得 n 0 1 2 3 4 xn 1 1.857142857 1.83478735 1.834243504 1.834243185
834243185.1000001.0000000319.034xxx
例3 证明 计算3a的切线法迭代公式为 )2(3121nnnxaxx (n=0,1,…)
解 因为计算3a等同于求方程03ax的根, 将233)(,)(xxfaxxf,代入切线法迭代公式得:
,1,0,)(3132231nxaxxaxxxnnnnnn 三 、弦位法 1. 弦位法的基本思想:假设方程f(x)=0在区间[a,b]上有唯一根x*,在区间[a,b]内的曲线y= f(x)上任取两点作弦,用此弦与x轴的交点横坐标作为方程根的近似值。按此方法进行迭代计算,直到满足精度要求为止。 弦位法分为单点弦法和双点弦法。 2.单点弦法 建立弦的迭代公式时,固定其中一个点,而另一个点变动的迭代求根 5
方法。 单点弦法的迭代公式,...)1,0()()()(1nxfxfcfxcxxnnnnn (1)单点弦法的收敛性 利用定理7.2判断其收敛性。单点弦法收敛所满足条件和切线法的收敛条件相同,不同的是单点弦法迭代公式所产生的序列是线性收敛于f(x)=0在区间[a,b]上有唯一根x* 。我们计算时应注意,在选择固定点c时,也要求满足条件0)()f(x0.(x)ff(c)0xf 。 (2)单点弦法的计算步骤同切线法类似。 3.双点弦法 建立弦的迭代公式时,两个点都变动的迭代求根方法。
双点弦法的迭代公式为: ,...)1,0()()()(111nxfxfxfxxxxnnnnnnn (1)双点弦法收敛性 利用定理(7.3)判断。f(x)在[a,b]上满足的条件为: ⑴ f(a)f(b)< 0; ⑵f/(x)≠0 ⑶KR≤ρ<1,其中K=M2/2m1, M2 = max│f//(x)│, m1 = min│f/(x)│, R=max{│x0-x*│,│x1-x*│}. 则以a,b为初始值, 由双点弦法迭代公式得到的序列超线性收敛于方程f(x)=0在区间[a,b]的唯一根x*。 (2)双点弦法的计算步骤同切线法类似。但在计算时应注意收敛性的判断和初始值的选 择。 例4 试导出计算)0(aa的单点弦法迭代公式,并用它计算3,准确到610。
解 因为计算)0(aa等同于求方程 02ax 的正根, 令 xxfaxxf2)(,)(2,代入单点弦法迭代公式,得: 6
,1,0,)()()()(2221nxcacxaxxcxcxxfxfcfxcxxnnnnnnnnnnn 例5 分别用单点弦法和双点弦法求方程0133xx 在[1,2]内根的近似值, 精确到10-3 【思路】参见单点弦法和双点弦法的计算步骤 解 方法一. 单点弦法
得方程根的近似值代入迭代式取初始值内且在区间内有根在区间)()()(,106)(,033)(]2,1[]2,1[01)2(,03)1(13)(1023nnnnnxfxfcfxcxxxxxfxxfxfffxxxf
007432423.0,878406099.1087483863.0)087483863.0(1867768595.12867768595.1087483863.0,867768595.1890625.0)890625.0(175.1275.1890625.0,75.13)3(1121332211xf
x
xfxxfx
879378365.1,10000075196.0,000052236.0)(879378365.1000623407.0)000623407.0(1879303169.12879303169.1000623407.0)(879303169.1007432423.0)001130637.0(1878406099.12878406099.13455544xxxxfxxfx方程的近似根为
方法二. 双点弦法