您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 数值分析实验报告——非线性方程求根
数值分析实验报告——非线性方程求根二分法一、题目0.001..012.13要求每个根的误差小于的所有根用二分法求方程xx二、方法二分法三、程序1、Jiangerfen.M的程序function[c,yc]=jiangerfen(f,a,b,tol1,tol2)ifnargin4tol1=1e-3;tol2=1e-3;end%nargin4表示若赋的值个数小于4,则tol1和tol2取默认值。ya=feval('f',a);%令x=a代入到方程f中,ya即f(a)。yb=feval('f',b);ifya*yb0,disp('(a,b)不是有根区间');return,endmax=1+round((log(b-a)-log(tol2))/log(2));%round函数是将数据取整,使数据等于其最接近的整数。fork=1:maxc=(a+b)/2;yc=feval('f',c);if((b-a)/2tol2)|(abs(yc)tol1),break,endifyb*yc0a=c;ya=yc;elseb=c;yb=yc;endendk,c=(a+b)/2,yc=feval('f',c)2、f.M的程序functiony=f(x);y=x^3-2*x-1;四、结果formatcompactfplot('[x^3-2*x-1,0]',[-1.5,2]);jiangerfen('f',-1.5,-0.8);k=8c=-0.9996yc=3.9017e-004jiangerfen('f',-0.8,-0.3);k=8c=-0.6184yc=2.7772e-004jiangerfen('f',1.3,2);k=10c=1.6179yc=-9.5348e-004jiangerfen('f',2,3);(a,b)不是有根区间方程f(x)=x^3-2*x-1的所有根为-0.9996,-0.6184,1.6179。迭代次数分别为8,8,10。五、拓展由于二分法收敛太慢,可以先通过画图,取得一个包含根的小区间,再用二分法来求解,这样就能有效减少迭代次数。不动点迭代法一、题目的一个根。的在用不动点迭代求]1,0[01sin2:.22xx二、方法不动点迭代法三、程序1、Jiangbudong.M的程序functionp=jiangbudong(g,x0,tol,max)P(1)=x0;fork=1:maxP(k+1)=feval('g',P(k));p=P(k+1);ifabs(P(k+1)-P(k))tolbreak;endifk==maxdisp('methodfailed');endendP,k-12、g.M的程序functiony=g(x);y=(sin(x)+1)/(2*x);四、结果formatcompactfplot('[2*x^2-sin(x)-1,0]',[0,1]);jiangbudong('g',0.5,1e-4,50)P=Columns1through90.50001.47940.67451.20420.80281.07080.87671.00870.9151Columns10through180.97940.93430.96550.94370.95880.94830.95560.95050.9541Columns19through270.95160.95330.95210.95300.95240.95280.95250.95270.9526Column280.9526ans=26ans=0.9526方程2x^2-sin(x)-1=0在[0,1]的根为0.9526。取的初值是0.5。五、拓展在不动点迭代法中,迭代过程的收敛速度依赖于迭代函数g(x)的选取。若dg(x)不等于0,则该迭代过程只可能是线性收敛。如果改动迭代函数为g(x)=sqrt((sin(x)+1)/2),则输出结果为jiangbudong('g',0.5,1e-4,50)P=Columns1through60.50000.86010.93750.95030.95230.9526Column70.9526ans=5ans=0.9526迭代次数为5次,相比先前的26次,收敛速度加快了很多。因此,在选取迭代函数时,应该尽量让函数收敛的阶更高一点。Newton迭代法一、题目;013:10,Newton.335的所有根准确到迭代法求解用xx二、方法Newton迭代法三、程序1、Jiangnewton.M的程序functionp=jiangnewton(h,dh,x0,tol1,max)p0=x0;fork=1:maxp=p0-feval(h,p0)/feval(dh,p0);ifabs(p-p0)tol1break;endp0=p;disp(p0);ifk==maxdisp('methodfailed');endendk-12、h.M的程序functiony=h(x);y=x^3-3*x+1;3、dh.M的程序functiony=dh(x);y=3*x^2-3;四、结果formatcompactfplot('[x^3-3*x+1,0]',[-4,4]);jiangnewton('h','dh',-2.1,1e-5,100)-1.9083-1.8800-1.8794ans=3ans=-1.8794jiangnewton('h','dh',0.2,1e-5,100)0.34170.34730.3473ans=3ans=0.3473jiangnewton('h','dh',1.1,1e-5,100)2.63811.99791.66571.54841.53241.5321ans=6ans=1.5321方程x^3-3x+1=0的根为-1.8794,0.3473,1.5321。迭代次数分别为3,3,6。五、拓展由于牛顿迭代法收敛性依赖初值的选取,倘若选取的初值偏离所求根较远或者选取不恰当,牛顿法可能发散,求不出根来。例如:jiangnewton('h','dh',-1,1e-5,100),则求不出根来。jiangnewton('h','dh',-0.7,1e-5,100)1.10202.60711.98041.65801.54671.53231.5321ans=7ans=1.5321jiangnewton('h','dh',-0.6,1e-5,100)0.74580.12790.33750.34730.3473ans=5ans=0.3473jiangnewton('h','dh',-1.1,1e-5,100)-5.8127-4.0035-2.8688-2.2232-1.9426-1.8822-1.8794ans=7ans=-1.8794由上面可以看到,选取的初值相差很小,可是求出的根却不一样。
本文标题:数值分析实验报告——非线性方程求根
链接地址:https://www.777doc.com/doc-5685971 .html