matlab实现牛顿迭代法求解非线性方程组.doc 立即下载
2025-01-05
约2.8千字
约5页
0
41KB
举报 版权申诉
预览加载中,请您耐心等待几秒...

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

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

预览

在线预览结束,喜欢就下载吧,查找使用更方便

10 金币

下载文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

matlab实现牛顿迭代法求解非线性方程组
已知非线性方程组如下
3*x1-cos(x2*x3)-1/2=0
x1^2-81*(x2+0.1)^2+sin(x3)+1.06=0
exp(-x1*x2)+20*x3+(10*pi-3)/3=0
求解要求精度达到0.00001
————————————————————————————————
首先建立函数fun
储存方程组编程如下将fun.m保存到工作路径中:
functionf=fun(x);
%定义非线性方程组如下
%变量x1x2x3
%函数f1f2f3
symsx1x2x3
f1=3*x1-cos(x2*x3)-1/2;
f2=x1^2-81*(x2+0.1)^2+sin(x3)+1.06;
f3=exp(-x1*x2)+20*x3+(10*pi-3)/3;
f=[f1f2f3];
————————————————————————————————
建立函数dfun
用来求方程组的雅克比矩阵将dfun.m保存到工作路径中:
functiondf=dfun(x);
%用来求解方程组的雅克比矩阵储存在dfun中
f=fun(x);
df=[diff(f,'x1');diff(f,'x2');diff(f,'x3')];
df=conj(df');
————————————————————————————————
编程牛顿法求解非线性方程组将newton.m保存到工作路径中:
functionx=newton(x0,eps,N);
con=0;
%其中x0为迭代初值eps为精度要求N为最大迭代步数con用来记录结果是否收敛
fori=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;
forj=1:length(x0);
il(i,j)=x(j);
end
ifnorm(x-x0)<eps
con=1;
break;
end
x0=x;
end
%以下是将迭代过程写入txt文档文件名为iteration.txt
fid=fopen('iteration.txt','w');
fprintf(fid,'iteration');
forj=1:length(x0)
fprintf(fid,'x%d',j);
end
forj=1:i
fprintf(fid,'\n%6d',j);
fork=1:length(x0)
fprintf(fid,'%10.6f',il(j,k));
end
end
ifcon==1
fprintf(fid,'\n计算结果收敛!');
end
ifcon==0
fprintf(fid,'\n迭代步数过多可能不收敛!');
end
fclose(fid);
————————————————————————————————
运行程序在matlab中输入以下内容
newton([0.10.1-0.1],0.00001,20)
————————————————————————————————
输出结果

——————————————————————————————————————————
在iteration中查看迭代过程iterationx1x2x3

.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;
whiletol>eps
r=subs(F,findsym(F),x0);%迭代公式
tol=norm(r-x0);%注意矩阵的误差求法,
norm为矩阵的欧几里德范数
n=n+1;
x0=r;
if(n>100000)%迭代步数控制

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





x0=[000];[r,n,data]=budong(x0);disp('不动点计算结果为')x1=[111];x2=[222];[x,n,data]=new_ton(x0);disp(’初始值为0,牛顿法计算结果为:’)[x,n,data]=new_ton(x1);disp('初始值为1,牛顿法计算结果为:')[x,n,data]=new_ton(x2);disp('初始值为2,牛顿法计算结果为:')
budong.mfunction[r,n,data]=budong(
查看更多
单篇购买
VIP会员(1亿+VIP文档免费下)

扫码即表示接受《下载须知》

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

文档大小:41KB

限时特价:扫码查看

• 请登录后再进行扫码购买
• 使用微信/支付宝扫码注册及付费下载,详阅 用户协议 隐私政策
• 如已在其他页面进行付款,请刷新当前页面重试
• 付费购买成功后,此文档可永久免费下载
全场最划算
12个月
199.0
¥360.0
限时特惠
3个月
69.9
¥90.0
新人专享
1个月
19.9
¥30.0
24个月
398.0
¥720.0
6个月会员
139.9
¥180.0

6亿VIP文档任选,共次下载特权。

已优惠

微信/支付宝扫码完成支付,可开具发票

VIP尽享专属权益

VIP文档免费下载

赠送VIP文档免费下载次数

阅读免打扰

去除文档详情页间广告

专属身份标识

尊贵的VIP专属身份标识

高级客服

一对一高级客服服务

多端互通

电脑端/手机端权益通用