《非线性方程求根数值试验.doc》由会员分享,可在线阅读,更多相关《非线性方程求根数值试验.doc(13页珍藏版)》请在三一文库上搜索。
1、试验一:二分法求根function x k=bisect1(fun1,a,b,tol) if nargin tol t=a+(b-a)/2; ft=feval(fun1,t); if sign(ft)=sign(fb) fb=ft; b=t; elseif sign(ft)=sign(fa) fa=ft; a=t; end k=k+1; end x=a+(b-a)/2; fun1=inline(x3-x-1);x k=bisect1(fun1,1,2,0.005)x = 1.32421875k =8 x k=bisect1(fun1,1,2,0.00005)x = 1.324737548828
2、13k =15试验二:迭代法求根function x0,k=diedai3(fname,x0,ep,N)if nargin4 N=500;endif narginep & kfname=inline(x+1)(1/3);x0,k=diedai3(fname,1.5,0.00000005)x0 = 1.32471796764309k = 10fname=inline(cos(x);x0,k=diedai3(fname,0.8,0.0000005)x0 = 0.739085333292374k = 32试验三:牛顿迭代求根function x0,k=Newton7(fname,dfname,x0,
3、ep,N)if nargin5 N=500;endif narginep & kN x0=x;x=x0-feval(fname,x0)/feval(dfname,x0) k=k+1;endx0=x;fname=inline(x3-x-1) dfname=inline(3*x2-1) x0,k=Newton7(fname,dfname,1.5)x0 = 1.32471795724479k = 4 x0,k=Newton7(fname,dfname,1.5, 10(-16)x0 = 1.32471795724475k = 6fname=inline(x-cos(x) dfname=inline(1
4、+sin(x) x0,k=Newton7(fname,dfname,0.8 , 10(-16)x0 = 0.739085133215161k = 5 fname=inline(9*x2-sin(x)-1); dfname=inline(18*x-cos(x); x0,k=Newton7(fname,dfname,0.4,10(-16)x0 = 0.391846907002648k = 5试验四:牛顿迭代法求重根的收敛速度fname=inline(x4-4*x2+4)dfname=inline(4*x3-8*x)x0,k=Newton7(fname,dfname,1, 10(-16)x0 = 1
5、.41421355761049k =27function x0,k=Newton71(fname,dfname,x0,ep,N)if nargin5 N=500;endif narginep & kN x0=x;x=x0-2*feval(fname,x0)/feval(dfname,x0); k=k+1;endx0=x;x0,k=Newton71(fname,dfname,1, 10(-16)x0 = 1.41421356242695k = 9牛顿法求重根时是线性收敛的。此时,需将牛顿格式修改,以达到平方收敛。试验五:下山牛顿迭代fname=inline(x3-x-1); dfname=inl
6、ine(3*x2-1); x0,k=Newton7(fname,dfname,0.6)x0 = 1.32471795724475k = 12由于初值的选取不适当,使得牛顿迭代收敛比较慢下山牛顿迭代法function x0,k,f=Newton8(fname,dfname,x0,ep,N)if nargin5 N=500;endif narginep & kabs(feval(fname,x0) r=r/2; x=x0-r*feval(fname,x0)/feval(dfname,x0); end x0=x; x=x0-feval(fname,x0)/feval(dfname,x0); f=ab
7、s(feval(fname,x0); endx0=x;fname=inline(x3-x-1); dfname=inline(3*x2-1);x0,k,f=Newton8(fname,dfname,0.6)x0 = 1.32471795724977k = 4f = 9.89854166122406e-006 fname=inline(x3/3-x); dfname=inline(x2-1);x0,k,f=Newton8(fname,dfname,-0.99)x0 = 1.73205080756888k = 5f = 1.04839176229277e-007x0,k,f=Newton8(fna
8、me,dfname,0.99)x0 = -1.73205080756888k = 6f = 2.18002567109465e-008 x0,k,f=Newton8(fname,dfname,0.1)x0 = 0k = 3f =2.0357740623464e-010试验六:割线法求根function x0,k=gexian(fname,x0,x1,ep,N)if nargin5 N=500;endif narginep & k x0,k=gexian(fname,1,2)x0 = 1.73205081100693k = 6 fname=inline(x3-x-1); x0,k=gexian(fname,1,2)x0 = 1.32471795724467k = 7 试验七:简单迭代法的加速技巧function x0 k=aitken(fun,x0,ep,N) if nargin 4 N=500; end if nargin ep & k fun=inline(x+1)(1/3);x0 k=aitken(fun,1.5)x0 = 1.32471795724475k = 3fun=inline(x3-1);x0 k=aitken(fun,1.5)x0 = 1.32471795724475k = 6