




如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
matlab实现牛顿迭代法求解非线性方程组 已知非线性方程组如下 3*x1-cos(x2*x3)-1/2=0 x1^2-81*(x2+0.1)^2+sin(x3)+1.06=0 exp(-x1*x2)+20*x3+(10*pi-3)/3=0 求解要求精度达到0.00001 ———————————————————————————————— 首先建立函数fun 储存方程组编程如下将fun.m保存到工作路径中: functionf=fun(x); %定义非线性方程组如下 %变量x1x2x3 %函数f1f2f3 symsx1x2x3 f1=3*x1-cos(x2*x3)-1/2; f2=x1^2-81*(x2+0.1)^2+sin(x3)+1.06; f3=exp(-x1*x2)+20*x3+(10*pi-3)/3; f=[f1f2f3]; ———————————————————————————————— 建立函数dfun 用来求方程组的雅克比矩阵将dfun.m保存到工作路径中: functiondf=dfun(x); %用来求解方程组的雅克比矩阵储存在dfun中 f=fun(x); df=[diff(f,'x1');diff(f,'x2');diff(f,'x3')]; df=conj(df'); ———————————————————————————————— 编程牛顿法求解非线性方程组将newton.m保存到工作路径中: functionx=newton(x0,eps,N); con=0; %其中x0为迭代初值eps为精度要求N为最大迭代步数con用来记录结果是否收敛 fori=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; forj=1:length(x0); il(i,j)=x(j); end ifnorm(x-x0)<eps con=1; break; end x0=x; end %以下是将迭代过程写入txt文档文件名为iteration.txt fid=fopen('iteration.txt','w'); fprintf(fid,'iteration'); forj=1:length(x0) fprintf(fid,'x%d',j); end forj=1:i fprintf(fid,'\n%6d',j); fork=1:length(x0) fprintf(fid,'%10.6f',il(j,k)); end end ifcon==1 fprintf(fid,'\n计算结果收敛!'); end ifcon==0 fprintf(fid,'\n迭代步数过多可能不收敛!'); end fclose(fid); ———————————————————————————————— 运行程序在matlab中输入以下内容 newton([0.10.1-0.1],0.00001,20) ———————————————————————————————— 输出结果 —————————————————————————————————————————— 在iteration中查看迭代过程iterationx1x2x3 .mulStablePoint用不动点迭代法求非线性方程组的一个根 function[r,n]=mulStablePoint(F,x0,eps) %非线性方程组:f %初始解:a %解的精度:eps %求得的一组解:r %迭代步数:n ifnargin==2 eps=1.0e-6; end x0=transpose(x0); n=1; tol=1; whiletol>eps r=subs(F,findsym(F),x0);%迭代公式 tol=norm(r-x0);%注意矩阵的误差求法, norm为矩阵的欧几里德范数 n=n+1; x0=r; if(n>100000)%迭代步数控制 disp('迭代步数太多,可能不收敛!'); return; end end x0=[000];[r,n,data]=budong(x0);disp('不动点计算结果为')x1=[111];x2=[222];[x,n,data]=new_ton(x0);disp(’初始值为0,牛顿法计算结果为:’)[x,n,data]=new_ton(x1);disp('初始值为1,牛顿法计算结果为:')[x,n,data]=new_ton(x2);disp('初始值为2,牛顿法计算结果为:') budong.mfunction[r,n,data]=budong(

王子****青蛙
实名认证
内容提供者


最近下载