matlab实现牛顿迭代法求解非线性方程组 已知非线性方程组如下3*x1-cos(x2*x3)-1/2=0 x1^2-81*(x2+)^2+sin(x3)+=0exp(-x1*x2)+20*x3+(10*pi-3)/3=————————————————————————————————首先建立函数fun : function f=fun(x);%定义非线性方程组如下 %变量x1 x2 x3 %函数f1 f2 f3 syms x1 x2 x3 f1=3*x1-cos(x2*x3)-1/2; f2=x1^2-81*(x2+)^2+sin(x3)+;f3=exp(-x1*x2)+20*x3+(10*pi-3)/3;f=[f1 f2 f3]; ———————————————————————————————— 建立函数dfun : function df=dfun(x); %用来求解方程组的雅克比矩阵储存在dfun中 f=fun(x); df=[diff(f,'x1');diff(f,'x2');diff(f,'x3')];df=conj(df');————————————————————————————————: function x=newton(x0,eps,N); con=0; %其中x0为迭代初值eps为精度要求N为最大迭代步数con用来记录结果是否收敛 for i=1:N;f=subs(fun(x0),{'x1' 'x2' 'x3'},{x0(1) x0(2) x0(3)});df=subs(dfun(x0),{'x1' 'x2' 'x3'},{x0(1) x0(2) x0(3)}); x=x0-f/df;for j=1:length(x0); il(i,j)=x(j); end if norm(x-x0)<eps con=1; break; end x0=x; end % fid=fopen('','w'); fprintf(fid,'iteration');for j=1:length(x0) fprintf(fid,' x%d',j);endfor j=1:ifprintf(fid,'\n%6d ',j);for k=1:length(x0)fprintf(fid,' %',il(j,k));end endif con==1fprintf(fid,'\n计算结果收敛!'); endif con==0fprintf(fid,'\n迭代步数过多也许不收敛!');endfclose(fid);————————————————————————————————运行程序在matlab中输入以下内容 newton([ -],,20)————————————————————————————————输出结果 —————————————————————————————————————————— 在iteratio
matlab实现牛顿迭代法求解非线性方程组 来自淘豆网m.daumloan.com转载请标明出处.