matlab实现牛顿迭代法求解非线性方程组.doc

matlab实现牛顿迭代法求解非线性方程组.doc

ID:51828923

大小:41.00 KB

页数:5页

时间:2020-03-16

matlab实现牛顿迭代法求解非线性方程组.doc_第1页
matlab实现牛顿迭代法求解非线性方程组.doc_第2页
matlab实现牛顿迭代法求解非线性方程组.doc_第3页
matlab实现牛顿迭代法求解非线性方程组.doc_第4页
matlab实现牛顿迭代法求解非线性方程组.doc_第5页
资源描述:

《matlab实现牛顿迭代法求解非线性方程组.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、matlab实现牛顿迭代法求解非线性方程组 已知非线性方程组如下3*x1-cos(x2*x3)-1/2=0 x1^2-81*(x2+0.1)^2+sin(x3)+1.06=0exp(-x1*x2)+20*x3+(10*pi-3)/3=0求解要求精度达到0.00001————————————————————————————————首先建立函数fun 储存方程组编程如下将fun.m保存到工作路径中: function f=fun(x);%定义非线性方程组如下 %变量x1 x2 x3 %函数f1 f2 f3 syms x1 x2 x3 f1=3*x1-cos(x2*x3)-1/2; f2=x1^2

2、-81*(x2+0.1)^2+sin(x3)+1.06;f3=exp(-x1*x2)+20*x3+(10*pi-3)/3;f=[f1 f2 f3]; ———————————————————————————————— 建立函数dfun 用来求方程组的雅克比矩阵将dfun.m保存到工作路径中: function df=dfun(x); %用来求解方程组的雅克比矩阵储存在dfun中 f=fun(x); df=[diff(f,'x1');diff(f,'x2');diff(f,'x3')];df=conj(df');————————————————————————————————编程牛顿法求解非线性

3、方程组将newton.m保存到工作路径中: function x=newton(x0,eps,N); con=0; %其中x0为迭代初值eps为精度要求N为最大迭代步数con用来记录结果是否收敛 for i=1:N;f=subs(fun(x0),{'x1' 'x2' 'x3'},{x0(1) x0(2) x0(3)});df=subs(dfun(x0),{'x1' 'x2' 'x3'},{x0(1) x0(2) x0(3)}); x=x0-f/df;for j=1:length(x0); il(i,j)=x(j); end if norm(x-x0)

4、d x0=x; end %以下是将迭代过程写入txt文档文件名为iteration.txt fid=fopen('iteration.txt','w'); fprintf(fid,'iteration');for j=1:length(x0) fprintf(fid,' x%d',j);endfor j=1:ifprintf(fid,'%6d ',j);for k=1:length(x0)fprintf(fid,' %10.6f',il(j,k));end endif con==1fprintf(fid,'计算结果收敛!'); endif con==0fprintf(fid,'迭

5、代步数过多可能不收敛!');endfclose(fid);————————————————————————————————运行程序在matlab中输入以下内容 newton([0.1 0.1 -0.1],0.00001,20)————————————————————————————————输出结果 ——————————————————————————————————————————   在iteration中查看迭代过程 iteration x1 x2 x3 .mulStablePoint用不动点迭代法求非线性方程组的一个根 function [r,n]=mulStablePoint(F,x

6、0,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)  

7、                      %迭代步数控制         disp('迭代步数太多,可能不收敛!');         return;     end end x0=[000];  [r,n,data]=budong(x0);  disp('不动点计算结果为')  x1=[111];  x2=[222];  [x,n,data]=new_ton(x0);  disp(’初始值为0,牛顿法计算

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。