Matlab非线性方程求根

上传人:野鹰 文档编号:46155461 上传时间:2018-06-23 格式:PPT 页数:66 大小:1.46MB
返回 下载 相关 举报
Matlab非线性方程求根_第1页
第1页 / 共66页
Matlab非线性方程求根_第2页
第2页 / 共66页
Matlab非线性方程求根_第3页
第3页 / 共66页
Matlab非线性方程求根_第4页
第4页 / 共66页
Matlab非线性方程求根_第5页
第5页 / 共66页
点击查看更多>>
资源描述

《Matlab非线性方程求根》由会员分享,可在线阅读,更多相关《Matlab非线性方程求根(66页珍藏版)》请在金锄头文库上搜索。

1、科学计算与MATLAB中南大学材料科学与工程学院中南大学材料科学与工程学院 2010.102010.10第八讲 非线性方程求根内容提要n引言n二分法n迭代法nNewton迭代法nMATLAB的非线性方程求根函数n小结在工程和科学技术中许多问题常常归结为求解非线性方程式问 题,例如在控制系统的设计领域,研究人口增长率等。例 关于真实气体的状态方程(Van der waals方程)为其中,P是气体压力,V是气体体积,T是绝对温度,R是气体常数 。如果已知某气体的温度T及压力P,那么求体积V的方程为:1、引言非线性方程的一般形式: f(x)=0 代数方程: f(x)=a0+a1x+anxn (an0

2、) 超越方程 :f(x)中含三角函数、指数函数、或其他超 越函数。 用数值方法求解非线性方程的步骤: (1)找出有根区间;(只含一个实根的区间称隔根 区间) (2)近似根的精确化。从隔根区间内的一个或多个 点出发,逐次逼近,寻求满足精度的根的近似值。2、方程求根的二分法2.1 二分法的基本思想: 假定f(x)=0在a,b内有唯一单实根x*,考察有根区间 a,b,取中点x0=(a+b)/2,若f(x0)=0,则x*= x0 ,否则, (1)若f(x0)f(a)0,则x*在x0右侧,令a1=x0, b1=b; (2)若f(x0)f(a)0)disp(两端点函数值乘积大于0!);return; el

3、seroot=FindRoots(f,a,b,eps); endfunction r=FindRoots(f,a,b,eps) f_1=subs(sym(f),findsym(sym(f),a); f_2=subs(sym(f),findsym(sym(f),b); mf=subs(sym(f),findsym(sym(f),(a+b)/2); if(f_1*mf0)t=(a+b)/2;r=FindRoots(f,t,b,eps); elseif(f_1*mf=0)r=(a+b)/2;elseif(abs(b-a)eps)n=n+1;r1=root;root=subs(sym(f),finds

4、ym(sym(f),r1)+r1;tol=abs(root-r1);end实例例:求方程 x3-x-1=0 在 x=1.5 附近的一个根。 r,n=StablePoint(x3-x-1,1.5)r = NaNn = 9实例例:求方程 1/sqrt(x)+x-2=0 在 x=1.5 附近的一个根。 r,n=StablePoint(1/sqrt(x)+x-2,1.5)r = Infn = 1028 r,n=StablePoint(1/sqrt(x)+x-2,0.5)r = 0.3820n = 4假定(x )改变不大,近似取某个近似值L,则有3.3 迭代收敛的加速方法1、Aitken加速收敛方法:由

5、微分中值定理,有同理两式相比,得类推可得故上式即为Aitken加速收敛方法的迭代格式。2、Steffensen迭代法: 将Aitken加速技巧与不动点结合可得或将其写为3.4 MATLAB实现 例:用不动点迭代法、 Aitken加速收敛方法和Steffensen迭代 法分别求方程,并比较这三种方法。 r,n=StablePoint(1/sqrt(x)+x-2,0.5) r = 0.3820 n = 4r,n=AtkenStablePoint(1/sqrt(x)+x-2,0.5) r = 0.3820 n = 4 r,n=AtkenStablePoint(1/sqrt(x)+x-2,0.999)

6、 r = 1.0000 n = 4 r,n=StablePoint(1/sqrt(x)+x-2,0.999) r = 0.3820 n = 21 r,n=StevenStablePoint(1/sqrt(x)+x-2,0.999) r = 1.0000 n = 2 r,n=StevenStablePoint(1/sqrt(x)+x-2,0.5) r = 0.3820 n = 4表明即使不动点迭代法 不收敛,用steffensen 迭代法仍可能收敛。说明steffensen迭代法 的收敛速度比不动点迭 代快得多。谢谢!谢谢!4、Newton迭代法4.1 基本思想:将非线性方程逐步归结为某种 线性

7、方程求解。设方程f(x)=0有近似根xk(f (xk)0),将f(x)在xk 展开:(在x和xk之间)可设记该线性方程的根为xk+1,则故f(x)=0可近似表示为即为Newton法迭代格式。(k=0,1,)4.2 Newton迭代法(切线法)xyx*xk+1xkPky=f(x)切线方程故切线法的缺陷1.被零除错误2.程序死循环y = arctan x方程: f(x)=x3 3x + 2 = 0在重根x*=1附近,f(x)近似 为零。对 f(x) = arctan x存在 x0,Newton迭代 法陷入死循环。计算输入计算计算 输出输出stop是是否否程序设计function root=Newt

8、onRoot(f,a,b,eps) if(nargin=3)eps=1.0e-4; end f1=subs(sym(f),findsym(sym(f),a); f2=subs(sym(f),findsym(sym(f),b); if(f1=0)root=a; end if(f2=0)root=b; end if(f1*f20)disp(两端点函数值乘积大于0!);return; elsetol=1;fun=diff(sym(f); fa=subs(sym(f),findsym(sym(f),a);fb=subs(sym(f),findsym(sym(f),b); dfa=subs(sym(fu

9、n),findsym(sym(fun),a);dfb=subs(sym(fun),findsym(sym(fun),b);if(dfadfb)root=a-fa/dfa;elseroot=b-fb/dfb;endwhile(toleps)r1=root;fx=subs(sym(f),findsym(sym(f),r1);dfx=subs(sym(fun),findsym(sym(fun),r 1);root=r1-fx/dfx;tol=abs(root-r1);end end例:采用切线法求方程在区间0.5,2上的一个根 。 r=NewtonRoot(sqrt(x)-x3+2,0.5,2)r

10、=1.4759若| (x)|=|1-cf (x)|0)disp(两端点函数值乘积大于0!);return;elsetol=1;fun=diff(sym(f);fa=subs(sym(f),findsym(sym(f),a);fb=subs(sym(f),findsym(sym(f),b); dfa=subs(sym(fun),findsym(sym(fun),a);dfb=subs(sym(fun),findsym(sym(fun),b);if(dfadfb)df0=1/dfa;root=a-df0*fa;elsedf0=1/dfb;root=b-df0*fb;endwhile(toleps)

11、r1=root; fx=subs(sym(f),findsym(sym(f),r1); root=r1-df0*fx;tol=abs(root-r1);end end例:采用平行弦法求方程在区间1.2,2上的一个根 。 r=SimpleNewton(sqrt(x)-x3+2,1.2,2)r =1.4759在Newton迭代格式中,用差商近似导数,4.4 弦截法(割线法)称弦截法。得弦截法的几何意义:xyx* xk+1xk-1Pk-1y=f(x)xkPk弦线PkPk-1的方程:当y0时,程序设计function root=Secant(f,a,b,eps) if(nargin=3)eps=1.0

12、e-4; end f1=subs(sym(f),findsym(sym(f),a); f2=subs(sym(f),findsym(sym(f),b); if(f1=0)root=a; end if(f2=0)root=b; end if(f1*f20)disp(两端点函数值乘积大于0!);return; elsetol=1; fa=subs(sym(f),findsym(sym(f),a);fb=subs(sym(f),findsym(sym(f),b); root=a-(b-a)*fa/(fb-fa);while(toleps)r1=root;fx=subs(sym(f),findsym(

13、sym(f),r1);s=fx*fa;if(s=0)root=r1;elseif(s0)root=b-(r1-b)*fb/(fx-fb);elseroot=a-(r1-a)*fa/(fx-fa);endendtol=abs(root-r1);end end例:采用弦截法求方程在区间1,4上的一个根 。 r=Secant(log(x)+sqrt(x)-2,1,4)r =1.8773例 用简化的Newton迭代法和弦截法计算方程x3- 3x+1=0的根。解:设f(x)=x3-3x+1,则f (x)=3x2-3由简化的Newton法,得由弦截法,得x0=0.5 x1= 0.3333333333 x2

14、 = 0.3497942387 x3 = 0.3468683325 x4 = 0.3473702799 x5 = 0.3472836048 x6 = 0.3472985550 x7 = 0.3472959759 x8 = 0.3472964208 x9 = 0.3472963440 x10 = 0.3472963572 x11 = 0.3472963553x0=0.5; x1=0.4; x2 = 0.3430962343 x3 = 0.3473897274 x4 = 0.3472965093 x5 = 0.3472963553 x6 = 0.3472963553简化Newton法弦截法要达到精

15、度10-8,简化Newton法 迭代11次,弦截法迭代5次, Newton迭代法迭代4次。无论前面哪种迭代法:(Newton迭代法、 简化Newton法、弦截法)Newton迭代法x0 = 2 x1 = -3.54 x2 = 13.95 x3 = -279.34 x4 = 122017是否收敛均与初值的位置有关。如x0 =1 x1 = -0.5708 x2 = 0.1169 x3 = -0.0011 x4 = 7.9631e-010 x5 = 0收敛发散为防止Newton法发散,可增加一个条件: |f(xk+1)| r=NewtonDown(sqrt(x)-x3+2,1.2,2)r =1.4759例:求解方程要求达到精度|xn-xn-1|10-5,取x0=-0.99。解:先用Newton迭代法:f (x)=x2-1x2=21.69118 x3=15.15689 x4 = 9.70724 x5 = 6.54091 x6 = 4.46497 x7 = 3.13384 x8 = 2.32607

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 其它文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号