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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
& @" ~8 Y9 K2 r
- m+ T" x5 g! m5 W# Q3 M
MATLAB源程序代码分享:MATLAB实现牛顿迭代法求解非线性方程组) z7 p$ |' B' V) w" O
+ v" G: j0 t" ~

5 I; N  @/ N, D- s% Q- P$ k" z4 r% }% y
%% 定义一个三元非线性方程组0 v& @& g8 T4 F/ d6 D% d
clear;clc;close all
* g; M! _- z6 q  i2 h. I7 m2 osyms x y z                          % 定义符号变量 x y z0 H4 k5 e+ c) \. e$ B! |5 b4 ?
f1=6/(1+(x-y).^2)+sin(pi*y/2);      % 方程 1' D  S; |6 y  Z- k: W+ i% M2 d
f2=x*sin(pi*x)+y*sin(20*pi*y)-z;    % 方程 22 O9 H! s, A8 l- N
f3=x+2.0*y+z;                       % 方程 3
- ~% J. r2 f  C. nf=[f1;f2;f3];                       % 三个方程组成方程组
+ z- [! O& y& N0 a
! [  ~, J- l7 @4 [%% 计算雅克比矩阵! Z4 d5 ~9 V; J; t/ X' O
J=[diff(f1,x) diff(f1,y) diff(f1,z)
) ^- z1 l$ y. U$ |! |  P* _! ^   diff(f2,x) diff(f2,y) diff(f2,z)
% G, V# m) c5 k9 D4 a" V   diff(f3,x) diff(f3,y) diff(f3,z)];
" m3 g7 `+ R. q/ i1 _. P0 L$ \
4 j- n2 R, T& B) F%% 自定义牛顿迭代算法, 求方程组的解; ^1 R: d/ {7 _* ~) f1 h( c
n=1;                               % 记录迭代的次数
' B* X! X' c$ r* U* N6 Y$ f  G% Ex0=[-5;0;7];                       % 迭代初值
( o7 X7 R, G4 ]! T. d- GE=1;
' h' `7 q- T" `9 b! l% K' M! gwhile E > 1e-4                     % 如果精度不满足要求, 则一直进行迭代, 直到满足精度为止- y! _0 B- g1 B  `1 H% A
    x=x0(1);                       % 给 x 赋值
' h* ~* n. {. T9 r6 v    y=x0(2);                       % 给 y 赋值
5 u5 ^+ s5 \5 R8 H4 u5 r" x    z=x0(3);                       % 给 z 赋值
( l: K" d8 a2 g+ f) P    x1=x0-inv(eval(J))*eval(f);    % 迭代计算, 用 x0 迭代得到 x1. Y7 d7 I; `- r1 p8 A& u
    E=max(abs((x1-x0)./x1));       % 计算求解的精度
; `* e3 I) Z* Q0 V/ q) _* S    x0=x1;                         % 将当前得到的解 x1 赋值给 x0, 做为下一次迭代的值
5 z% X3 c1 R, k  A( j    n=n+1;                         % 迭代次数加 1  5 e, h  n( W8 D# K: e+ B
end5 D  o+ x7 p) C7 b& t+ ^

; y' `1 G1 |" Y* u% M. @%% 显示方程组的解, 并将求解结果带回方程组, 验算求解结果
" N! L$ q1 ^' q: f$ T7 @0 p. Bx=x1(1)    % x 的求解结果
5 t* M% N* B' |' f% ~2 By=x1(2)    % y 的求解结果. ^/ v6 |; c2 n3 J
z=x1(3)    % z 的求解结果, e: W! v! S. L0 u; ^( S9 g
eval(f)

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-4 07:21 , Processed in 0.140625 second(s), 27 queries , Gzip On.

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

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

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