logo资料库

用matlab求解非线性方程组的几种方法之程序.pdf

第1页 / 共23页
第2页 / 共23页
第3页 / 共23页
第4页 / 共23页
第5页 / 共23页
第6页 / 共23页
第7页 / 共23页
第8页 / 共23页
资料共23页,剩余部分请下载后查看
高等教育出版社 教育电子音像出版社 作者:任玉杰 第二章 非线性方程(组)的数值解法的 MATLAB 程序 的数值解法 非线性方程((((组组组组))))的数值解法 第二章第二章第二章第二章 非线性方程 非线性方程 非线性方程 的数值解法 的数值解法 本章主要介绍方程根的有关概念,求方程根的步骤,确定根的初始近似值的方法(作图 法,逐步搜索法等),求根的方法(二分法,迭代法,牛顿法,割线法,米勒(Müller)法 和迭代法的加速等)及其 MATLAB 程序,求解非线性方程组的方法及其 MATLAB 程序. 2.1 方程方程方程方程((((组组组组))))的根及其的根及其的根及其的根及其 MATLAB 2.1 MATLAB 命令命令命令命令 MATLAB 2.1 2.1 MATLAB 求解方程((((组组组组))))的的的的 solve 命令命令命令命令 2.1.2 求解方程 2.1.2 求解方程求解方程 2.1.2 2.1.2 求方程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.3 求解求解求解求解多项式多项式多项式多项式方程方程方程方程((((组组组组))))的的的的roots命令命令命令命令 2.1.3 2.1.3 2.1.3 如果 )(xf 为多项式,则可分别用如下命令求方程 =xf )( 0 的根,或求导数 f )(' x (见 表 2-1). 表 2-1 求解多项式方程(组)的 roots 命令 命 令 功 能 xk =roots(fa) dfa=polyder(fa) dfx=poly2sym(dfa) 输入多项式 )(xf 的系数 fa(按降幂排列),运行后输 出 xk 为 =xf )( 0 的全部根. 输入多项式 )(xf 的系数 fa(按降幂排列),运行后输 出 dfa 为多项式 )(xf 的导数 f 输入多项式 )(xf 的导数 f )(' x )(' x 的系数. 的系数 dfa(按降幂排 列),运行后输出 dfx 为多项式 )(xf 的导数 )(' x f . 求解方程((((组组组组))))的的的的fsolve命令命令命令命令 2.1.4 求解方程 2.1.4 求解方程求解方程 2.1.4 2.1.4 如果非线性方程(组)是多项式形式,求这样方程(组)的数值解可以直接调用上面已 经介绍过的roots命令.如果非线性方程(组)是含有超越函数,则无法使用roots命令,需要 调用MATLAB系统中提供的另一个程序fsolve来求解.当然,程序fsolve也可以用于多项式方程 (组),但是它的计算量明显比roots命令的大. fsolve命令使用最小二乘法(least squares method)解非线性方程(组) (F X =) 0 的数值解,其中 X 和 F(X)可以是向量或矩阵.此种方法需要尝试着输入解 X 的初始值(向 量或矩阵)X0,即使程序中的迭代序列收敛,也不一定收敛到 (F X =) 0 的根(见例 2.1.8). fsolve 的调用格式 的调用格式: X=fsolve(F,X0) 的调用格式 的调用格式 9.
高等教育出版社 教育电子音像出版社 作者:任玉杰 第二章 非线性方程(组)的数值解法的 MATLAB 程序 输入函数 )(xF 的M文件名和解X的初始值(向量或矩阵)X0,尝试着解方程(组) (F X =) 0 ,运行后输出 (F X =) 0 解的估计值(向量或矩阵)X. 要了解更多的调用格式和功能请输入:help fsolve,查看说明. 搜索根的方法及其 MATLAB 2.2 2.2 2.2 2.2 搜索根的方法及其 MATLAB 程序程序程序程序 MATLAB 搜索根的方法及其 搜索根的方法及其 MATLAB 求解非线性方程根的近似值时,首先需要判断方程有没有根?如果有根,有几个根?如 果有根,需要搜索根所在的区间或确定根的初始近似值(简称初始值).搜索根的近似位置 的常用方法有三种:作图法、逐步搜索法和二分法等,使用这些方法的前提是高等数学中的 零点定理. 作图法及其 MATLAB 2.2.1 作图法及其 2.2.1 MATLAB 程序程序程序程序 MATLAB 作图法及其 2.2.1 2.2.1 作图法及其 MATLAB 作函数的图形的方法很多,如用计算机软件的图形功能画图,或用高等数学中应用导数 作图,或用初等数学的函数叠加法作图等.下面介绍两种作图程序. 作函数作函数作函数作函数 y ==== ( xf ) 的图形的 MATLAB 在区间在区间在区间在区间 [[[[a,ba,ba,ba,b] ] ] ] 的图形的 MATLAB 程序一程序一程序一程序一 MATLAB 的图形的的图形的 MATLAB x=a:h:b; % h是步长 y=f(x); plot(x,y) grid, gtext('y=f(x)') 说明:⑴ 此程序在 MATLAB 的工作区输入,运行后即可出现函数 形与 x 轴交点的横坐标即为所要求的根的近似值. y = )(xf 的图形.此图 将 ( xf ) 化为 y ==== )(xf ⑵ 区间[a,b] 的两个端点的距离 b-a 和步长 h 的绝对值越小,图形越精确. 作函数作函数作函数作函数 y = x=a:h:b; y1=h(x); y2=g(x); plot(x, y1, x, y2) grid,gtext(' y1=h(x),y2=g(x)') 在区间在区间在区间在区间 [[[[a,ba,ba,ba,b]]]]上的图形的 上的图形的 MATLAB MATLAB 程序二程序二程序二程序二 MATLAB 上的图形的 上的图形的 MATLAB )( )( )( xh 和 xg xh 是两个相等的简单函数 ,其中 = )( xg 说明:此程序在 MATLAB 的工作区输入,运行后即可出现函数 y 1 图形.两图形交点的横坐标即为所要求的根的近似值. 下面举例说明如何用计算机软件MATLAB的图形功能作图. = )( xh 和 y 2 = )( xg 的 2.2.2 逐步搜索法及其及其及其及其 MATLAB 2.2.2 逐步搜索法 MATLAB 程序程序程序程序 MATLAB 逐步搜索法 2.2.2 2.2.2 逐步搜索法 MATLAB 逐步搜索法也称试算法.它是求方程 =xf )( 0 根的近似值位置的一种常用的方法. 逐 步搜索法依赖于寻找连续函数 )(xf 满足 )(af 与 )(bf 异号的区间 论区间多大,通过某种方法总会找到一个根. ],[ ba .一旦找到区间,无 MATLAB 的库函数中没有逐步搜索法的程序,现提供根据逐步搜索法的计算步骤和它的 收敛判定准则编写其主程序,命名为 zhubuss.m. 方程 0 根的近似值 r. 逐步搜索法的 逐步搜索法的 MATLAB MATLAB 主程序主程序主程序主程序 MATLAB 逐步搜索法的 逐步搜索法的 MATLAB 输入区间端点 a 和 b 的值,步长 h 和精度 tol,运行后输出迭代次数 k=(b-a)/h+1, =xf )( 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); 10.
高等教育出版社 教育电子音像出版社 作者:任玉杰 第二章 非线性方程(组)的数值解法的 MATLAB 程序 for k=2: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))> [k,r]=zhubuss(-2,2,0.001,0.0001) 运行后输出的结果 k =4001 r = -1.2240 -1.0000 -1.0000 -0.9990 1.2250 即搜索点的个数为k =4 001,其中有5个是方程⑴的近似根,即r = -1.224 0,-1.000 0,-1.000 0,-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)) 代替,可得到方程⑵在区间 ]2,2[- 上的根的近似值如下 r = -1.9190 -1.7640 -1.5770 -1.3300 -0.9220 0.9230 1.3310 1.5780 1.7650 1.9200 如果读者分别将方程⑴的结果与例2.2.3比较,方程⑵的结果与例2.1.2比较,将会发现 逐步搜索法的MATLAB程序的优点.如果精度要求比较高,用这种逐步搜索法是不合算的. 二分法及其 MATLAB 2.3 二分法及其 2.3 MATLAB 程序程序程序程序 MATLAB 二分法及其 2.3 2.3 二分法及其 MATLAB 2.3.1 二分法二分法二分法二分法 2.3.1 2.3.1 2.3.1 逐次分半法.它的基本思想是:先确定方程 二分法也称逐次分半法 逐次分半法 逐次分半法 =xf )( 0 含根的区间(a,b),再 把区间逐次二等分. 我们可以根据式(2.3b)、区间[a,b]和误差e ,编写二分法求方程根的迭代次数的 MATLAB 命令. 已知闭区间 [a,b]和误差 e .用二分法求方程误差不大于 e 的根的迭代次数 k 的 MATLAB 命令 e . k=-1+ceil((log(b-a)- log(abtol))/ log(2)) % ceil 是向+ ¥ 方向取整,abtol 是误差 2.3.2 二分法的 MATLAB 2.3.2 二分法的 MATLAB 程序程序程序程序 MATLAB 二分法的二分法的 2.3.2 2.3.2 MATLAB 二分法需自行编制程序,现提供用二分法求方程 f(x)=0 的根 *x 的近似值 kx 的步骤和式 (2.3a)编写一个名为 erfen.m 的二分法的 MATLAB 主程序如下. 二分法的 MATLAB 二分法的 MATLAB 主程序主程序主程序主程序 MATLAB 二分法的二分法的 MATLAB =xf )( 0)( bf 求解方程 )( af 0 < . 连续,且 在开区间(a,b)内的一个根的前提条件是 )(xf 在闭区间[a,b]上 输入的量:a和b是闭区间[a,b]的左、右端点,abtol是预先给定的精度. 运行后输出的量:k 是使用二分法的次数.x 是方程 在(a,b)内的实根 x*的近似值, 11. - -
高等教育出版社 教育电子音像出版社 作者:任玉杰 第二章 非线性方程(组)的数值解法的 MATLAB 程序 其精度是 abtol.wuca=|bk-ak|/2 是使用 k 次二分法所得到的小区间的长度的一半,即实根 x* 的近似值 x 的绝对精度限,满足 wuca≤ abtol.yx=f(xk) ,即方程 f(x)=0 在实根 x*的近似值 x 处的函数值. function [k,x,wuca,yx]=erfen(a,b,abtol) a(1)=a; b(1)=b; ya=fun(a(1)); yb=fun(b(1)); %程序中调用的fun.m 为函数 if ya* yb>0, disp('注意:ya*yb>0,请重新调整区间端点a和b.'), return end max1=-1+ceil((log(b-a)- log(abtol))/ log(2)); % ceil是向 ¥+ 方向取整 for k=1: max1+1 a;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,yx] if yx==0 a=x; b=x; elseif yb*yx>0 b=x;yb=yx; else end a=x; ya=yx; if b-a< abtol , return, end end k=max1; x; wuca; yx=fun(x); 2.3.3 3 3 3 确定方程 x3-x+4=0 的实根的分布情况,并用二分法求在开区间 (-2,-1)内的 例例例例 2.3. 2.3.2.3. 实根的近似值,要求精度为 0.001. 先用两种方法确定方程 x3-x+4=0 解解解解 ((((1111))))先用两种方法确定方程 先用两种方法确定方程 先用两种方法确定方程 的实根的分布情况。。。。 的实根的分布情况 的实根的分布情况 的实根的分布情况 方法方法方法方法 1111 作图法作图法作图法作图法.... 在 MATLAB 工作窗口输入如下程序 >>x=-4:0.1:4; y=x.^3-x +4; plot(x,y) grid,gtext('y=x^3-x+4') 画出函数 f(x)=x3-x+4 的图像,如图 2-7.从图 像可以看出,此曲线有两个驻点 3 3 都在 x 轴的上方,在(-2,-1)内曲线与 x 轴只有一个 交点,则该方程有唯一一个实根,且在 (-2,-1) 内. 方法方法方法方法 2222 试算法试算法试算法试算法.... 在 MATLAB 工作窗口输入程序 >>x=-4: 1:4,y=x.^3-x +4 运行后输出结果 图 2-7 x = -4 -3 -2 -1 0 1 2 3 4 y = -56 -20 -2 4 4 4 10 28 64 ,所以此方程在(-2,-1)内有一个实根. 由于连续函数 f(x)满足 f < )1( ((((2222)))) 用二分法的主程序计算 用二分法的主程序计算.... 用二分法的主程序计算 用二分法的主程序计算 在 MATLAB 工作窗口输入程序 )2( f 0 >> [k,x,wuca,yx]=erfen (-2,-1,0.001) 运行后屏幕显示用二分法计算过程被列入表 2-3,其余结果为 12. – - -
高等教育出版社 教育电子音像出版社 作者:任玉杰 第二章 非线性方程(组)的数值解法的 MATLAB 程序 k = 9,x=-1.7959, wuca = 9.7656e-004,yx = 0.0037 迭代法及其 MATLAB 2.4 迭代法及其 2.4 MATLAB 程序程序程序程序 MATLAB 迭代法及其 2.4 2.4 迭代法及其 MATLAB 确定根的近似位置以后,接下来的工作就是将根精确化,即按某种方法将初始近似值逐 步精确化,直到满足所要求的精确度为止. 上节介绍的二分法是将根精确化的方法之一,但 是它的收敛速度较慢,且不能求出偶重根.迭代法可以克服这种缺陷.迭代法是求解方程的 根、线性和非线性方程组的解的基本而重要的方法. 2.4.2 迭代法的 MATLAB 2.4.2 迭代法的 MATLAB 程序程序程序程序 1111 MATLAB 迭代法的迭代法的 2.4.2 2.4.2 MATLAB 迭代法需要自行编制程序.下面提供的迭代法的 MATLAB 程序 1 使用时只需输入迭代初始 值 0x 、迭代次数 k、迭代公式 xk+1=j (xk)和一条命令,运行后就可以输出求迭代序列 }{ kx 、 迭代 k 次得到的迭代值 kx 和相邻两次迭代的偏差 piancha =| | (简称偏差偏差偏差偏差)和偏 kx 的值,并且具有警报功能(若迭代序列发散, 差的相对误差 xdpiancha=| 则提示用户“请重新输入新的迭代公式”;若迭代序列收敛,则屏幕会出现“祝贺您!此迭 代序列收敛,且收敛速度较快”).我们可以用这个程序来判断迭代序列的敛散性,也可以 用于比较由一个方程得到的几个迭代公式的敛散性的优劣. 1- 1- x x x k x k | k k 迭代法的 MATLAB 迭代法的 MATLAB 程序程序程序程序 1 1 1 1 MATLAB 迭代法的迭代法的 MATLAB 输入的量:初始值 0x 、迭代次数 k 和迭代公式 =+ 1 x k j ( x k ) = ( k ,2,1,0 ) L ; 运行后输出的量:迭代序列 }{ kx 、迭代 k 次得到的迭代值 kx 、相邻两次迭代的偏差 piancha =| x k x 1- k |和它的偏差的相对误差 xdpiancha= x k x 1- k x k 的值. 根据迭代公式(2.4)和已知条件,现提供名为diedai1.m的M文件如下 function [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)); xdpiancha= piancha/( abs(x(i+1))+eps); i=i+1;xk=x(i);[(i-1) piancha xdpiancha xk] end if (piancha >1)&(xdpiancha>0.5)&(k>3) disp('请用户注意:此迭代序列发散,请重新输入新的迭代公式') return; end if (piancha < 0.001)&(xdpiancha< 0.0000005)&(k>3) disp('祝贺您!此迭代序列收敛,且收敛速度较快') return; end p=[(i-1) piancha xdpiancha xk]'; x 例例例例 2.4.1 2.4.1 求方程 2.4.1 2.4.1 解解解解 在 MATLAB 工作窗口输入程序 )( xf 2 x = 2 + 10 的一个正根. >> [k,piancha,xdpiancha,xk]= diedai1(2,5) 运行后输出用迭代公式 =+ 1 x k 10( x 2 k 2/) 的结果 13. - - - - - -
高等教育出版社 教育电子音像出版社 作者:任玉杰 第二章 非线性方程(组)的数值解法的 MATLAB 程序 [k,piancha,xdpiancha,xk]= 1.00000000000000 1.00000000000000 0.33333333333333 3.00000000000000 2.00000000000000 2.50000000000000 5.00000000000000 0.50000000000000 3.00000000000000 4.37500000000000 0.89743589743590 4.87500000000000 4.00000000000000 11.75781250000000 1.70828603859251 -6.88281250000000 5.00000000000000 11.80374145507813 0.63167031671297 -18.68655395507813 请用户注意:此迭代序列发散,请重新输入新的迭代公式 k=5,piancha = 11.80374145507813,xdpiancha = 0.63167031671297, xk = -18.68655395507813 由以上运行后输出的迭代序列与根 *x =2.316 624 790 355 40 相差越来越大,即迭代序 列 }{ kx 发散,此迭代法就失败.这时偏差 piancha 逐渐增大且偏差的相对误差 xdpiancha 的 值大于 0.5. 用迭代公式 =+ 1 + k k x x /(10 运行后输出的结果 )2 [k,piancha,xdpiancha,xk]= 1.00000000000000 0.50000000000000 0.20000000000000 2.50000000000000 2.00000000000000 0.27777777777778 0.12500000000000 2.22222222222222 3.00000000000000 0.14619883040936 0.06172839506173 2.36842105263158 4.00000000000000 0.07926442612555 0.03462603878116 2.28915662650602 5.00000000000000 0.04230404765128 0.01814486863115 2.33146067415730 k =5,piancha =0.04230404765128,xdpiancha = 0.01814486863115, xk = 2.33146067415730 可见,偏差 piancha 和偏差的偏差的相对误差 xdpiancha 的值逐渐变小,且第 5 次的迭 代值 xk =2.331 460 674 157 30 与根 *x =2.316 624 790 355 40 接近,则迭代序列 }{ kx 收 敛,但收敛速度较慢,此迭代法较为成功. 用迭代公式 k k k k 2 ( x x x x 2 + =+ 1 2/()10 + [k,piancha,xdpiancha,xk]= 1.00000000000000 0.33333333333333 0.14285714285714 2.33333333333333 2.00000000000000 0.01666666666667 0.00719424460432 2.31666666666667 3.00000000000000 0.00004187604690 0.00001807631822 2.31662479061977 4.00000000000000 0.00000000026437 0.00000000011412 2.31662479035540 5.00000000000000 0 0 2.31662479035540 运行后输出的结果 )2 x k 祝贺您!此迭代序列收敛,且收敛速度较快 k = 5; piancha = 0; xdpiancha = 0; y = 2.31662479035540. 可见,偏差 piancha 和偏差的相对误差 xdpiancha 的值越来越小,且第 5 次的迭代值 xk=2.316 624 790 355 40 与根 *x =2.316 624 790 355 40 相差无几,则迭代序列 }{ kx 收敛,且 收敛速度很快,此迭代法成功. 2.4.5 迭代法的 MMMMATLAB 2.4.5 迭代法的 ATLAB 程序程序程序程序 2222 ATLAB 迭代法的迭代法的 2.4.5 2.4.5 ATLAB 迭代法的 迭代法的 MATLA MATLABBBB 程序程序程序程序 2 2 2 2 MATLA 迭代法的迭代法的 MATLA 输入的量:初初始值 0x 、精度 tol 和和迭代公式 ; 运行后输出的量:迭代次数 k,满足精度 tol 的根的近似根 kx 的迭代序列 }{ kx ,相 | 和 它 的 偏 差 的 相 对 误 差 xdpiancha =+ ,2,1,0 = j k x x ) ( ) ( L 1 k k x k x 1- k 邻 两 次 迭 代 的 偏 差 pianch=| = x x 1- x 的值,yk=φ(xk). k k 根据迭代公式(2.4)和已知条件,现提供名为 diedai2.m 的 M 文件如下 k function [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=i+1; xk=x(i);yk=fun(x(i)); [(i-1) piancha xdpiancha xk yk] if (piancha
高等教育出版社 教育电子音像出版社 作者:任玉杰 第二章 非线性方程(组)的数值解法的 MATLAB 程序 return; end end if i>ddmax disp('迭代次数超过给定的最大值ddmax') return; end P=[(i-1),piancha,xdpiancha,xk,yk]'; 2.4.5 求x5-3x+1=0在0.3附近的根,精确到4位小数. 例例例例2.4.5 2.4.5 2.4.5 解解解解 ⑴⑴⑴⑴ 构造迭代公式 构造迭代公式 构造迭代公式 构造迭代公式 ) . x ( j= = x x ( 5 + k k x 改写原方程为等价方程 3/)1 .这时 xj )( = x ( 5 + 3/)1 ,初始值为x0=0.5, 迭代公 式 =k ) . 的根的近似值 y 和迭代次数 和迭代次数k. ⑵⑵⑵⑵利用利用利用利用迭代法的 计算精确到4444位小数位小数位小数位小数的根的近似值 MATLAB程序程序程序程序2222计算精确到 迭代法的MATLAB 和迭代次数 计算精确到 MATLAB 迭代法的迭代法的 MATLAB 计算精确到 的根的近似值 的根的近似值 和迭代次数 在MATLAB工作窗口输入程序 ,2,1,0 =+ 1 3/)1 ( 5 x k + ( x k L >> [k,piancha,xdpiancha,xk,yk]=diedai2(0.3,1e-4,100) 运行后输出的结果 [k,piancha,xdpiancha,xk,yk] = 0 0.03414 0.10218 0.30000 0.33414 1 0.03414 0.10218 0.33414 0.33472 2 0.00058 0.00173 0.33472 0.33473 3 0.00001 0.00004 0.33473 0.33473 k =3;piancha =1.206089525390697e-005; xdpiancha =3.603129477781680e-005; xk =0.3347; yk =0.3347. 速方法及其 MATLAB 迭代过程的加速方法及其 2.5 迭代过程的加 2.5 MATLAB 程序程序程序程序 MATLAB 速方法及其 迭代过程的加 2.5 2.5 迭代过程的加 速方法及其 MATLAB 对于收敛的迭代过程,只要迭代足够多次,就可以使结果达到任意的精度,但有时迭代 过程收敛缓慢,从而使计算量变得很大,因此,迭代过程的加速是个重要的问题. 2.5.2 加权迭代法的 MATLAB 2.5.2 加权迭代法的 MATLAB 程序程序程序程序 MATLAB 加权迭代法的 2.5.2 2.5.2 加权迭代法的 MATLAB 加权迭代法的 加权迭代法的 MATLAB MATLAB 主程序主程序主程序主程序 MATLAB 加权迭代法的 加权迭代法的 MATLAB 已知初始值 0x 、精度 tol 和迭代公式 xk+1=j (xk),求满足精度 tol 的根的近似根 kx 和 它的函数值 yk 及迭代次数 k. 根据加权迭代的公式(2....10)和已知条件,现提供名为 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) xk yk] if (pianchaddmax 15.
高等教育出版社 教育电子音像出版社 作者:任玉杰 第二章 非线性方程(组)的数值解法的 MATLAB 程序 disp('迭代次数超过给定的最大值ddmax') return; end P=[(i-1),xk,yk]'; xx 2.5.1 用(2.10)式求 2e 例例例例 2.5.1 2.5.1 2.5.1 解解解解 在 MATLAB 工作窗口输入程序 0= 在 0.85 附近的一个近似根,要求精度 =e 610 . >> [k,xk,yk]=jasudd (0.85,1e-6,-0.855,100) 运行后输出结果 [k,xk,yk] = 1.00000000000000 0.85260370028041 0.85260703830561 2.00000000000000 0.85260549975491 0.85260550406236 3.00000000000000 0.85260550207699 0.85260550208255 k =3; xk =0.852606; yk = 0.852606. 2.5.4 加速方法的 MATLAB (Aitken)加速方法的 2.5.4 艾特肯艾特肯艾特肯艾特肯(Aitken) MATLAB 程序程序程序程序 MATLAB 加速方法的 (Aitken) 2.5.4 2.5.4 (Aitken) 加速方法的 MATLAB 艾特肯加速方法的 MATLAB 艾特肯加速方法的 MATLAB 程序程序程序程序 MATLAB 艾特肯加速方法的 艾特肯加速方法的 MATLAB 已知初始值 0x 、精度 tol 和迭代公式 xk+1=j (xk),求满足精度 tol 的根的近似根 kx 和 它的函数值 yk 及迭代次数 k,p=[k',x1',x2',x']. 根据艾特肯加速方法的公式(2....11)和已知条件,现提供名为 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; xk=x(i);yk=fun(x(i)); if (pianchaddmax disp('迭代次数超过给定的最大值ddmax') return; end m=[0,1:i-1]; p=[m',x1',x2',x']; =e 2.5.3 用艾特肯加速方法求 2e 例例例例 2.5.3 2.5.3 2.5.3 610 解解解解 在 MATLAB 工作窗口输入程序 . xx 0= 在 0.85 附近的一个近似根,要求精度 >> [k,xk,yk,p]= Aitken(0.85,1e-6, 100) 运行后输出结果 k=3,xk=0.85260550201343,yk=0.85260550201373 p = 0 0 0 0.85000000000000 1.00000000000000 0.85482986389745 0.85071110652484 0.85260683568607 2.00000000000000 0.85260436491811 0.85260647150826 0.85260550201407 3.00000000000000 0.85260550201343 0.85260550201398 0.85260550201373 (Newton)切线切线切线切线法及其法及其法及其法及其 MATLAB 2.6 牛顿牛顿牛顿牛顿(Newton) 2.6 MATLAB 程序程序程序程序 MATLAB (Newton) 2.6 2.6 (Newton) MATLAB 16. - - - - - -
分享到:
收藏