数值计算matlab.docx

上传人:scccc 文档编号:12406787 上传时间:2021-12-03 格式:DOCX 页数:6 大小:25.58KB
返回 下载 相关 举报
数值计算matlab.docx_第1页
第1页 / 共6页
数值计算matlab.docx_第2页
第2页 / 共6页
数值计算matlab.docx_第3页
第3页 / 共6页
亲,该文档总共6页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《数值计算matlab.docx》由会员分享,可在线阅读,更多相关《数值计算matlab.docx(6页珍藏版)》请在三一文库上搜索。

1、数值计算非线性方程五种数值解法的matlab程序一、算法描述计算n A的值可以将问题转化为求函数f(x) xn A 0时的解,可以利用函数的收敛性结合数值逼近的思想进行算法设计。1.1 二分法设f (x)在区间(x,y)上连续,假定f (a)0, f (b)0 ,a<b,取中点该点就是零点。假设咛)0,那么在区间(a+b)/2,b)内有零点,(a+b)/2>=a,令aa""2用中点函数值判断。假设f詈)0,那么在区间(a,(a+b)/2)内有零点,(a+b)/2<=b,令b)0,继续使继续使用中点函数值判断。这样就可以不断接近零点。通过每次把f(x)的零点

2、所在小区间收缩一半的方法,使区间的两个端点逐步逼近函数的零点,以求得零点的近似值从以上可以看岀,每次运算后,区间长度减少一 半,是线形收敛Matlab 实现:function erfen(A,n,a,b,e) a0=a;b0=b;f = (x)xAn-A;m= 0;tic;if f(a)* f(b)<0m=1;c=(a+b)/2;fprintf('x%d=%12.9fn',m,c)while abs(a-b)>eif f(a)* f(c)<0 b=c;c=(a+b)/2;elseif f(c)*f(b)<0a=c;c=(a+b)/2;else y=c;e

3、nd m=m+1;fprintf('x%d=%12.9fn',m,c)endformat longy=c;elseif f(a)=0y=a;elseif f(b)=Oy=b;else disp ('may not be a root')endmt = toc;fprintf('根为:%.10fn',c);fprintf('初始值:%.5f , %.5fn',a0,b0);fprintf('迭代次数:%dn',m);fprintf('迭代时间:%.10fn',t);1.2牛顿法在方程的近似根x0 ,且

4、在x0附近将f (x)用一阶泰勒多项式展开即f(x)f(X°)f'(x°)(x X。),令 f (x) 0 即可解得x x0f(X。)f'(X0)取此x作为原方程的新近似根继续重复以上步骤,于是可得迭代公式Xk 1xkf (Xk)f'(Xk)Matlab 实现:function Newton(A,n,x0,e)begin=x0;f = (x)xAn-A;df = (x) n*xA( n-1);x1=x0-f (x0)/df (x0);m=1;fprintf('x%d=%12.9fn',m,x1);tic;while (abs (x1-

5、x0)>=e)&(m<=100000000) x0=x1;x仁 x0-f(x0)/df(x0);m=m+1;fprintf('x%d=%12.9fn',m,x1);endx1mt = toc;fprintf('根为:%.10fn',x1);fprintf('初始值:%.5fn',begin);fprintf('迭代次数:%dn',m);fprintf('迭代时间:%.10fn',t);1.3简易牛顿法为简化计算,在牛顿迭代公式中用一常数 M代替f '(xk)即为简化牛顿迭代法,在此取f&

6、#39;(x0)f'(Xk)Matlab 实现:function sNewton(A,n,xO,e)xkO=xO;f= (x)xAn-A;df = (x) n*xA( n-1);xk1=xk0-f (xkO)/df (xO);m=1;fprintf('x%d=%12.9fn',m,xk1);tic;while (abs (xk1-xkO)>=e)&(m<=1OOOOOOOO)xkO=xk1;xk1=xkO-f(xkO)/df(xO);m=m+1;fprintf('x%d=%12.9fn',m,xk1);endxk1mt = toc;f

7、printf('根为:%.1Ofn',xk1);fprintf('初始值:%.5fn',xO);fprintf('迭代次数:%dn',m);fprintf('迭代时间:%.1Ofn',t)1.4割线法在牛顿迭代公式中用差商卫凶。一f (xk l)代替f '(xk)即为割线法XkXk 1Matlab实现function gexian(A,n,a,b,e)xO=a;x1=b;f = (x)xAn-A;x2=x1-f (x1)*(x1-xO)/(f(x1)-f(xO);m=1;fprintf('x%d=%12.9fn&#

8、39;,m,x2);tic;while (abs (x2-x1)>=e)&(m<=1OOOOOOOO)xO=x1;x1=x2;x2=x1-f (x1)*(x1-xO)/(f(x1)-f(xO);m=m+1;fprintf('x%d=%12.9fn',m,x2);endx2mt = toc;fprintf('根为:%.1Ofn',x2);fprintf('初始值:%.5fn',a,b);fprintf('迭代次数:%dn',m);fprintf('迭代时间:%.10fn',t1.5斯特芬森法该迭代

9、法解方程 x x可以看成是另一种不动点迭代:Xk 1xk, k 0,1,2,L其中迭代函数为X X(X)X)2(X) 2 (x) x得到迭代公式为yk(Xk), Zk(yQXk 1XkM xQ2Zk2 ykXk0,1,2LMatlab实现function Steffensen(A,n,xO,e)begin=xO;f = (x)xAn-A;g = (x)A/(xA(n-1);x1= xO-(g(xO)-xO)A2/(g(g(xO)-2*g(xO)+xO) m=1;fprintf('x%d=%12.9fn',m,x1)tic;while (abs (x1-xO)>=e)&am

10、p;(m<=1OOOOOOOO) xO=x1;x仁 xO-(g(xO)-xO)A2/(g(g(xO)-2*g(xO)+xO); m=m+1;fprintf('x%d=%12.9fn',m,x1)endx1mt = toc;fprintf('根为:%.1Ofn',x1);fprintf('初始值:%.5fn',begin);fprintf('迭代次数:%dn',m);fprintf('迭代时间:%.1Ofn',t);二. 计算机软硬件配置电脑型号 华硕K52JU笔记本电脑操作系统 Windows 7旗舰版 32

11、位SP1 DirectX 11 处理器英特尔 Core i3 M 38O 2.53GHz 双核笔记本处理器内存 2 GB 昱联 DDR3 1333MHz Matlab 版本 三. 参数设置n A , e 精度,a, b 区间,xO初始值四. 计算结果以计算3 500为例erfen(500,3,0,10,0.000001)gexian(500,3,0,10,0.000001)newton(500,3,10,0.000001)snewton(500,3,10,0.000001)steffensen(500,3,10,0.000001)迭代次数二分法割线法牛顿法简易牛顿斯特芬森15.0000005.

12、0000008.3333338.3333338.75000027.5000007.1428577.9555558.0709878.08548138.7500008.3561647.9370487.9851517.94244148.1250007.8937927.9370057.9546367.93701257.8125007.9347937.9370057.9435047.93700567.9687507.9370177.9394077.93700577.8906257.9370057.93789387.9296877.9370057.93733397.9492187.937126107.93

13、94537.937050117.9345707.937021127.9370117.937011137.9357917.937007147.9364017.937006157.9367067.937005167.936859177.936935187.936973197.936992207.937002217.937006227.937004237.937005247.937005257.937005迭代次数2585156迭代时间0.0500000.0100000.0000000.0000000.010000根7.9370057.9370057.9370057.9370057.937005四.

14、分析结果及结论由以上运行结果可知,牛顿法的收敛速度最快,二分法收敛速度最慢。牛顿法、割线法和斯特芬森得到的结果精度最高,迭代次数由低到高排列为:牛顿法,斯特芬森,割线法, 简易牛顿法,二分法。出现这种结果的原因是:二分法为线性收敛,牛顿法为局部二次收敛,牛顿迭代法 为线性收敛,割线法为超线性收敛( p=1.618) 二分法优点是计算简单,收敛性有保证;缺点是收敛不快,不能求重根和复根 牛顿法,简易牛顿法,斯特芬森法收敛速度较快,但是要选取好初始值,如果初始值选取不当,会增加迭 代次数。割线法在牛顿迭代法的根底之上做了改良,即用差商f(Xk)-f(Xk-1)/Xk-Xk-1 代替导数f '(Xk),克服了一阶导数不存在的困难,计算时间会变长 .

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1