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

上传人:飞*** 文档编号:32719318 上传时间:2018-02-12 格式:DOC 页数:18 大小:166KB
返回 下载 相关 举报
matlab代码--非线性方程组求解_第1页
第1页 / 共18页
matlab代码--非线性方程组求解_第2页
第2页 / 共18页
matlab代码--非线性方程组求解_第3页
第3页 / 共18页
matlab代码--非线性方程组求解_第4页
第4页 / 共18页
matlab代码--非线性方程组求解_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《matlab代码--非线性方程组求解》由会员分享,可在线阅读,更多相关《matlab代码--非线性方程组求解(18页珍藏版)》请在金锄头文库上搜索。

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

2、多,可能不收敛!);return;endend2.mulNewton 用牛顿法法求非线性方程组的一个根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 =

3、subs(dF,findsym(dF),x0);r=x0-inv(dFx)*Fx; %核心迭代公式tol=norm(r-x0);n=n+1;if(n100000) %迭代步数控制disp(迭代步数太多,可能不收敛!);return;endend3.mulDiscNewton 用离散牛顿法法求非线性方程组的一个根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

4、= x0;x1(i) = 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);endr=xs-inv(J)*fx; %核心迭代公式tol=norm(r-xs);m=m+1;if(m100000) %

5、迭代步数控制disp(迭代步数太多,可能不收敛!);return; endendformat short;4.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

6、 - J;inD = inv(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

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

8、,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);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

9、 tolepsx0=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);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;

10、%核心迭代公式tol=norm(r-x0);m=m+1;if(m100000) %迭代步数控制disp(迭代步数太多,可能不收敛!);return;endend6.mulDNewton 用牛顿下山法求非线性方程组的一个根function r,m=mulDNewton(F,x0,eps) %非线性方程组:F%初始解: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

11、),x0);dFx = subs(dF,findsym(dF),x0); F1=norm(Fx);while ttol=0 %下面的循环是选取下山因子 w的过程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;endend7.mulGXF1用两点割线法的第一种形式求非线性方程组的一个根function r,m=mulGXF1(F,x0,x1,e

12、ps)format long;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);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 toleps x0 = x1;x1

13、 = r;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; tol=norm(r-x1);m=m+1;if(m100000) %迭代步数控制disp(迭代步数太多,可能不收敛!);return;endendformat short;8.mulGXF2用两点割线法的第二种形式求非线性方程组的一个根f

14、unction r,m=mulGXF2(F,x0,x1,eps)format long;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(1);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(1:i-1);J(:,i) = (subs(F,findsym(F),xt)-sub

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 期刊/会议论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号