matlab代码--非线性方程组求解.pdfVIP

  • 11
  • 0
  • 约1.55万字
  • 约 18页
  • 2024-10-26 发布于河南
  • 举报

非线性方程组求解

1.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;

whiletoleps

r=subs(F,findsym(F),x0);%迭代公式

tol=norm(r-x0);%注意矩阵的误差求法,norm为矩阵的欧几里

德范数

n=n+1;

x0=r;

if(n100000)%迭代步数控制

disp(迭代步数太多,可能不收敛!);

return;

end

end

2.mulNewton用牛顿法法求非线性方程组的一个根

function[r,n]=mulNewton(F,x0,eps)

ifnargin==2

eps=1.0e-4;

end

x0=transpose(x0);

Fx=subs(F,findsym(F),x0);

var=findsym(F);

dF=Jacobian(F,var);

dFx=subs(dF,findsym(dF),x0);

r=x0-inv(dFx)*Fx;

n=1;

tol=1;

whiletoleps

x0=r;

Fx=subs(F,findsym(F),x0);

dFx=subs(dF,findsym(dF),x0);

r=x0-inv(dFx)*Fx;%核心迭代公式

tol=norm(r-x0);

n=n+1;

if(n100000)%迭代步数控制

disp(迭代步数太多,可能不收敛!);

return;

end

end

3.mulDiscNewton用离散牛顿法法求非线性方程组的一个根

function[r,m]=mulDiscNewton(F,x0,h,eps)

formatlong;

ifnargin==3

eps=1.0e-8;

end

n=length(x0);

fx=subs(F,findsym(F),x0);

J=zeros(n,n);

fori=1:n

x1=x0;

x1(i)=x1(i)+h(i);

J(:,i)=(subs(F,findsym(F),x1)-fx)/h(i);

end

r=transpose(x0)-inv(J)*fx;

m=1;

tol=1;

whiletoleps

xs=r;

fx=subs(F,findsym(F),xs);

J=zeros(n,n);

fori=1:n

x1=xs;

x1(i)=x1(i)+h(i);

J(:,i)=(subs(F,findsym(F),x1)-fx)/h(i);

end

r=xs-inv(J)*fx;%核心迭代公式

tol=norm(r-xs);

m=m+1;

if(m100000)%迭代步数控制

disp(迭代步数太多,可能不收敛!);

return;

end

end

formatshort;

4.mulMix用牛顿-雅可比迭代法求非线性方程组的一个根

function[r,m]=mulMix(F,x0,h,l,eps)

i

文档评论(0)

1亿VIP精品文档

相关文档