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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
/ J% ?3 ^" x! ^: Z/ y4 F9 y
% f2 t+ P) p- U9 ~) |# C$ d
MATLAB源程序代码分享:MATLAB实现牛顿迭代法求解非线性方程组) t6 w+ @; L9 E' j* z6 `
9 b, e, i+ a$ w$ K. f6 b/ \
7 e! b3 U' ]5 T* {

) D; |- g* D4 t7 }" J0 k: C( _%% 定义一个三元非线性方程组
, W4 k$ E! M0 V$ P2 Q* [clear;clc;close all. x/ p8 _  }6 _( F( r$ N
syms x y z                          % 定义符号变量 x y z4 K* S; s. Z% D5 I) R8 U
f1=6/(1+(x-y).^2)+sin(pi*y/2);      % 方程 1- Z, X5 @7 }) e5 Y3 @2 S: P# b1 o
f2=x*sin(pi*x)+y*sin(20*pi*y)-z;    % 方程 2  h2 a! L- `, A- C/ H
f3=x+2.0*y+z;                       % 方程 3# s8 T% q% {  r7 @8 k
f=[f1;f2;f3];                       % 三个方程组成方程组
# r0 s9 d( C( ^' G" c
. E' j  I2 F! W/ X1 j%% 计算雅克比矩阵
; k/ a% p  T; }( ^* r7 g6 GJ=[diff(f1,x) diff(f1,y) diff(f1,z) % |0 J9 I) K% i
   diff(f2,x) diff(f2,y) diff(f2,z)
# k9 B0 E) u# L5 T( i: L   diff(f3,x) diff(f3,y) diff(f3,z)];% q% e) F& U( t. i2 h; Q

2 q+ ^4 W4 D- |0 C! i& |! w%% 自定义牛顿迭代算法, 求方程组的解
( V" f( _9 s, q) @n=1;                               % 记录迭代的次数
; R, y3 w9 v8 p% i7 J( Ox0=[-5;0;7];                       % 迭代初值: S3 O# y  ^9 I
E=1;
7 d( t/ F; p0 J, s5 X$ ~# S3 U+ Ywhile E > 1e-4                     % 如果精度不满足要求, 则一直进行迭代, 直到满足精度为止
, ~, ?1 J; ]( ?1 T/ |4 K- C6 U    x=x0(1);                       % 给 x 赋值
$ r8 w" r) Q, l# r$ q    y=x0(2);                       % 给 y 赋值" B+ m; A- G6 E4 c1 I
    z=x0(3);                       % 给 z 赋值3 [( X/ L( w6 s& }  }8 ]! z
    x1=x0-inv(eval(J))*eval(f);    % 迭代计算, 用 x0 迭代得到 x16 W( O: u+ i. V3 F( `: p
    E=max(abs((x1-x0)./x1));       % 计算求解的精度: F& g* H/ u6 V3 b5 _# I
    x0=x1;                         % 将当前得到的解 x1 赋值给 x0, 做为下一次迭代的值' }# h, |; F0 |, O0 F, I
    n=n+1;                         % 迭代次数加 1  7 h, ]) [$ f! u( r3 M9 p+ s  z. Z% q
end8 W4 H% i( x' X; c" B# n
8 }8 P0 V% A6 Y. Y" `) z
%% 显示方程组的解, 并将求解结果带回方程组, 验算求解结果
$ h4 d* o) Q- }6 w5 Wx=x1(1)    % x 的求解结果
0 a  O. L6 @$ ?: F. Dy=x1(2)    % y 的求解结果6 e* b% {& P  `5 ?- d) b7 O
z=x1(3)    % z 的求解结果
$ K* B7 d: H" y& O  Peval(f)

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-6 14:47 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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