找回密码
 注册
关于网站域名变更的通知
查看: 381|回复: 1
打印 上一主题 下一主题

MATLAB源程序代码分享:MATLAB实现牛顿迭代法求解非线性方程组

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-3-11 10:14 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
! j7 R, E4 w4 _$ A: _7 }- u/ d0 M6 B
# S5 V. U5 i0 [6 J2 I9 K
MATLAB源程序代码分享:MATLAB实现牛顿迭代法求解非线性方程组% b) V3 ?: H5 r) I1 v' E7 P
, ~/ F) |6 Y' F; Y8 X; k- s

" b( S1 M5 E, a/ h; M' R# L6 ~' j, m' D; \
%% 定义一个三元非线性方程组
" B- a% Y, x7 E1 T1 lclear;clc;close all
5 a0 l) Z3 T: d6 P3 \+ w9 O7 Xsyms x y z                          % 定义符号变量 x y z" n- s# ?$ c! G9 x. f; R) T
f1=6/(1+(x-y).^2)+sin(pi*y/2);      % 方程 15 j3 L) A  [. n+ [8 q
f2=x*sin(pi*x)+y*sin(20*pi*y)-z;    % 方程 2/ S; L1 s: k( W; M9 r
f3=x+2.0*y+z;                       % 方程 3  q2 ]; `! H$ v; j- w4 A3 j
f=[f1;f2;f3];                       % 三个方程组成方程组) p! f0 d( S- w& F2 ?
  M( Y( p4 ~2 k( u
%% 计算雅克比矩阵: f) M' q6 T2 \7 O" A
J=[diff(f1,x) diff(f1,y) diff(f1,z) 7 y# V* S; C5 ~3 t
   diff(f2,x) diff(f2,y) diff(f2,z)9 g3 K1 ?) q9 M4 ]7 z8 K9 O% I4 X. M% S
   diff(f3,x) diff(f3,y) diff(f3,z)];/ j5 Q$ }0 m: g2 K- q' u
5 y" t9 l% j7 Y* Y$ y
%% 自定义牛顿迭代算法, 求方程组的解
( ]( H" E* v0 B6 e: N' H! p& X; P+ tn=1;                               % 记录迭代的次数
1 K7 }1 T+ T+ j; l0 xx0=[-5;0;7];                       % 迭代初值) K7 t4 z$ }. J9 g" q7 g! V
E=1;8 O) Q  c* G2 ~. ~
while E > 1e-4                     % 如果精度不满足要求, 则一直进行迭代, 直到满足精度为止3 d2 o+ I6 t0 n$ o6 |7 Y
    x=x0(1);                       % 给 x 赋值
4 q& P9 p6 D- F/ R; ~    y=x0(2);                       % 给 y 赋值4 d# }3 q# O4 [' }. i( Y) z
    z=x0(3);                       % 给 z 赋值
6 A& H+ t& i8 }" c; w0 |    x1=x0-inv(eval(J))*eval(f);    % 迭代计算, 用 x0 迭代得到 x1
+ m& t4 u3 T, o$ j, x4 [- V    E=max(abs((x1-x0)./x1));       % 计算求解的精度
) F( _3 t; C' T: @4 u7 ?' l9 k: i    x0=x1;                         % 将当前得到的解 x1 赋值给 x0, 做为下一次迭代的值4 l; f7 x- C, L
    n=n+1;                         % 迭代次数加 1  1 d3 f% f8 p3 @; h- O
end
6 g! F2 K0 W; G% T; W4 s& t* p0 f- ^. H) A! e
%% 显示方程组的解, 并将求解结果带回方程组, 验算求解结果3 Z  ~+ g. i( t2 ^
x=x1(1)    % x 的求解结果3 c+ c8 d0 E5 n# `/ i
y=x1(2)    % y 的求解结果
4 e+ K) d2 B, H7 [8 kz=x1(3)    % z 的求解结果/ t; v( f$ j/ _# a, a  E/ M3 F
eval(f)

该用户从未签到

2#
发表于 2020-3-11 17:02 | 只看该作者
MATLAB实现牛顿迭代法求解非线性方程组。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 02:23 , Processed in 0.156250 second(s), 27 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表