《零点和根.ppt》由会员分享,可在线阅读,更多相关《零点和根.ppt(19页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、Matlab Math零点和根Bisection 我们知道 在1和2之间,先试x=3/2,因为x的平方大于2,那么 在1,3/222,.64271 ,32131 ,1651 ,831 ,411 ,211 M=2;a=1;b=3;k=0; while b-aeps x=(a+b) /2; if x2 M b=x else a = x end k=k+1;endInterval bisection观察一下a,b变化的情况: 程序结束需要多少次? 最后a,b是多少? 用format hex表示呢?为什么是这样的?Interval bisectionf(x) Find a very small int
2、erval, perhaps two successive floating point numbers, on which the function change sign.k=0; while abs(b-a)eps*abs(b) x=(a+b) /2; if sign(f(x)=sign(f(b) b=x; else a = x; end k = k+1; end f = inline(x2-2); a=1; b=2;计算sqrt(2)Interval bisection 二分法是慢的,用上面的代码,对任何函数她都需要运行52步,但是她是完全可靠的。这与我们后面介绍的方法不同。Newto
3、ns Method 对于求f(x) = 0的根,Newton法要求过y=f(x)上任一点的切线,并求切线与x-轴的交。迭代过程是)( )(1nnnnxfxfxxk=0; while abs(x-xprev)eps*abs(x) xprev = x; x = x-f(x)/fprime(x)endNewtons Method对于平方根问题,Newton法是优雅而有效的Mxxf2)(M零点就是nnnnnnxMxxMxxx21221Newton法k=0; while abs(x-xprev)eps*abs(x) xprev = x; x = 0.5*(x+M/x)end 1.500000000000
4、00 1.41666666666667 1.41421568627451 1.41421356237469 1.41421356237309 1.414213562373096步Newtons Method缺点: 函数f(x)必须是光滑的,要容易计算导数;初始猜想要靠近零点。优点:收敛速度快,二次收敛。如果函数的一阶和二阶导数连续,且初始值靠近零点,我们可以证明21)( )( 21nnnexffe)(21nneOeNewtons Method)( )(1nnnnxfxfxx下面构造一个让Newton方法无限进行而不收敛的例子)(1axaxnn)()( )(axxfxfax)(21)()( ax
5、xfxf|)()(axaxsignxfNewton方法不收敛,原因?00.511.522.533.54-1.5-1-0.500.511.5xsign(x-2) sqrt(abs(x-2)Secant Method用有限差分来代替导数的计算11)()(nnnnnxxxfxfsnnnnsxfxx)(1)( )(1nnnnxfxfxxk=0; while abs(b-a)eps*abs(b) c=a;a=b; b=b+(b-c)/(f(c)/f(b)-1); k=k+1;end 1.33333333333333 1.40000000000000 1.41463414634146 1.41421143
6、847487 1.41421356205732 1.41421356237310 1.414213562373107步1311)( )( )( )( 21nnnnneeffffeSecant Method如果f(x)的一阶导数和二阶导数连续)(11nnneeOeSuperline convergence251),(1nneOe即每作一次迭代有效位将增加1.6位再考虑一下 |)()(axaxsignxfInverse Quadratic InterpolationSecant方法用前两个点来确定第三个点,能不能用三个点呢?)(),(),(cfPcbfPbafPaIQIk=0; while abs
7、(c-b)eps*abs(c) x=polyinterp(f(a),f(b),f(c),a,b,c,0); a=b;b=c;c=x; k=k+1;end1.666666666666671.401515151515151.413895450421061.414213788335491.414213562373331.414213562373101.41421356237309a,b,c=0,1,2Inverse Quadratic Interpolation a,b,c = -2,0,2 a,b,c = -2.00001,0,1.99999看一下下面两组数据,IQI方法会发生什么情况?Zeroi
8、n Start with a and b so that f(a) and f(b) have opposite signs Use a secant step to give c between a and bRepeat the following steps until |b-a|eps|b| or f(b)=0 Arrange a,b and c so that f(a) and f(b) have opposite signs |f(b)|=|f(a)| c is the previous value of b If c=a, consider an IQI stepIf c=a,
9、consider a secant stopIf the IQI or secant step is in the interval a,b,take it If the step is not in the interval, use bisection.fzerotxMatlab中zeroin的算法实现是fzero. x = fzero(FUN,x0) %x0可以是数,或区间 x = fzero(besselj(0,x),0) %? x = fzero(besselj(0,x),0,pi) x = fzerotx(besselj(0,x),0,pi)-30-20-100102030-0.5
10、00.51xbesselj(0,x) ezplot(besselj(0,x),-30,30)函数调用 字符串表达式 cos(pi*t) besselj(0,x) Inline函数Function handle bessj0 z = fzerotx(bessj0,0,pi) function y=bessj0(x) y=besselj(0,x)符号表示 syms x F=besselj(0,x) z=fzerotx(F,0,pi)F=inline(besselj(0,x)-y,x,y)x = fzerotx(F,0,2,.5)fzerogui zeroin 的图形化描述 fzerogui(besselj(0,x),0 3.83);Fzerogui.m