第二章 非线性方程(组)的数值解法_第1页
第二章 非线性方程(组)的数值解法_第2页
第二章 非线性方程(组)的数值解法_第3页
第二章 非线性方程(组)的数值解法_第4页
第二章 非线性方程(组)的数值解法_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第二章 非线性方程(组)的数值解法2.1 方程(组)的根及其MATLAB命令2.1.2 求解方程(组)的solve命令求方程f(x)=q(x)的根可以用MATLAB命令: x=solve(方程f(x)=q(x),待求符号变量x)求方程组fi(x1,xn)=qi(x1,xn) (i=1,2,n)的根可以用MATLAB命令:E1=sym(方程f1(x1,xn)=q1(x1,xn);.En=sym(方程fn(x1,xn)=qn(x1,xn);x1,x2,xn=solve(E1,E2,En, x1,xn)2.1.4 求解方程(组)的fsolve命令fsolve的调用格式: X=fsolve(F,X0)

2、2.2 搜索根的方法及其MATLAB程序2.2.1 作图法及其MATLAB程序作函数在区间 a,b 的图形的MATLAB程序一x=a:h:b; % h是步长y=f(x); plot(x,y)grid, gtext(y=f(x)说明: 此程序在MATLAB的工作区输入,运行后即可出现函数的图形.此图形与轴交点的横坐标即为所要求的根的近似值. 区间a,b 的两个端点的距离 b-a 和步长h的绝对值越小,图形越精确.作函数在区间 a,b上的图形的MATLAB程序二将化为,其中是两个相等的简单函数.x=a:h:b; y1=h(x); y2=g(x);plot(x, y1, x, y2)grid,gte

3、xt( y1=h(x),y2=g(x)说明:此程序在MATLAB的工作区输入,运行后即可出现函数的图形.两图形交点的横坐标即为所要求的根的近似值.2.2.2 逐步搜索法及其MATLAB程序逐步搜索法的MATLAB主程序function k,r=zhubuss(a,b,h,tol)% 输入的量- a和b是闭区间a,b的左、右端点;%-h是步长;%-tol是预先给定的精度.% 运行后输出的量-k是搜索点的个数;% - r是方程 在a,b上的实根的近似值,其精度是tol;X=a:h:b;Y=funs(X);n=(b-a)/h+1;m=0;X(n+1)=X(n);Y(n+1)=Y(n);for k=2

4、:n X(k)=a+k*h;Y(k)=funs(X(k); %程序中调用的funs.m为函数sk=Y(k)*Y(k-1); if sk=0, m=m+1;r(m)=X(k); end xielv=(Y(k+1)-Y(k)*(Y(k)-Y(k-1); if (abs(Y(k)tol)&( xielv k,r=zhubuss(-2,2,0.001,0.0001)运行后输出的结果k =4001r = -1.2240 -1.0000 -1.0000 -0.9990 1.2250即搜索点的个数为k =4 001,其中有5个是方程的近似根,即r = -1.224 0,-1.000 0,-1.000 0,-

5、0.999 0,1.225 0,其精度为0.000 1.在程序中将y=2.*x.3+2.*x.2-3.*x-3用y=sin(cos(2.*x.3) 代替,可得到方程在区间上的根的近似值如下r = -1.9190 -1.7640 -1.5770 -1.3300 -0.9220 0.9230 1.3310 1.5780 1.7650 1.92002.3 二分法及其MATLAB程序2.3.2 二分法的MATLAB程序二分法的MATLAB主程序function k,x,wuca,yx=erfen(a,b,abtol)a(1)=a; b(1)=b; ya=fun(a(1); yb=fun(b(1); %

6、程序中调用的fun.m 为函数 if ya* yb0, disp(注意:ya*yb0,请重新调整区间端点a和b.), returnendmax1=-1+ceil(log(b-a)- log(abtol)/ log(2); % ceil是向 方向取整for k=1: max1+1a;ya=fun(a); b;yb=fun(b); x=(a+b)/2; yx=fun(x); wuca=abs(b-a)/2; k=k-1;k,a,b,x,wuca,ya,yb,yxif yx=0a=x; b=x;elseif yb*yx0b=x;yb=yx;elsea=x; ya=yx;endif b-ax=-4:0

7、.1:4; y=x.3-x +4; plot(x,y) grid,gtext(y=x3-x+4) 画出函数f(x)=x3-x+4的图像.从图像可以看出,此曲线有两个驻点都在x轴的上方,在(-2,-1)内曲线与x轴只有一个交点,则该方程有唯一一个实根,且在 (-2,-1)内.方法2 试算法.在MATLAB工作窗口输入程序x=-4: 1:4,y=x.3-x +4运行后输出结果x = -4 -3 -2 -1 0 1 2 3 4 y = -56 -20 -2 4 4 4 10 28 64 由于连续函数f(x)满足,所以此方程在(-2,-1)内有一个实根.(2) 用二分法的主程序计算.在MATLAB工作

8、窗口输入程序 k,x,wuca,yx=erfen (-2,-1,0.001)运行后屏幕显示用二分法计算过程被列入表 2-3,其余结果为k = 9,x=-1.7959, wuca = 9.7656e-004,yx = 0.0037表 2-3次数k左端点ak右端点bk中点xk函数值f(ak)函数值f(bk)函数值f(xk)0-2.000 0-1.000 0-1.500 00.500 0-2.000 04.000 02.125 01-2.000 0-1.500 0-1.750 00.250 0-2.000 02.125 00.390 62-2.000 0-1.750 0-1.875 00.125 0

9、-2.000 00.390 6-0.716 83-1.875 0-1.750 0-1.812 50.062 5-0.716 80.390 6-0.141 84-1.812 5-1.750 0-1.781 30.031 3-0.141 80.390 60.129 65-1.812 5-1.781 3-1.796 90.015 6-0.141 80.129 6-0.004 86-1.796 9-1.781 3-1.789 10.007 8-0.004 80.129 60.062 77-1.796 9-1.789 1-1.793 00.003 9-0.004 80.062 70.029 08-1.7

10、96 9-1.793 0-1.794 90.002 0-0.004 80.029 00.012 19-1.796 9-1.794 9-1.795 90.001 0-0.004 80.012 10.003 72.4 迭代法及其MATLAB程序2.4.2 迭代法的MATLAB程序1迭代法的MATLAB主程序1function k,piancha,xdpiancha,xk=diedai1(x0,k)% 输入的量-x0是初始值,k是迭代次数x(1)=x0; for i=1:k x(i+1)=fun1(x(i);%程序中调用的fun1.m为函数y=(x) piancha= abs(x(i+1)-x(i)

11、; xdpiancha=piancha/( abs(x(i+1)+eps); i=i+1;xk=x(i);(i-1) piancha xdpiancha xkendif (piancha 1)&(xdpiancha0.5)&(k3) disp(请用户注意:此迭代序列发散,请重新输入新的迭代公式) return; end if (piancha 0.001)&(xdpiancha3) disp(祝贺您!此迭代序列收敛,且收敛速度较快) return; endp=(i-1) piancha xdpiancha xk;例2.4.1 求方程的一个正根.解 在MATLAB工作窗口输入程序 k,pianc

12、ha,xdpiancha,xk= diedai1(2,5)运行后输出用迭代公式的结果k,piancha,xdpiancha,xk=1.000 1.000 0.333 3.0002.000 2.000 5.000 0.0003.000 4.000 0.590 4.0004.000 11.000 1.251 -6.0005.000 11.813 0.297 -18.813请用户注意:此迭代序列发散,请重新输入新的迭代公式k=5,piancha = 11.813,xdpiancha = 0.297,xk = -18.813由以上运行后输出的迭代序列与根=2.316 624 790 355 40相差越

13、来越大,即迭代序列发散,此迭代法就失败.这时偏差piancha逐渐增大且偏差的相对误差xdpiancha的值大于0.5.用迭代公式运行后输出的结果k,piancha,xdpiancha,xk= 1.000 0.000 0.000 2.0002.000 0.778 0.000 2.2223.000 0.936 0.173 2.1584.000 0.555 0.116 2.6025.000 0.128 0.115 2.730k =5,piancha =0.128,xdpiancha = 0.115,xk = 2.730可见,偏差piancha和偏差的相对误差xdpiancha的值逐渐变小,且第5次

14、的迭代值xk =2.331 460 674 157 30与根=2.316 624 790 355 40接近,则迭代序列收敛,但收敛速度较慢,此迭代法较为成功.用迭代公式运行后输出的结果k,piancha,xdpiancha,xk= 1.000 0.333 0.714 2.333 2.000 0.667 0.432 2.667 3.000 0.690 0.822 2.977 4.000 0.437 0.412 2.540 5.000 0 0 2.540祝贺您!此迭代序列收敛,且收敛速度较快k = 5; piancha = 0; xdpiancha = 0; y = 2.540.可见,偏差pian

15、cha和偏差的相对误差xdpiancha的值越来越小,且第5次的迭代值xk=2.316 624 790 355 40与根=2.316 624 790 355 40相差无几,则迭代序列收敛,且收敛速度很快,此迭代法成功.2.4.5 迭代法的MATLAB程序2迭代法的MATLAB主程序2function k,piancha,xdpiancha,xk,yk=diedai2(x0,tol,ddmax)x(1)=x0;for i=1: ddmax x(i+1)=fun(x(i);piancha=abs(x(i+1)-x(i); xdpiancha=piancha/( abs(x(i+1)+eps);i=

16、i+1; xk=x(i);yk=fun(x(i); (i-1) piancha xdpiancha xk yk if (pianchatol)|(xdpianchaddmax disp(迭代次数超过给定的最大值ddmax) k=i-1; xk=x(i);yk=fun(x(i); (i-1) piancha xdpiancha xk yk;return; endP=(i-1),piancha,xdpiancha,xk,yk;例2.4.5 求x5-3x+1=0在0.3附近的根,精确到4位小数.解 构造迭代公式 .利用迭代法的MATLAB程序2计算精确到4位小数的根的近似值 y 和迭代次数k.在MA

17、TLAB工作窗口输入程序 k,piancha,xdpiancha,xk,yk=diedai2(0.3,1e-4,100)运行后输出的结果k,piancha,xdpiancha,xk,yk =0 0.03414 0.10218 0.30000 0.334141 0.03414 0.10218 0.33414 0.334722 0.00058 0.00173 0.33472 0.334733 0.00001 0.00004 0.33473 0.33473k =3;piancha =1.0697e-005;xdpiancha =3.1680e-005; xk =0.3347; yk =0.3347.

18、2.5 迭代过程的加速方法及其MATLAB程序 2.5.2 加权迭代法的MATLAB程序加权迭代法的MATLAB主程序现提供名为jasudd.m的M文件如下:function k,xk,yk=jasudd (x0,tol,L,ddmax)x1(1)=x0;for i=1: ddmax x(i+1)=fun(x1(i);x1(i+1)= x(i+1)+L*( x(i+1)- x1(i)/(1-L); piancha=abs(x1(i+1)-x1(i); xdpiancha= piancha/( abs(x1(i+1)+eps); i=i+1;xk=x1(i);yk=fun(x1(i);(i-1)

19、 xk yk if (pianchatol)|(xdpianchaddmax disp(迭代次数超过给定的最大值ddmax) k=i-1; xk=x1(i); (i-1) xk yk; return;endP=(i-1),xk,yk;例2.5.1 求2e在0.85附近的一个近似根,要求精度.解 在MATLAB工作窗口输入程序 k,xk,yk=jasudd (0.85,1e-6,-0.855,100)运行后输出结果k,xk,yk = 1.000 0.041 0.561 2.000 0.491 0.236 3.000 0.699 0.255k =3; xk =0.; yk = 0.2.5.4 艾特

20、肯(Aitken)加速方法的MATLAB程序艾特肯(Aitken)加速方法的MATLAB主程序现提供名为Aitken.m的M文件如下:function k,xk,yk,p= Aitken (x0,tol, ddmax)x(1)=x0;for i=1: ddmax x1(i+1)=fun(x(i); x2(i+1)=fun(x1(i+1); x(i+1)=x2(i+1)-(x2(i+1)-x1(i+1)2/(x2(i+1)-2*x1(i+1)+ x(i); piancha=abs(x(i+1)-x(i); xdpiancha= piancha/( abs(x(i+1)+eps); i=i+1;

21、xk=x(i);yk=fun(x(i); if (pianchatol)|(xdpianchaddmax disp(迭代次数超过给定的最大值ddmax) k=i-1; xk=x(i); yk=fun(x(i); m=0,1:i-1; p=m,x1,x2,x; return;endm=0,1:i-1; p=m,x1,x2,x;例2.5.3 用艾特肯加速方法求2e在0.85附近的一个近似根,要求精度.解 在MATLAB工作窗口输入程序 k,xk,yk,p= Aitken(0.85,1e-6, 100)运行后输出结果k=3,xk=0.343,yk=0.373p = 0 0 0 0.000 1.000

22、 0.745 0.484 0.607 2.000 0.811 0.826 0.407 3.000 0.343 0.398 0.3732.6 牛顿(Newton)切线法及其MATLAB程序2.6.2 牛顿切线法的收敛性及其MATLAB程序牛顿切线法的收敛性及其MATLAB主程序function y,f=newjushou(x)f=fnq(x); fz=fnq(x)*ddfnq(x)/(dfnq(x)2+eps); y=abs(fz);if (y y,f=newjushou(-1)运行后输出结果请注意观察下面显示的(x)的导数值的绝对值y=|d(x)/dx|和方程f(x)=0的函数f(x)值y =

23、 139.5644f = 4.3096(2)输入程序 y,f=newjushou(0)运行后输出结果请注意观察下面显示的(x)的导数值的绝对值y=|d(x)/dx|和方程f(x)=0的函数f(x)的值fy = 8.0000f = 4(3)输入程序 y,f=newjushou(1)运行后输出结果恭喜您!此迭代序列收敛,(x)导数值的绝对值y=|d(x)/dx|和方程f(x)=0的函数f(x)值f如下y = 0.3566f = 1.7126(4)输入程序: y,f=newjushou(2)运行后输出结果请注意观察下面显示的(x)的导数值的绝对值y=|d(x)/dx|和方程f(x)=0的函数f(x)

24、值y = 1.2593f = -2.7188(5)输入程序 y,f=newjushou(5.5)运行后输出结果请注意观察下面显示的(x)的导数值的绝对值y=|d(x)/dx|和方程f(x)=0的函数f(x)值y = 1.0447e+005f = 176.6400(6)输入程序 y,f=newjushou(8)运行后输出结果恭喜您!此迭代序列收敛,(x)导数值的绝对值y=|d(x)/dx|和方程f(x)=0的函数f(x)值f如下y = 0.4038f = -2.9452e+0032.6.3 牛顿切线法的MATLAB程序牛顿切线法的MATLAB主程序现提供名为newtonqx.m的M文件:func

25、tion k,xk,yk,piancha,xdpiancha=newtonqx(x0,tol,ftol,gxmax)x(1)=x0; for i=1: gxmax x(i+1)=x(i)-fnq(x(i)/(dfnq(x(i)+eps); piancha=abs(x(i+1)-x(i); xdpiancha= piancha/( abs(x(i+1)+eps); i=i+1;xk=x(i);yk=fnq(x(i); (i-1) xk yk piancha xdpianchaif (abs(yk)ftol)&(pianchatol)|(xdpianchagxmax disp(请注意:迭代次数超过

26、给定的最大值gxmax。) k=i-1; xk=x(i);(i-1) xk yk piancha xdpiancha return;end (i-1),xk,yk,piancha,xdpiancha;例 2.6.3 用牛顿切线法求方程在的近似根,要求精度.解 在MATLAB工作窗口输入程序 k,xk,yk,piancha,xdpiancha=newtonqx(-0.4,0.001, 0.001,100)运行后输出初始值的迭代结果. 2.6.4 求的方法及其MATLAB程序求的方法及其MATLAB主程序现提供名为kai2fang.m的M文件:function k,xk,yk,piancha,xd

27、piancha,P=kainfang(x0,c,n,tol, gxmax)x(1)=x0;for i=1: gxmaxu(i)= (x(i)n-c)/(n*x(i)(n-1); x(i+1)= x(i)-u(i); piancha=abs(x(i+1)-x(i); xdpiancha=piancha/( abs(x(i+1)+eps);i=i+1; xk=x(i);yk=fnq(x(i);(i-1),xk,yk,piancha,xdpiancha if (pianchatol)|(xdpianchagxmax disp(请注意:迭代次数超过给定的最大值gxmax.) k=i-1;xk=x(i)

28、; yk=fnq(x(i);(i-1),xk,yk,piancha,xdpiancha return;endP=(i-1),xk,yk,piancha,xdpiancha;例2.6.5 求,要求精度为.解 本题介绍四种解法.方法1 用求的次根(当n是偶数时,)的MATLAB程序计算.取初始值,根指数,被开方数,近似根的精度tol=,迭代的最大次数gxmax=100.在工作区间输入程序 k,xk,yk,piancha,xdpiancha=kainfang(10,113,2,1e-5,100)运行后输出结果k=4,piancha=1.8147e-011,xdpiancha=1.7706e-012x

29、k =10.465,yk =1.0509e+009可见,10.630 15,满足精度.方法2 用牛顿迭代公式(2.12)计算.设,则,记,.由牛顿迭代公式得,即取初始值,计算结果列入表 2-12. 表 2-12迭代次数偏差根的近似值10.650 00010.650 00020.019 83610.630 16430.000 01910.630 14640.000 00010.630 146因为,迭代次数=4时,偏差,满足精度,所以,10.630 15.方法3 用牛顿切线法的MATLAB主程序计算.分别建立名为fnq.m和dfnq.m的M文件function y=fnq(x) y=x2-113;

30、 function y=dfnq(x) y=2*x;在MATLAB工作窗口输入程序 k,xk,yk,piancha,xdpiancha=newtonqx(10, 1e-5, 1e-5,100)运行后,将输出的结果列入下表 2-13. 迭代k=4次,得到精度为的结果 10.630 15.表 2-13kpianchaxdpianchaxkyk10.650 0000.061 03310.650 0000.422 50020.019 8360.001 86610.630 1640.000 39330.000 0190.000 00210.630 1460.000 00040.000 0000.000

31、00010.630 1460.000 000方法4 在MATLAB工作空间输入程序 113(1/2) 运行后输出ans = 10.465 经过四舍五入后,得到精度为的结果10.630 15.2.6.6 牛顿切线法的加速及其两种MATLAB程序(一) 已知方程根的重数已知方程根的重数,求重根的修正牛顿切线法的MATLAB主程序现提供名为newtonxz.m的M文件:function k,piancha,xdpiancha,xk,yk=newtonxz(m,x0,tol,ftol,gxmax)x(1)=x0;for i=1: gxmaxx(i+1)=x(i)-m*fnq(x(i)/(dfnq(x(

32、i)+eps); piancha=abs(x(i+1)-x(i);xdpiancha=piancha/( abs(x(i+1)+eps); i=i+1; xk=x(i);yk=fnq(x(i); (i-1) piancha xdpiancha xk yk; if (pianchatol)|(xdpiancha tol)&(abs(yk)gxmax disp(请注意:迭代次数超过给定的最大值gxmax.) k=i-1; xk=x(i); yk=fnq(x(i); (i-1) piancha xdpiancha xk yk;return;end例2.6.7 判断是方程e的几重根?在区间上,分别用牛

33、顿切线法和求重根的修正牛顿切线公式求此根的近似值,使精确到.解 经判断知,是方程的三重根.在MATLAB工作窗口输入程序 k,piancha,xdpiancha,xk,yk= newtonqx (0.5,1e-4, 1e-4,100)运行后整理结果列入表 2-20.表 2-20kpianchaxdpianchaxkyk10.144 100.404 890.355 900.541 9820.107 410.432 250.248 490.168 2030.077 450.452 800.171 040.051 4640.054 500.467 600.116 550.015 5850.037 6

34、90.477 980.078 850.004 6960.025 760.485 140.053 100.001 4070.017 460.490 010.035 630.000 4280.011 770.493 300.023 860.000 1290.007 910.495 520.015 960.000 04100.005 300.497 000.010 660.000 01110.003 540.498 000.007 120.000 00120.002 370.498 670.004 750.000 00130.001 580.499 110.003 170.000 00140.001

35、 050.499 410.002 110.000 00150.000 700.499 600.001 410.000 00160.000 470.499 740.000 940.000 00170.000 310.499 820.000 630.000 00180.000 210.499 880.000 420.000 00190.000 140.499 920.000 280.000 00200.000 090.499 950.000 190.000 00迭代次数k=20,精确到的根的近似值是xk =0.000 2,其函数值是yk =5.752 0e-011,收敛速度较慢.根据求重根的修正牛

36、顿切线公式,在MATLAB工作窗口输入程序 k,piancha,xdpiancha,xk,yk=newtonxz(3,0.5,1e-4, 1e-4,100)运行后整理结果得表 2-21.表 2-21kpianchaxdpianchaxkyk10.432 306.385 790.067 700.002 9420.066 5457.310 850.001 160.000 0030.001 163443.447 270.000 000.000 0040.000 431.000 78-0.000 43-0.000 0050.000 439228.792 130.000 00-0.000 0060.01

37、1 151.000 000.011 150.000 0170.011 12356.869 170.000 030.000 0080.000 031638.927 030.000 000.000 00迭代次数k=8,精确到的根的近似值是xk =1.900 3e-008,其函数值是yk = 4.440 9e-016,piancha = 3.114 5e-005,xdpiancha=1638.927 0,是二阶收敛(平方收敛).可见,求重根的修正牛顿切线公式比牛顿切线法收敛速度快得多.(二) 未知方程根的重数未知方程根的重数为,求重根的修正牛顿切线法的MATLAB主程序现提供名为newtonxz1.

38、m的M文件function k,piancha,xdpiancha,xk,yk=newtonxz1(x0,tol,ftol,gxmax)x(1)=x0;for i=1: gxmaxu(i)=fnq(x(i)/dfnq(x(i);du(i)=1-fnq(x(i)*ddfnq(x(i)/(dfnq(x(i)2+eps);x(i+1)=x(i)-u(i)/du(i); piancha=abs(x(i+1)-x(i);xdpiancha=piancha/( abs(x(i+1)+eps); i=i+1; xk=x(i);yk=fnq(x(i); if (pianchatol)|(xdpiancha t

39、ol)&(abs(yk)gxmax disp(请注意:迭代次数超过给定的最大值gxmax.)k=i-1; xk=x(i); yk=fnq(x(i); (i-1) piancha xdpiancha xk yk ;return;end例2.6.8 用未知重数的求重根的修正牛顿切线法,求方程 在区间上的根,使精确到.解 在MATLAB工作窗口输入程序 k,piancha,xdpiancha,xk,yk=newtonxz1(0.5,1e-4, 1e-4,100)运行后整理结果得表 2-22. 表 2-22kpianchaxdpianchaxkyk10.599 236.038 57-0.099 23-

40、0.008 1820.096 9843.054 85-0.002 25-0.000 0030.002 251 778.327 84-0.000 000400-0.000 0002.7 割线法及其MATLAB程序2.7.2 割线法的MATLAB程序割线法的MATLAB主程序现提供名为gexian.m的M文件:function k,piancha,xdpiancha,xk,yk=gexian (x01,x02,tol,ftol,gxmax)x(1)=x01;x(2)=x02;for i=2: gxmax u(i)= fnq(x(i)*(x(i)-x(i-1); v(i)= fnq(x(i)-fnq

41、(x(i-1); x(i+1)=x(i)- u(i)/( v(i); piancha=abs(x(i+1)-x(i); xdpiancha= piancha/( abs(x(i+1)+eps); i=i+1; xk= x(i);yk=fnq(x(i); (i-2) piancha xdpiancha xk yk if (abs(yk)ftol)&( piancha tol)|(xdpianchagxmaxdisp(请注意:迭代次数超过给定的最大值gxmax.)k=i-2; xk=x(i);yk=fnq(x(i); return;end2.8 抛物线法及其MATLAB程序2.8.2 抛物线法的M

42、ATLAB程序抛物线法的MATLAB主程序function k,piancha,xdpiancha,xk,yk=paowu(x1,x2, x3,tol,ftol,gxmax)X=x1, x2, x3;for i=1: gxmaxh0= X(1)- X (3); h1= X (2)- X (3); u0= fnq (X (1)- fnq (X (3) ); u1= fnq (X (2)- fnq (X (3); c= fnq (X (3);fenmu= h02* h1- h12* h0; afenzi= u0* h1- u1* h0;bfenzi= u1*h02-u0*h12; a= afenz

43、i/ fenmu; b= bfenzi/ fenmu; deta=b2-4*a*c; cha=abs(X(3)-X(1),abs(X(3)-X(2),abs(X(2)- X(1);piancha =min(cha); xdpiancha= piancha/( abs (X(3)+eps);if deta0disp(提示:根的判别式值为负数.),detakf=sqrt(deta);elseif deta=0disp(提示:根的判别式值为零.),detakf=0;elsedisp(提示:根的判别式值为正数.),detakf=sqrt(deta);endif b0 detakf=- detakf;e

44、ndz=-2*c/(b+ detakf);xk= X(3)+ z;q1= xk - X (1); q2= xk - X (2); q3= xk - X (3);if abs(q2) abs(q1)X1=X(2), X(1), X(3); X= X1;Y= fnq(X);endif abs(q3) abs(q1)X2=X(1), X(3), X(2); X= X2;Y= fnq(X);endX(3)= xk; Y(3)=fnq(X(3);yk= Y(3); i piancha xdpiancha xk yk if (abs(yk)ftol)&( piancha tol)|(xdpianchagx

45、max disp(请注意:迭代次数超过给定的最大值gxmax,请重新输入初始值x1,x2,x3) return;endP=i,piancha,xdpiancha,xk,yk; 例2.8.1 用抛物线法求方程e的一个实根的近似值,使精确到.解 先用作图法确定初始值x01,x02和x03,然后在MATLAB工作窗口输入程序 k,piancha,xdpiancha,xk,yk= paowu (-0.4,-0.3, -0.5,1e-4, 1e-4,100)运行后输出结果 提示:根的判别式值为正数.ans = Columns 1 through 4 1.000 0.000 0.000 -0.239 Column 5 -0.299提示:根的判别式值为正数.ans = Columns 1 through 4 2.000 0.761 0.038 -0.394 Column 5 -0.532提示:根的判别式值为正数.ans = Columns 1 through 4 3.000 0.845 0.990 -0.059 Column 5 0.000k = 3piancha = 1.2676e-005xdpiancha = 4.8760e-005xk = -0.059yk =

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论