function [r,n] = mulNewton(F,X0,eps) %% F为非线性方程组,列向量表示; X0为初始值,为行向量表示,eps 为误差精度
% if nargin==2
eps=1.0e-10; %% 控制精度
% end
X0=transpose(X0);
Fx=subs(F,findsym(F),X0);
dF=jacobian(F); %%雅阁比阵
% dF=Jacobian(F,findsym(F));
dFx=subs(dF,findsym(dF),X0);
% r=X0-Fx/dFx;
r=X0-inv(dFx)*Fx;
% r=X0-Fx*inv(dFx);
n=1;
tol=1;
while tol>eps
X0=r;
Fx=subs(F,findsym(F),X0);
dFx=subs(dF,findsym(dF),X0);
% r=X0-Fx./dFx;
r=X0-inv(dFx)*Fx;
% r=X0-Fx*inv(dFx);
tol=norm(r-X0);
n=n+1;
if(n>100000)
disp('迭代步数太多,可能不收敛!');
return;
end
end
评论0