- 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)