




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、高等教育岀版社 教育电子音像出版社作者:任玉杰第二章非线性方程(组)的数值解法的MATLAB程序(0卄第二章非拔性方程(组的数值解法本章主要介绍方程根的有关概念,求方程根的步骤,确定根的初始近似值的方法(作图 法.逐步搜索法等人求根的方法(二分法.迭代法.牛顿法,割线法,米勒(MUller)法 和迭代法的加速等)及其MATUB程序,求解非线性方程组的方法及其MATLAB程序2.1方程(组)的根及其MATLAB#令2.1.2求解方程(组)的solve命令求方程心)弓心)的根可以用MATLAB命令:» x=solve(方程f(x)=q(x):特求符号变量x')求方程组仏|KnWi
2、g穴n)(心1.2/I)的根可以用MATLAB命令:»E1=sym( 8f1(x1,.,xn)=q1(x1t.,xn)t);En=symf 方程 fn(x1,,xn)=qn(x1 xn)1); x1 9x2,,xn=solve(E1 .E2,En, x1 f.,xn)2.1.3求解參項武方fi)的roots#令如果/(x)为多项式,则可分别用如下命令求方程/(x) = 0的根,或求导数/ (%)(见 表 2-1).表2-1求解多项式方程(组)的roots命令命令功能xk =roots(fa)输入多项式/(X)的系数為(按降慕排列),运行后输 出欣为/(x) = 0的全部根.dfa=p
3、olyder(fa)输入多项式_/心)的系数為(按降幕排列),运行后输 出dfa为多项式/(x)的导数f(X)的系数.dfx=poly2sym(dfa)输入多项式/(x)的导数/'(X)的系数dfa (按降幕排 列),运行后输出dfx为多项式/(X)的导数/'.2.1.4求解方程(组)的fsolve令如果非线性方程(组)是多项式形式,求这样方程(组)的数值解可以直接调用上面己 经介绍过的roots命令如果非线性方程(组)是含有超越旳数,则无法使用roots命令,需要 调用MATLAB系统中提供的另一个程序fsolve来求解当然,程序fsolve也可以用于多项式方程 (组人但是它
4、的计算量明显比roots命令的大fsolve命令使用最小二乘法(least squares method)解非线性方程(组)F( X ) = 0的数值解,其中X和F(X)可以是向量或矩阵此种方法需要尝试着输入解X的初始值(向 量或矩阵)汕,即使租序屮的迭代序列收敛,也不一定收敛到F( X) = 0的根(见例2.1.8).fsolve MW 用格氏 X=fsolve(F1XO)10.高等教育岀版社 教育电子音像出版社作者:任玉杰第二章非线性方程(组)的数值解法的MATLAB程序辅入的数F(x)旳M文件箔村解X的初始(冋量或矩阵)X。,尝试看解万桂(组*F( X ) = 0,运行后输出F( X )
5、 = 0解的估计值(向量或矩阵)X. 要了解更多的调用格式和功能请输入:help fsolve,査看说明.2.2捜索根的方法及其MATLAB程序求解非线性方程根的近似值时,首先需要判断方程有没有根?如果有根,有几个根?如 果有根,需要搜索根所在的区间或确定根的初始近似值(简称初始值)搜索根的近似位置 的常用方法有三种:作图法、逐步搜索法和二分法等,使用这些方法的前提是髙等数学中的 零点定理.2.2.1作图法及其1ATLAB程序作曲数的图形的方法很多.如用计算机软件的图形功能画图.或用高等数学中应用导数 作图,或用初等数学的函数叠加法作图等下面介绍两种作图程序.作= 在区伺 ua的EB整的HMU
6、B程序一x=a:h:b; % h是步长y=f(x); plot(x.y)grid, gtext(,y=f(x)<)说明:(1)此程序在MATLAB的工作区输入,运行后即可出现函数y = /(x)的图形此图 形与a轴交点的横坐标即为所要求的根的近似值.(2) 区间仏切的两个端点的距离和步长力的绝对值越小,图形越精确.作ais> = /(x)在区冒的图廉的wiAB程序二将y = /(Q化为/7(X)= g(X),其中h(X)和g(X)是两个相等的简单函数 x=a:h:b; y1=h(x);y2=g(x);plot(xf y1t x, y2)grid.gtextf y1=h(x),y2=
7、g(x)i)说明:此程序在MATLAB的工作区输入,运行后即可出现曲数x = h(x)和 弘=£(兀)的 图形两图形交点的横坐标即为所要求的根的近似值.下面举例说明如何用计算机软件MATUB的图形功能作图.2. 2.2逐步投索法及其MTLAB程序逐步搜索法也称试算法它是求方程f(x) = 0根的近似值位置的一种常用的方法.逐 步搜索法依赖于寻找连续函数/(X)满足/(d)与/(b)异号的区间仏“.一旦找到区间,无 论区间多大,通过某种方法总会找到一个根.MATLAB的库函数中没有逐步搜索法的程序,现提供根据逐步搜索法的计算步骤和它的 收敛判定准则编写其主程序.命名为zhubuss.m
8、灣步授索法的HMLAB主程序输入区间竭点"和b的值,步长厶和精度运行后输出迭代次数匕(必)/Ml, 方程f(x) = 0根的近似值八function k.r=zhubuss(a,b.h,tol)%输入的量a和b是闭区间a,b的左、右端点:%-h是步长$%tol是预先给定的精度.%运行后输出的量X是搜索点的个数:%r是方程在a,b上的实根的近似值,其精度是toh X=a:h:b;Y=funs(X);n=(b-a)/h+1 ;m=0;X(n+1)=X(n);Y(n+1)=Y(n);io.高等教育岀版社 教育电子音像出版社作者:任玉杰第二章非线性方程(组)的数值解法的MATLAB程序tor
9、k=2TnX(k)=a+k*h;Y(k)=funs(X(k); % 程序中调用的 funs.m 为丙数 sk=Y(k)*Y(k-1);if skv=O,m=m+1;r(m)=X(k);endxielv=(Y(k+1)-Y(k)*(Y(k)-Y(k-1);if (abs(Y(k)<tol)&( xielv<=0)m=m+1 ;r(m)=X(k);endendW2.2.4用逐步押索法的MATLAB稗序分别求方2x3 + 2x2 -3x-3 = 0和 sin(cos Zv3) = O在区间-2.2上的根的近似值,要求精度是0.000 1.解在MATLAB工作窗口输入如下程序
10、87; k.r=zhubuss(-2t2,0.001,0.0001)运行后输出的结果k=4001r = -1.2240-1.0000-1.0000-0.99901.2250即搜索点的个数为k=4 001,其中有5个是方程(1)的近似根,即r = -1.2240, -1.OOOO, -1.000 0, 4).999 0, 1.225 0,其精度为0.000 1.在程序中将y=2.*x.A3+2.*x.A2-3?x-3用戶sin(cos(2x.A3)代替,可得到方程在区间 -2.2上的根的近似值如下r= -1.9190-1.7640-1.5770-1.3300-0.92200.92301.3310
11、1.57801.76501.9200如果读者分别将方程的结果与例2.2.3比较,方程的结果与例2.1.2比较,将会发现 逐步搜索法的MATLAB程序的优点.如果精度要求比校高,用这种逐步搜索法是不合算的.2.3二分法及其MATLAB程序2.3.1二分法二分法也称逐次分半法它的基本思想是:先确定方程/(.V)= 0含根的区间(必人再 把区间逐次二等分.我们可以根据式(23b).区间仏刃和误差C编写二分法求方程根的迭代次数的MATLAB 命令.-已知闭区间么刃和误差C用二分法求方程误差不大于F的根的迭代次数A的 MATLAB命令k=-1+ceil(log(b-a)- log(abtol)/ log
12、(2) % ceil 是向+8方向取整,abtol是误差2.3.2二分法的MATLAB程序二分法需自行编制程序.现提供用二分法求方程/Xx)=0的根T的近似值耳的步骤和式 (2. 3a)编写一个名为erfen.m的二分法的MMLAB主程序如下.二分法的1ATUB主程序求解方程/(.v) = 0在开区间(山0内的一个根的前提条件是/(x)在闭区间0切上 连续,且 f(a) f(b)<Q.输入的量:"和b是闭区间仏切的左、右端点,必。堤预先给定的精度.运行后输出的量:R是使用二分法的次数是方程在Sb)内的实根F的近似值, 12.高等教育岀版社 教育电子音像出版社作者:任玉杰第二章非
13、线性方程(组)的数值解法的MATLAB程序具稍度是 肋加小皿匸1加“1/2是便用k次二分法所徉到的小区间的长度的一半,即实根工 的近似值x的绝对精度限満足abtol.yfixk),即方程几,)=0在实根T的近似值x 处的函数值.function k.x,wuca,yx=erfen(a.b.abtol)a(1)=a; b(1)=b;ya=fun(a(1); yb=fun(b(1); %8序中调用的fun.m 为曲数if ya* yb>Otdisp(柱意:ya*yb>0,请重新调整区间端点a和b/), return endmax1=-1+ceil(log(b-a)- log(abtol
14、)/ 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;ikabxwuca,ya.yb.yxif yx=0a=x; b=x;elseif yb#yx>0b=x;yb=yx;elsea=x; ya=yx; endif b-a< abtol t return, end endk=max1; x; wuca: yx=fun(x);例2.3.3确定方程上"4=0的实根的分布情况,并用二分法求在开
15、区间(-2,-1)内的 实根的近似值,要求精度为0.001.m “)先用 耐方法确定方程"卄4=<) 的彌的分布况.方滋1作n滋.在MATLAB工作窗口输入如下程序»x=-4:0.1:4;y=x.A3-x +4; plot(x.y) grid,gtext(,y=xA3-x+4,) 画出函数几的图像,如图2-7从图 像可以看出,此曲线有两个驻点士丰都在X 轴的上方,在(-2, -1)内曲线与A轴只有一个 交点,则该方程有唯一一个实根,且在(-2,-1) 内方法2试算法.在MATLAB工作窗口输入程序»x=-4:1:4,y=x.A3-x +4运行后输出结果x=
16、4320y =-56-20244102864由于连续旳数满足/(-2)/(一1) < 0 ,所以此方程在(-2,-1)内有一个实根.(2)主计算.在MATLAB工作窗口输入程序»k,x,wuca,yx=erfen (-2,-1,0.001)运行后屏幕显示用二分法计算过程被列入表2-3,其余结果为高等教育岀版社 教育电子音像出版社作者:任玉杰第二章非线性方程(组)的数值解法的MATLAB程序k = 9, x=-1.7959, wuca = 9.7656e-004, yx = 0.00372.4迭代法及其MATLAB程序确定根的近似位置以后,接下来的工作就是将根精确化,叩按某种方法
17、将初始近似值逐 步精确化,直到满足所要求的精确度为止.上节介绍的二分法是将根精确化的方法之一,但 是它的收敛速度较慢,且不能求出偶觅根迭代法可以克服这种缺陷迭代法是求解方程的 根、线性和非线性方程组的解的基本而重要的方法.2.4.2迭代法的1ATLAB程序迭代法需要自行编制程序.下面提供的迭代法的MATLAB程序1使用时只需输入迭代初始 值忑、迭代次数&、迭代公式和尸卩山)和一条命令,运行后就可以输出求迭代序列忑、 迭代斤次得到的迭代值忑和相邻两次迭代的偏差piancha =|疋-心| (简称和偏 差的相对误差Xdpianchxk-xkA /|可|的值,并且具有警报功能(若迭代序列发散
18、, 则提示用户“请重新输入新的迭代公式”:若迭代序列收敛,则屏皐会出现“祝贺您!此迭 代序列收敛,且收敛速度较快”)我们可以用这个程序来判断迭代序列的敛散性,也可以 用于比较由一个方程得到的几个迭代公式的敛散性的优劣.迭代法的HA71AB程序输入的量:初始值兀“、迭代次数M和迭代公式=(pxk)伙=0,1.2,):运行后输出的量:迭代序列无、迭代A次得到的迭代值无、相邻两次迭代的偏差 piancha =| xk -X4_| |和它的偏差的相对误差xdpiancha=皿一心_|/|心|的值.根据迭代公式(2.4)和已知条件,现提供名为diedaii.rn的M文件如下 function (k,pi
19、arictia,xdpianclia>xk=diedai1(x0,k) %输入的量“xO是初始值.k是迭代次数 x(1)=x0; for i=1:kx(i+1 )=fun1(x(i);%8 序中调用的 fun1 m 为函数 y二 <t> (x)piancha= abs(x(i+1)-x(i); xdpiancha= piancha/( abs(x(i+1)+eps);i=i+1 ;xk=x(i);(i-1) piancha xdpianchaxk endif (piancha >1 )&(xdpiancha>0.5)&(k>3)dis&quo
20、t;请用户注意:此迭代序列发散,请重新输入新的迭代公式) return;endif (piancha < 0.001)&(xdpiancha< 0.0000005)&(k>3) dispC祝贺您!此迭代序列收敛,且收敛速度较快) return;endp=(i-1) piancha xdpiancha xk:W2.4.1求方程/U) = x2+2x-1O的一个正根.M 在MATLAB工作窗口输入程序» k,piancha,xdpiancha,xk= diedai1(2,5)运行后输出用迭代公式芒+1 =(10-x;)/2的结果lK,piancha,xd
21、pianchatxKj=1.00000000000000 1.00000000000000 2.00000000000000 2.50000000000000 3.00000000000000 4.37500000000000 4.00000000000000 11.757812500000000.333333333333335.000000000000000.897435897435901.708286038592513.000000000000000.500000000000004.87500000000000 -6.882812500000005.00000000000000 11.80
22、3741455078130.63167031671297 1868655395507813请用户注意:此迭代序列发散.请重新输入新的迭代公式k=5. plancha= 11.80374145507813, xdpiancha = 0.63167031671297, xk =-18.68655395507813由以上运行后输出的迭代序列与根/=2.316 624 790 355 40相差越來越大,即迭代序列xk发散.此迭代法就失败这时偏差piancha逐渐增大且偏差的相对误差xdpiancha的 值大于0. 5.用迭代公式心+1 =10/(心+2)运行后输出的结果k,pia ncha,xdpia
23、 ncha,xk=1.000000000000002.000000000000003.000000000000004.000000000000005.000000000000000.500000000000000.277777777777780.146198830409360.079264426125550.042304047651280.200000000000000.125000000000000.061728395061730.034626038781160.018144868631152.500000000000002.222222222222222.368421052631582.2
24、89156626506022.3314606741573014.高等教育岀版社 教育电子音像出版社作者:任玉杰第二章非线性方程(组)的数值解法的MATLAB程序k s5.piancha -0.04230404765128,xdpiancha - 0.01814486863115. Xk-2.33146067415730可见,偏差piancha和偏差的偏差的相对误差xdpiancha的值逐渐变小,且第5次的迭 代值A =2.331 460 674 157 30与根/=2. 316 624 790 355 40接近,则迭代序列忑收 敛,但收敛速度较慢.此迭代法较为成功.用迭代公式*+ = Xf.
25、(X/. ° + 2耳10)/( 2a* ji + 2)运行后输出的结果k,pia ncha,xdpiancha,xk=1.000000000000002.000000000000003.000000000000004.000000000000005.000000000000000.333333333333330.016666666666670.000041876046900.0000000002643700.142857142857140.007194244604320.000018076318220.000000000114122.333333333333332.31666666
26、6666672.316624790619772.3166247903554002.31662479035540祝贺您!此迭代序列收敛.且收敛速度较快X 5; piancha 0; xdpiancha 0; y 2.31662479035540.可见,偏差piancha和偏差的相对误差xdpiancha的值越來越小,且第5次的迭代值 11=2.316 624 790 355 40与根=2316 624 790 355 40相差无几 则迭代序列忑收敛,且 收敛速度很快,此迭代法成功.24.5迭代法的1ATLAB程序2迭代雉的MA7UBM2输入的量:初初始值兀、精度巾,和和迭代公式x如=(pxk)伙
27、=0丄2,): 运行后输出的量:迭代次数R,满足精度£刃的艰的近似根忑的迭代序列无,相 邻两次迭代的偏差pianch- xk - xk_ |和它的偏差的相对误差xdpiancha =族一也_1|/皿|的值, y*= 0(总).根据迭代公式(2.4)和已知条件,现提供名为diedai2.m的M文件如下function k.piancha.xdpiancha.xkyk=diedai2(x0olddmax) x(1)=x0;for i=1: ddmaxx(i+1 )=fun(x(i) ;piancha=abs( x(i+1 )x(i”; xdpiancha=piancha/( abs(x(
28、i+1 )+eps);i=i+1; xk=x(i);yk=fun(x(i); (i-1) piancha xdpiancha xk yk if (piancha<tol)|(xdpianchav tol)k=i-1; xk=x(i);15.高等教育岀版社 教育电子音像出版社作者:任玉杰第二章非线性方程(组)的数值解法的MATLAB程序return; end endif i>ddmaxdisp('迭代次数超过给定的最大值ddmax) return;endP=(i-1)tpia ncha,xdpia ncha,xk,yk;A2.4.5求巴3丫+1=0在0.3附近的根,精确到4位
29、小数.U构代公5 =(P(xk).改写原方程为等价方程x = (2 +1)/3.这时朋)=(P+l)/3,初始值为Xo=O.5.迭代公 式Xjt+i = (.xk +1)/3 (A = 0,1,2,).(2书用迭代法的BATUi躍序2计算1*确*小的根的近似值j利迭代次撤.在MATLAB工作窗口输入程序» k,piancha,xdpiancha,xk,yk=diedai2(0.3t1e-4,100)运行后输出的结果k,pia ncha,xdpia ncha,xk,yk=00.034140.102180.300000.3341410.034140.102180.334140.33472
30、20.000580.001730.334720.3347330.000010.000040.334730.33473k =3;piancha =1.206089525390697e-005; xdpiancha =3.603129477781680e-005;xk =0.3347; yk =0.33472.5迭代过程的加速方法及其MATLAB程序对于收敛的迭代过甩只要迭代足够多次.就可以便结果达到任童的精度.但有时迭代 过程收敛缓慢,从而使计算量变得很大,因此,迭代过程的加速是个重要的问题.2.5.2加权送代法的MATLAB程序加权迭代法的1MLAB主稳序已知初始值兀、精度£刃和迭代
31、公式心"g,求满足精度£刃的根的近似根无和 它的函数值yk及迭代次数匕根据加权迭代的公式(2.10)和己知条件,现提供名为jasudd.m的M文件如下:_function k,xk,yk=jasudd (xO.tol丄,ddmax)x1(1)=x0;for i=1: ddmaxx(i+1)=fun(x1(i);x1(i+1 )= x(i+1 )+L( x(i+1)- x1(i)/(1 丄);piancha=abs(x1(i+1 )-x1 (i);xdpiancha= piancha/( abs(x1(i+1)+eps);i=i+1 ;xk=x1 (i);yk=fun(x1
32、(i) ;(i-1) xk ykif (piancha<tol)|(xdpianchav tol)k=i-1; xk=x1(i);return;endendif i>ddmax高等教育岀版社 教育电子音像出版社作者:任玉杰第二章非线性方程(组)的数值解法的MATLAB程序dispel代次钗趙过给定/maxreturn; endP=(i-1).xk,ykr;fl2.5.1用(2.10)式求2e-x-x = O在0.85阻近的一个近似根,要求精度£=10-6. 解在MATLAB I作窗口输入程序» k,xk,yk=jasudd (0.85,1 e-6,-0.855,
33、100)运行后输出结果Fk xk vk 1 f000000000000002.000000000000003.000000000000000.852603700280410.852605499754910.852605502076990.852607038305610.852605504062360.8526055020825516.高等教育岀版社 教育电子音像出版社作者:任玉杰第二章非线性方程(组)的数值解法的MATLAB程序k =3; xk =0.852G0G: yk = 0.852G0G.2.5.4 艾(Aitken) JU 速方法的 MATLAB 程序艾特肯加速方法的MMLAB程序已知
34、初始值也、精度£刃和迭代公式XhF(P g,求满足精度£刃的根的近似根母和 它的函数值 *及迭代次数民 k J xl J x2 J x1 根据艾祁肯加速方法的公式(2.11)和已知条件,现提供名为Aitken.m的M文件如下: function k,xk,yk,p= Aitken (xO,tol, ddmax) x(1)=x0;for i=1: ddmaxx1 (i+1 )=fun(x(i); x2(i+1 )=fun(x1 (i+1);x(i+1 )=x2(i+1 )-(x2(i+1 )-x1 (i+1 )A2/(x2(k1)-2*x1 (i+1)+ x(i); pian
35、cha=abs(x(i+1)-x(i);xdpiancha= piancha/( abs(x(i+1)+eps); i=i+1; xkn<(i);yk=fun(x(i);if (pianchavtol)|(xdpianchavtol) k=i-1; xk=x1(i); return;endend if i>ddmax dispC迭代次数超过给定的垠大值ddmax) return;endm=0,1:i-1; p=mx1x2x*;fl 2.S.3用艾特肯加速方法求2e-x-x = 0在0.85附近的一个近似根,要求精度 £=10-6.M在MATLAB工作窗口输入程序»
36、; k,xk,yk,p= Aitken(0.85Je-6, 100)运行后输出结果k=3. xk=0.85260550201343. yk=0.85260550201373p =01.000000000000002.000000000000003.0000000000000000.85482986389745 0.85260436491811 0.8526055020134300.850711106524840.852606471508260.852605502013980.850000000000000.852606835686070.852605502014070.852605502013
37、73#.高等教育岀版社 教育电子音像出版社作者:任玉杰第二章非线性方程(组)的数值解法的MATLAB程序#.高等教育岀版社 教育电子音像出版社作者:任玉杰第二章非线性方程(组)的数值解法的MATLAB程序2.6牛(Newton)切拔法及其MATLAB程序#.高等教育岀版社 教育电子音像岀版社作者:任玉杰第二章非线性方程(组)的数值解法的MATLAB程序判别牛顿切找法的局部收敘性的mTLAB主程序根据牛顿切线法局部收敛的条件0(,) =£)(计vl.【m)r输入的昼X是方程f(x) =: 0根T或满足|x0*| «1的初始值x0,函数/(x)及 其一阶导数fx)和二阶导数广&
38、#39;(x):输出的呈:0(,)或|0(舟)|的值.如果0(f) V 1或|0(心)| V1时,运行后输出信息, 恭喜您!此迭代序列收飲,巾(x)的导数值的绝对值y=ld<b (x) /dx I和方程f (x) =0的函 数f(x)值f如下X否则,运行后输出信息"肓注意观察下而显示的<»> (x)的导数值的绝 对值y=|d<t> (x)/dxl和方程f (x)=0的函数f (x)值-根据牛顿切线法局部收敛的条件和方程/(-V)= 0的函数/(X)及其一、二阶导数,现提 供程序:function y,f=newjushou(x)f=fnq(x)
39、; fz=fnq(x)*ddfnq(x)/(dfnq(x)A2+eps);y 二abs(fz);it(y<1)dis"恭喜您!此迭代序列收敛2 (x)导数值的绝对值y=|d 4)(x)/dx|和方程 f(x)=0的函数f(x)值f如下)elsedisp(请注意观察下面显示的e (x)的导数值的绝对值y=|dd (x)/dx|和方程 f(x)=0的函数f(x)值)endP=y.f*;fi 2.6.2用牛顿切线法的局部收敛性判别方程exsin ,v = 4的近似根时,由下列初 始值必产生的迭代序列是否收敛?(l)x0 =1; (2)x0 = 0; Ox。= 1; (4)x0 = 2
40、; (5) x0 = 5.5 : (6)x0 = 8 解在MATLAB工作窗口输入程序>> y,f=newjushou(-1)运行后输出结果请注意观察下面显示的4>(x)的导数值的绝对值y|de(x)/dx|和方程f(x)-0的函数f(x)值y -139.5644f =4 3096说朗:实际上,这个初始值所产生的迭代序列心发散,见例2. 6. 6.(2) 输入程序» ytf=newjushou(0)运行后输出结果请注意观察下面显示的4>(x)的导数值的绝对值y=|d血(x)/dx|和方程f(x)=O的函数f(x)值y =8.0000 f =4说明:实际上,这个
41、初始值所产生的迭代序列耳收敛到方程的根2. 925 32,而不是 收敛到离它最近的根1.400 81,即不是局部收敛的,见例2. 6. 6.(3) 输入程序» (ytf=newjushou(1)高等教育岀版社 教育电子音像出版社作者:任玉杰第二章非线性方程(组)的数值解法的MATLAB程序运仃后辐出结果恭喜您!此迭代序列收敛.4>(x)导数值的绝对值y-|d <t> (x)/dx|和方程f(x)-0的函数f(x)值f如下 y-0.3566 1.7126说明*实际上,这个初始值所产生的迭代序列心收敛到离它最近的根1.400 81,即忑是局部收敛的,见例2. 6.6.(
42、4)输入程序:» y,f=newjushou运行后输出结果请注意观察下面显示的4> (x)的导数值的绝对值y=|de (x)/dx|和方程f(x)=0的函数f(x)值y=r.-2.7188说明*虽然y=1.259 3>1>不满足牛顿切线法局部收敛的条件0(,) <1 但是,实 际上,这个初始值所产生的迭代序列心收敛到离它最近的根1.400 81,即心是局部收 敛的这说明|0(乜)|<1是充分条件,非必要条件(见例2. 6. 6).(5)输入程序» y,f=newjushou(5.5)运行后输出结果请注意观察下面显示的4> (x)的导数值的
43、绝对值y=|d0 (x)/dx|和方程f(x)=O的函数f(x)值y-1.0447e+005f.176.6400说明*实际上,这个初始值所产生的迭代序列母收敛到235. 619,但不是此方程的根, 比较初始值5.5与迭代值235.619,可见忑不是局部收敛的,见例2. 6. 6.(6)输入程序» y,f-newjushou运行后输出结果恭喜您!此迭代洋列收敛.4> (x)导数值的绝对值y-|d<t>(x)/dx|fn方程f(x)-0的函数f(x)值f如下y 0.4038f s2.9452e+003实际上,这个初始值所产生的迭代序列.耳收敛到方程的根6. 290 60
44、,而不是 收敛到离它最近的根9424 46,即不是局部收敛的,见例2. 6. 6.2.6.3牛顿切找法的MATLAB程序牛顿切线法求方程/(x) = 0的近似根心(精度为巾厂需要自行编制程序. 牛切的MATLAB主M输入的量:初始值儿、近似根心的误差限to2,近似根心的函数值/(心)的误差限 ftol,迭代次数的最大值少/oar、函数fnq(x) = /(X)及其导数dfnqg = fx).输岀的量:迭代序列忑、迭代斤次得到的迭代值耳(迭代次数超过砂才时,运 行后输出信息'请注意:迭代次数超过给定的最大值gxmax')、相邻两次迭代的偏差piancha =xk - Xx.!和它
45、的偏差的相对误差加fMcZb |.Vjt -Xk-l/Xk的值根抵式(2.12)村已知条件,现强供笛为newtonqx.m旳M文件: function k,xk,yk.piancha,xdpiancha二newtonqx(x0.tol,ftohgxmax) x(1)=x0;for i=1: gxmaxx(i+1 )=x(i)-fnq(x(i)/(dfnq(x(i)+eps); piancha=abs(x(i+1 )x(i); xdpiancha二 piancha/( abs(x(i+1)+epsi; i=i+1;xk=x(i);yk=fnq(x(i); (i-1) xk yk piancha
46、xdpiancha if (abs(yk)<ftol)&(piancha<tol)|(xdpiancha< tol) k=i-1;xk=x(i);(i-1) xk yk piancha xdpianchareturn;endendif i>gxmaxdisp('请注意:迭代次数超过给定的最人值gxmax. ) return;end(i-1),xk.yk,pia ncha,xdpia ncha:M 2.6.3用牛顿切线法求方程2x3-3x2+1=0在 =-04和0.9的近似根,要求精 度£=10-3.然后判断此方法分别在方程的根x* = -0.5
47、利处的收敛速度.m co先求方程的近住權.在MATLAB工作窗口输入程序» k,xk.yk,piancha,xdpiancha=newtonqx(-0.4t0.001 f 0.001,100)kXk|斗-耳-1|/|心|1-0. 516 7-0.076 70.116 70. 225 82-0 500 4-0.001 60.016 30. 032 63-0. 500 0-0. 000 00.000 40. 000 7表 2-10运行后输出初始值x0 = -0.4的迭代结果如表210所示.迭代次数k = 3根的近似值 m =0.500.它的函数值 * =l759e4)13偏差pianch
48、a = 1.712c-007 和相对误差 xdpiancha =3.423e-007.如果将步骤命令中的-0.4改作0.9,则运行后输出初始值X。=-0.4的迭代结果为 k =7: pianclia =7.290e-004: xdpiancha =7.295e-004: xk = 0.999: vk =1.590e-006.比较初始值分别是x0 = -0.4和0.9的两组结果,在x0 = -0.4处迭代3次就得到单根 / =-0.5的近似值恐=-0.500:而在必=0.9处迭代7次才得到二重根=1的近似值 .*=0.999.可见,牛顿切线迭代法在单根处的迭代速度比二匝根处的迭代速度快很多这正如
49、前 面讨论的结果一样,即若T是/(.V)= 0的单根,则牛顿切线法是平方收敛的:若/是 f(x) = 0的二重根,则牛顿切线法是线性收敛的:我们也可以用阶的定义判断它们的收敛速 度留给读者证明.2.6.4求転的方法及其1ATLAB程序用c的”次根呢的迭代公式求呢的近似值耳(精度为tol)需要自行编制程序. 求C的次根逐(当吋,cu)的主程序输入的量:初始值兀、根指数、被开方数C、呢的误差限2丄,迭代次数的最大值 gxmax.输出的量:迭代序列©、迭代斤次得到的迭代值耳(迭代次数达到最大值0加* 时,运行后输出信息请注意:迭代次数超过给定的最大值gT')、相邻两次迭代的偏差 p
50、iancha =| xk -和它的偏差的相对误差xdpiancha= |耳一耳一1 |/山|的值根据求f的次根 诙的迭代公式(225)和已知条件,现提供名为kai2fang.m的M文件:function k,xk,yk,piancha,xdpiancha,P二kainfang(xO,c,n,tol, gxmax) x(1)=x0;for i=1: gxmaxu(i)= (x(i)An-c)/(n*x(i)A(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 11; xk
51、=x(i);yk=fnq(x(i);(i-1 )txk.yk.piancha.xdpianchaif (piancha<tol)|(xdpianchav tol)k=i-1 ;xk=x(i); return;endendif i>gxmaxdispC请注意:迭代次数超过给定的最大值gxmax?)(i-1 ),xk.yk.pia ncha.xdpiancha return;endP=(i-1 )fxk,yk,piancha,xdpia ncha:fl2.6.5求了,要求精度为IO-6.M本题介绍四种解法.方廉、用求(的次權坂c>0) KMATUBWFit*.取初始值x0 =10
52、,根指数n = 2,被开方数6 = 113,近似根的精度to/=10-5,迭代 的最大次数少*100.在工作区间输入程序» k>xk,yk,piancha,xdpianchaJ=kainfang(10,113,2J e-5,100)运行后输出结果k=4,piancha=1.610800381968147e011,xdpiancha=1.515313534117706e-012xk =10.63014581273465,yk =1.710910332060509e+009可见,VfT3«10.630 15,满足梢度 10-5.方滋2用牛送代公氏(2. 计期设77 = 1
53、13,则113 = 0,记 f(x) = x2-H3t f'(x) = 2x.由牛顿迭代公式得,即心+1 =穆(心+>2Xi.取初始值x0 = 10,计算结果列入表2-12.因为,迭代次数R =4时,偏差 |%4-| <10-8,满足精度10,所以,VH3 » 10. 630 15.方法3用牛切拔法的IMTLAB主程序计迭代次数R偏差卜知1 忑根的近似值10.650 00010. 650 00020.019 83610. 630 16430.000 01910. 630 14640.000 00010. 630 146表 2-1222.高等教育岀版社 教育电子音像
54、出版社作者:任玉杰第二章非线性方程(组)的数值解法的MATLAB程序分别建立名为fnq.m和dfnq.m的M文件 function y二fnq(x)#.高等教育岀版社 教育电子音像出版社作者:任玉杰第二章非线性方程(组)的数值解法的MATLAB程序y=xWH3;function y=dfnq(x)y=2*X;在MATLAB工作窗口输入理序>> k,xktykfpianchatxdpiancha=newtonqx(10t 1e-5f 1e-5f100)运行后,将输出的结果列入下表2-13.迭代k=4次,得到精度为1(T的结果 10.630 15.表 2-13kpianchaxdpia
55、nchaXk10. 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 00010.630 1460. 000 0(X)方法4在MATLAB工作空间输入程序» 113A(1/2)运行后输出ans = 10.63014581273465经过四舍五入后,得到精度为1(T的结果VU3- 10.630 15.2.6.6牛顿切&法的加速及其两种MATLAB程序当T是方程f(x) = 0的山(m > 2)重根时.由牛顿切线公式(2.12)产生的迭代序 列*收敛到/的速度较慢,是线性收敛的.我们要提奇收敛速度,可以有选择地采用已 知根的重数和未知根的重数两种求重根的修正牛顿切线公式.(_) 方却的敷川已知方程/(*) - 0的求椒的修正牛叭拔法的MAILAB主程序输入的量:初始值方程/M = 0根T的重数加,近似根心的误差限to2,近似 根
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 幼儿教育学 幼儿教育概述课件
- 打造幼教服务产业链园区生态圈
- 2024-2025学年下学期高二生物人教版期末必刷常考题之生态系统的物质循环
- 部编版二年级下册第七单元《大象的耳朵》教案
- 8 4 抛物线-2026版53高考数学总复习A版精炼
- 2025届河北省唐山市高三二模语文试题(解析版)
- 2024-2025学年四川省雅安市高三第一次诊断性考试语文试题(解析版)
- 2024-2025学年山东省威海市文登区高三第一次模拟语文试题(解析版)
- it项目应急预案
- 信访问题回复函
- 道路保洁台账管理制度
- 全国卫生健康系统职业技能竞赛(预防接种项目)备考试题库-上(单选题部分)
- 模切安全生产培训
- 2025-2030中国互联网行业市场前景趋势及竞争格局与投资研究报告
- 扶贫资产入股协议书
- 安宁疗护之疼痛管理
- DBJ51T-041-2015-四川省-建筑节能门窗应用技术规程
- 中国中铁股份有限公司内部控制运行管理办法试行
- 酒后违纪违法警示教育
- 四川省 2025届高考历史全真模拟试题(含解析)
- 华一光谷2024-2025学年度9月七年级英语试题(含答案)
评论
0/150
提交评论