好文档 - 专业文书写作范文服务资料分享网站

matlab求解非线性方程组

天下 分享 时间: 加入收藏 我要投稿 点赞

非线性方程组求解

1.mulStablePoint用不动点迭代法求非线性方程组的一个根

function [r,n]=mulStablePoint(F,x0,eps) %非线性方程组:f %初始解:a %解的精度:eps %求得的一组解:r %迭代步数:n

if nargin==2 eps=1.0e-6; end

x0 = transpose(x0); n=1; tol=1;

while tol>eps

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

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

if(n>100000) %迭代步数控制 disp('迭代步数太多,可能不收敛!'); return; end end

2.mulNewton用牛顿法法求非线性方程组的一个根 function [r,n]=mulNewton(F,x0,eps) if nargin==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;

while tol>eps 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(n>100000) %迭代步数控制 disp('迭代步数太多,可能不收敛!'); return; end end

3.mulDiscNewton用离散牛顿法法求非线性方程组的一个根 function [r,m]=mulDiscNewton(F,x0,h,eps) format long; if nargin==3 eps=1.0e-8; end

n = length(x0);

fx = subs(F,findsym(F),x0); J = zeros(n,n); for i=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;

while tol>eps xs=r;

fx = subs(F,findsym(F),xs); J = zeros(n,n); for i=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(m>100000) %迭代步数控制 disp('迭代步数太多,可能不收敛!'); return;

end end

format short;

4.mulMix用牛顿-雅可比迭代法求非线性方程组的一个根 function [r,m]=mulMix(F,x0,h,l,eps) if nargin==4 eps=1.0e-4; end

n = length(x0); J = zeros(n,n);

Fx = subs(F,findsym(F),x0); for i=1:n x1 = x0;

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

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

D = diag(diag(J)); C = D - J; inD = inv(D); H = inD*C; Hm = eye(n,n); for i=1:l-1

Hm = Hm + power(H,i); end

dr = Hm*inD*Fx;

r = transpose(x0)-dr; m=1; tol=1;

while tol>eps x0=r;

Fx = subs(F,findsym(F),x0); J = zeros(n,n); for i=1:n x1 = x0;

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

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

D = diag(diag(J)); C = D - J; inD = inv(D); H = inD*C; Hm = eye(n,n); for i=1:l-1

Hm = Hm + power(H,i); end

dr = Hm*inD*Fx;

r = x0-dr; %核心迭代公式 tol=norm(r-x0); m=m+1;

if(m>100000) %迭代步数控制 disp('迭代步数太多,可能不收敛!'); return; end end

5.mulNewtonSOR用牛顿-SOR迭代法求非线性方程组的一个根 function [r,m]=mulNewtonSOR(F,x0,w,h,l,eps) if nargin==5 eps=1.0e-4; end

n = length(x0); J = zeros(n,n);

Fx = subs(F,findsym(F),x0); for i=1:n x1 = x0;

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

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

D = diag(diag(J)); L = -tril(J-D); U = -triu(J-D); inD = inv(D-w*L);

H = inD*(D - w*D+w*L);; Hm = eye(n,n); for i=1:l-1

Hm = Hm + power(H,i); end

dr = w*Hm*inD*Fx;

r = transpose(x0)-dr; m=1; tol=1;

while tol>eps x0=r;

Fx = subs(F,findsym(F),x0); J = zeros(n,n); for i=1:n

x1 = x0;

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

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

D = diag(diag(J)); L = -tril(J-D); U = -triu(J-D); inD = inv(D-w*L);

H = inD*(D - w*D+w*L);; Hm = eye(n,n); for i=1:l-1

Hm = Hm + power(H,i); end

dr = w*Hm*inD*Fx;

r = x0-dr; %核心迭代公式 tol=norm(r-x0); m=m+1;

if(m>100000) % disp('迭代步数太多,可能不收敛!'); return; end end

6.mulDNewton用牛顿下山法求非线性方程组的一个根 function [r,m]=mulDNewton(F,x0,eps) %非线性方程组:F %初始解:x0 %解的精度:eps %求得的一组解:r %迭代步数:n

if nargin==2 eps=1.0e-4; end

x0 = transpose(x0); dF = Jacobian(F); m=1; tol=1;

while tol>eps ttol=1; w=1;

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

迭代步数控制

matlab求解非线性方程组

非线性方程组求解1.mulStablePoint用不动点迭代法求非线性方程组的一个根function[r,n]=mulStablePoint(F,x0,eps)%非线性方程组:f%初始解:a%解的精度:eps%求得的一组解:r%迭代步数:nifnargin==2eps=1.0e-6;e
推荐度:
点击下载文档文档为doc格式
4b73r0yu5e7d82u9zjlx7yogl1itcy00inw
领取福利

微信扫码领取福利

微信扫码分享