matlab求解非线性方程组_第1页
matlab求解非线性方程组_第2页
matlab求解非线性方程组_第3页
matlab求解非线性方程组_第4页
matlab求解非线性方程组_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、非线性方程组求解l.mulStablePoint用不动点迭代法求非线性方程组的一个根function r,n=mulStablePoint(F,x0,eps)线性方程组:f%U始解:a嗨军的精度:eps%求得的一组解:r旭代步数:nif nargin=2eps=1.0e-6;end x0 = transpose(x0);n=1;tol=1;while toleps迭代公式注意矩阵的误差求法,norm为矩阵的欧几里迭代步数控制1);r= subs(F,findsym(F),x0);%tol=norm(r-x0);%德范数n=n+1;x0=r;if(n100000)%disp( 迭代步数太多,可能

2、不收敛! return; end endmulNewton用牛顿法法求非线性方程组的一个根function r,n=mulNewton(F,x0,eps)if nargin=2eps=1.0e-4;endx0 = 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 tolepsx0=r;Fx = subs(F,findsym(F),x0);dFx = subs(dF

3、,findsym(dF),x0);核心迭代公式迭代步数控制r=x0-inv(dFx)*Fx;%tol=norm(r-x0);n=n+1;if(n100000)%disp(迭代步数太多,可能不收敛!,);return;endendmulDiscNewton用离散牛顿法法求非线性方程组的一个根 function r,m=mulDiscNewton(F,x0,h,eps)format long;if nargin=3eps=1.0e-8;endn = length(x0);fx = subs(F,findsym(F),x0);J = zeros(n,n);for i=1:nx1 = x0;x1(i)

4、 = x1(i)+h(i);J(:,i) = (subs(F,findsym(F),x1)-fx)/h(i);endr=transpose(x0)-inv(J)*fx;m=1;tol=1;while tolepsxs=r;fx = subs(F,findsym(F),xs);J = zeros(n,n);for i=1:nx1 = 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(迭

5、代步数太多,可能不收敛!,);return;end endformat short;mulMix用牛顿-雅可比迭代法求非线性方程组的一个根function r,m=mulMix(F,x0,h,l,eps)if nargin=4eps=1.0e-4;endn = length(x0);J = zeros(n,n);Fx = subs(F,findsym(F),x0);for i=1:nx1 = x0;x1(i) = x1(i)+h(i);J(:,i) = (subs(F,findsym(F),x1)-Fx)/h(i);endD = diag(diag(J);C = D - J;inD = inv

6、(D);H = inD*C;Hm = eye(n,n);for i=1:l-1Hm = Hm + power(H,i);enddr = Hm*inD*Fx;r = transpose(x0)-dr;m=1;tol=1;while tolepsx0=r;Fx = subs(F,findsym(F),x0);J = zeros(n,n);for i=1:nx1 = x0;x1(i) = x1(i)+h(i);J(:,i) = (subs(F,findsym(F),x1)-Fx)/h(i);endD = diag(diag(J);C = D - J;inD = inv(D);H = inD*C;Hm

7、 = eye(n,n);for i=1:l-1Hm = Hm + power(H,i);enddr = Hm*inD*Fx;r = x0-dr;%核心迭代公式tol=norm(r-x0);m=m+1;if(m100000)%迭代步数控制disp( 迭代步数太多,可能不收敛!,);return;endendmulNewtonSOR用牛顿-SOR迭代法求非线性方程组的一个根function r,m=mulNewtonSOR(F,x0,w,h,l,eps)if nargin=5eps=1.0e-4;endn = length(x0);J = zeros(n,n);Fx = subs(F,findsy

8、m(F),x0);for i=1:nx1 = x0;x1(i) = x1(i)+h(i);J(:,i) = (subs(F,findsym(F),x1)-Fx)/h(i);endD = 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-1Hm = Hm + power(H,i);enddr = w*Hm*inD*Fx;r = transpose(x0)-dr;m=1;tol=1;while tolepsx0=r;Fx = subs(F

9、,findsym(F),x0);J = zeros(n,n);for i=1:nx1 = x0;x1(i) = x1(i)+h(i);J(:,i) = (subs(F,findsym(F),x1)-Fx)/h(i);endD = 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-1Hm = Hm + power(H,i);enddr = w*Hm*inD*Fx;r = x0-dr;%核心迭代公式tol=norm(r-x0);m=m+1

10、;if(m100000)%迭代步数控制disp( 迭代步数太多,可能不收敛!,);return;end endmulDNewton用牛顿下山法求非线性方程组的一个根function r,m=mulDNewton(F,x0,eps)线性方程组:F%5始解:x0%军的精度:eps%求得的一组解:r%代步数:nif nargin=2eps=1.0e-4;endx0 = transpose(x0);dF = Jacobian(F);m=1;tol=1;while tolepsttol=1;w=1;Fx = subs(F,findsym(F),x0);dFx = subs(dF,findsym(dF),

11、x0);卜面的循环是选取下山因子w的过核心的迭代公式迭代步数控制F1=norm(Fx);while ttol=0%程r=x0-w*inv(dFx)*Fx;%Fr = subs(F,findsym(F),r);ttol=norm(Fr)-F1;w=w/2;endtol=norm(r-x0);m=m+1;x0=r;if(m100000)%disp(迭代步数太多,可能不收敛!,);return;endendmulGXF1用两点割线法的第一种形式求非线性方程组的一个根function r,m=mulGXF1(F,x0,x1,eps)format long;if nargin=3eps=1.0e-4;e

12、ndx0 = transpose(x0);x1 = transpose(x1);n = length(x0);fx = subs(F,findsym(F),x0);fx1 = subs(F,findsym(F),x1);h = x0 - x1;J = zeros(n,n);for i=1:nxt = x1;xt(i) = x0(i);J(:,i) = (subs(F,findsym(F),xt)-fx1)/h(i);endr=x1-inv(J)*fx1;m=1;tol=1;while tolepsx0 = x1;x1 = r;fx = subs(F,findsym(F),x0);fx1 = s

13、ubs(F,findsym(F),x1);h = x0 - x1;J = zeros(n,n);for i=1:nxt = x1;xt(i) = x0(i);J(:,i) = (subs(F,findsym(F),xt)-fx1)/h(i);endr=x1-inv(J)*fx1;tol=norm(r-x1);m=m+1;if(m100000)%迭代步数控制disp(迭代步数太多,可能不收敛!,);return;endendformat short;mulGXF2用两点割线法的第二种形式求非线性方程组的一个根function r,m=mulGXF2(F,x0,x1,eps)format long

14、;if nargin=3eps=1.0e-4;endx0 = transpose(x0);x1 = transpose(x1);n = length(x0);fx = subs(F,findsym(F),x0);fx1 = subs(F,findsym(F),x1);h = x0 - x1;J = zeros(n,n);xt = x1;xt(1) = x0;J(:,1) = (subs(F,findsym(F),xt)-subs(F,findsym(F),x1)/h(1);for i=2:nxt = x1;xt(1:i) = x0(1:i);xt_m = x1;xt_m(1:i-1) = x0

15、(1:i-1);J(:,i) = (subs(F,findsym(F),xt)-subs(F,findsym(F),xt_m)/h(i);endr=x1-inv(J)*fx1;m=1;tol=1;while tolepsx0 = x1;x1 = r;fx = subs(F,findsym(F),x0);fx1 = subs(F,findsym(F),x1);h = x0 - x1;J = zeros(n,n);xt = x1;xt(1) = x0;J(:,1) = (subs(F,findsym(F),xt)-subs(F,findsym(F),x1)/h(1);for i=2:nxt = x

16、1;xt(1:i) = x0(1:i);xt_m = x1;xt_m(1:i-1) = x0(1:i-1);J(:,i) = (subs(F,findsym(F),xt)-subs(F,findsym(F),xt_m)/h(i); endr=x1-inv(J)*fx1;tol=norm(r-x1);m=m+1;迭代步数控制if(m100000)%disp(迭代步数太多,可能不收敛!,);return;endendformat short;mulVNewton用拟牛顿法求非线性方程组的一组解function r,m=mulVNewton(F,x0,A,eps)%?程组:F附程组的初始解:x0%初

17、始A矩阵:A%军的精度:eps%求得的一组解:r%代步数:mif nargin=2A=eye(length(x0); %A 取为单位阵eps=1.0e-4;elseif nargin=3eps=1.0e-4;endend x0 = transpose(x0);Fx = subs(F, findsym(F),x0);r=x0-AFx;m=1;tol=1;while tolepsx0=r;Fx = subs(F, findsym(F),x0);r=x0-AFx;y=r-x0;Fr = subs(F, findsym(F),r);z= Fr-Fx;A1=A+(z-A*y)*transpose(y)/

18、norm(y);%调整 AA=A1;m=m+1;if(m100000)%迭代步数控制disp(迭代步数太多,可能不收敛!,);return;endtol=norm(r-x0);endmulRank1用对称秩1算法求非线性方程组的一个根function r,n=mulRank1(F,x0,A,eps)if nargin=2l = length(x0);A=eye(l);%A取为单位阵eps=1.0e-4;elseif nargin=3 eps=1.0e-4;endendfx = subs(F,findsym(F),x0);r=transpose(x0)-inv(A)*fx;n=1;tol=1;w

19、hile tolepsx0=r;fx = subs(F,findsym(F),x0);r=x0-inv(A)*fx;y=r-x0;fr = subs(F,findsym(F),r);z = fr-fx;A1=A+ fr *transpose(fr)/(transpose(fr)*y);%调整 AA=A1; n=n+1; if(n100000)%迭代步数控制disp(迭代步数太多,可能不收敛!,);return; end tol=norm(r-x0); end 11. mulDFP用D-F-P算法求非线性方程组的一组解 function r,n=mulDFP(F,x0,A,eps) if nar

20、gin=2 l = length(x0); B=eye(l);%A取为单位阵eps=1.0e-4; else if nargin=3 eps=1.0e-4; end end fx = subs(F,findsym(F),x0); r=transpose(x0)-B*fx; n=1; tol=1; while toleps x0=r; fx = subs(F,findsym(F),x0); r=x0-B*fx; y=r-x0; fr = subs(F,findsym(F),r); z = fr-fx; B1=B+ y*y/(y*z)-B*z*z*B/(z*B*z);%调整 AB=B1; n=n+

21、1; if(n100000)%迭代步数控制disp(迭代步数太多,可能不收敛!,);return; end tol=norm(r-x0); end 12. mulBFS用B-F-S算法求非线性方程组的一个根function r,n=mulBFS(F,x0,B,eps) if nargin=2 l = length(x0);B=eye(l);%Beps=1.0e-4; else if nargin=3 eps=1.0e-4; end end fx = subs(F,findsym(F),x0); r=transpose(x0)-B*fx; n=1; tol=1; while toleps x0=

22、r; fx = subs(F,findsym(F),x0); r=x0-B*fx; y=r-x0; fr = subs(F,findsym(F),r); z = fr-fx; u = 1 + z*B*z/(y*z);B1= B+ (u*y*y-B*z*y-y*z*B)/(y*z);B=B1; n=n+1; if(n100000)%disp(迭代步数太多,可能不收敛!return; end tol=norm(r-x0);取为单位阵%调整B迭代步数控制1);endmulNumYT用数值延拓法求非线性方程组的一组解 function r,m=mulNumYT(F,x0,h,N,eps) format

23、 long;if nargin=4 eps=1.0e-8;endn = length(x0);fx0 = subs(F,findsym(F),x0);x0 = transpose(x0);J = zeros(n,n);for k=0:N-1fx = subs(F,findsym(F),x0);for i=1:nx1 = x0;x1(i) = x1(i)+h(i);J(:,i) = (subs(F,findsym(F),x1)-fx)/h(i);endinJ = inv(J);r=x0-inJ*(fx-(1-k/N)*fx0);x0 = r;endm=1;tol=1;while tolepsxs

24、=r;fx = subs(F,findsym(F),xs);J = zeros(n,n);for i=1:nx1 = xs;x1(i) = x1(i)+h(i);J(:,i) = (subs(F,findsym(F),x1)-fx)/h(i);endr=xs-inv(J)*fx;%核心迭代公式tol=norm(r-xs); m=m+1; if(m100000)%迭代步数控制disp(迭代步数太多,可能不收敛!,);return;endendformat short;DiffParam1用参数微分法中的欧拉法求非线性方程组的一组解function r=DiffParam1(F,x0,h,N) 线

25、性方程组:f%5始解:x0喊值微分增量步大小:h哪可比迭代参量:l%军的精度:eps%求得的一组解:r%代步数:nx0 = transpose(x0);n = length(x0);ht = 1/N;Fx0 = subs(F,findsym(F),x0);for k=1:NFx = subs(F,findsym(F),x0);J = zeros(n,n);for i=1:nx1 = x0;x1(i) = x1(i)+h(i);J(:,i) = (subs(F,findsym(F),x1)-Fx)/h(i);endinJ = inv(J);r = x0 - ht*inJ*Fx0; x0 = r;

26、endDiffParam2用参数微分法中的中点积分法求非线性方程组的一组解function r=DiffParam2(F,x0,h,N)线性方程组:f剂始解:x0喊值微分增量步大小:h%推可比迭代参量:l%军的精度:eps%求得的一组解:r旭代步数:nx0 = transpose(x0);n = length(x0);ht = 1/N;Fx0 = subs(F,findsym(F),x0);J = zeros(n,n);for i=1:nxt = x0;xt(i) = xt(i)+h(i);J(:,i) = (subs(F,findsym(F),xt)-Fx0)/h(i);endinJ = i

27、nv(J);x1 = x0 - ht*inJ*Fx0;for k=1:Nx2 = x1 + (x1-x0)/2;Fx2 = subs(F,findsym(F),x2);J = zeros(n,n);for i=1:nxt = x2;xt(i) = xt(i)+h(i);J(:,i) = (subs(F,findsym(F),xt)-Fx2)/h(i); endinJ = inv(J);r = x1 - ht*inJ*Fx0;x0 = x1;x1 = r;endmulFastDown用最速下降法求非线性方程组的一组解function r,m=mulFastDown(F,x0,h,eps)form

28、at long;if nargin=3eps=1.0e-8;endn = length(x0);x0 = transpose(x0);m=1;tol=1;while tolepsfx = subs(F,findsym(F),x0);J = zeros(n,n);for i=1:nx1 = x0;x1(i) = x1(i)+h;J(:,i) = (subs(F,findsym(F),x1)-fx)/h;endlamda = fx/sum(diag(transpose(J)*J);r=x0-J*lamda; % 核心迭代公式fr = subs(F,findsym(F),r);tol=dot(fr,

29、fr);x0 = r;m=m+1;if(m100000)%迭代步数控制disp(迭代步数太多,可能不收敛!,);return;endendformat short;mulGSND用高斯牛顿法求非线性方程组的一组解function r,m=mulGSND(F,x0,h,eps)format long;if nargin=3eps=1.0e-8;endn = length(x0);x0 = transpose(x0);m=1;tol=1;while tolepsfx = subs(F,findsym(F),x0);J = zeros(n,n);for i=1:nx1 = x0;x1(i) = x1

30、(i)+h;J(:,i) = (subs(F,findsym(F),x1)-fx)/h;endDF = inv(transpose(J)*J)*transpose(J);r=x0-DF*fx; % 核心迭代公式tol=norm(r-x0);x0 = r;m=m+1;if(m100000)%迭代步数控制disp(迭代步数太多,可能不收敛!,);return;endendformat short;mulConj用共轲梯度法求非线性方程组的一组解function r,m=mulConj(F,x0,h,eps)format long;if nargin=3eps=1.0e-6;endn = length(x0);x0 = transpose(x0);fx0 = subs(F,findsym(F),x0);p0 = zeros(n,n);for i=1:nx1 = x0;x1(i) = x1(i)*(1+h);p0(:,i) = -(subs(F,findsym(F),x1)-fx0)/h;endm=1;tol=1;while tolepsfx = subs(F,findsym(F),x0);J = zeros(n,n);for i=1:nx1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论