matlab数值分析程序--高等数学,数值代数的matlab实现-文字版, matlab电子书, 和matlab 有关的电子书:

2.9.2 求解n元非线性方程组的牛顿法及其MATLAB程序

2.9.2  求解n元非线性方程组的牛顿法及其MATLAB程序

解n元非线性方程组的牛顿法的MATLAB主程序

现提供名为newtonzu2.m的M文件

function [ci,D,danfan, xddf, hanfan , Xk, Yk]= newtonzun (X, tol,ftol,gxmax)

Y=Z(X);

for i=1:gxmax

dY=JZ(X);D=det(dY);Xk=X-(dY\Y')';

hanfan=norm(Y);danfan=norm(Xk-X);

xddf=danfan/(norm(Xk)+eps);X=Xk;Y=Z(X);ci=i;

if D~=0

ci=i; Xk=X-(dY\Y')';Yk=Y;[ci,D,danfan,xddf,hanfan,X,Y];

else

disp('请注意!迭代方程组(2.51)的系数行列式的值等于零. ')

end

if (hanfan <ftol)&(( danfan <tol)|( xddf < tol))

[ci,D,danfan, xddf, hanfan , X, Y];

return;

  end

end

if i>gxmax

disp('请注意:迭代次数超过给定的最大值gxmax,请重新输入初始值.')

return;

end

例2.9.2  求解方程组 要求精度.

解 这里介绍两种求解已知方程组的方法.

方法1  用解元非线性方程组的牛顿法的MATLAB主程序求解

在MATLAB工作窗口输入程序

>> X=[2,2];

[k,D,danfan, xddf, hanfan , Xk, Yk]= newtonzun (X,1e-6,1e-6,100)

运行后输出结果

k=5,D=-63.49803146638493,danfan=3.932201289951168e-011

xddf=9.830503224877920e-012,hanfan=3.336593498083849e-010

Xk = 3.00000000000000   2.64575131106459

Yk =  1.0e-015 *

0  -0.88817841970013

方法2  用解矩阵方程的方法求解

在MATLAB工作窗口输入程序

>> x0=2;y0=2; gxmax =10;tol=1e-6;x(1)=x0;y(1)=y0;i=1;u=[1 1];k(1)=1;

while(norm(u)>tol*norm([x(i),y(i)]’))

A=2*[x(i),y(i);x(i),-y(i)];

b=[16-x(i)^2-y(i)^2,2-x(i)^2+y(i)^2]’;

u=A\b; x(i+1)=x(i)+u(1); y(i+1)=y(i)+u(2); i=i+1;k(i)=i;

if(i> gxmax)

error('请注意:迭代次数超过给定的最大值gxmax,请重新输入初始值’);

end

end

[k’,x’,y’]

运行后输出结果

ans =

   1.00000000000000   2.00000000000000   2.00000000000000

   2.00000000000000   3.25000000000000   2.75000000000000

   3.00000000000000   3.00961538461538   2.64772727272727

   4.00000000000000   3.00001536003932   2.64575204838080

   5.00000000000000   3.00000000003932   2.64575131106469

   6.00000000000000   3.00000000000000   2.64575131106459

欢迎转载,转载请注明来自一手册:http://yishouce.com/book/3/3020902.html
友情链接It题库(ittiku.com)| 版权归yishouce.com所有| 友链等可联系 admin#yishouce.com|粤ICP备16001685号-1