|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
3 V+ W# R, j; `; D" B" N& d0 S/ v: D9 V9 q, O
MATLAB源程序代码分享:MATLAB实现牛顿迭代法求解非线性方程组
/ k7 [& ^! `+ b0 X) G1 J4 I. d% B( T* F) i8 P% O
; ], t; ?6 v- P, j& x8 c: X5 j0 d' l5 h: l, J, d8 d. e
%% 定义一个三元非线性方程组+ F# M: n' h% }# o
clear;clc;close all8 |* N: F# f' v, m& u1 }
syms x y z % 定义符号变量 x y z
5 X- Z0 |6 b) S; r4 Nf1=6/(1+(x-y).^2)+sin(pi*y/2); % 方程 1
. c5 ?1 H" p# e; h1 Qf2=x*sin(pi*x)+y*sin(20*pi*y)-z; % 方程 2
' \3 B, W* C0 \+ u: yf3=x+2.0*y+z; % 方程 3
0 a1 p% U ]5 \, lf=[f1;f2;f3]; % 三个方程组成方程组
1 E9 _% ?( H% d, h( E" _6 X7 ?" N& q5 ^$ t- D2 C% ~
%% 计算雅克比矩阵
/ L9 ]/ N! k- KJ=[diff(f1,x) diff(f1,y) diff(f1,z) 7 q( J( {& x1 j0 g4 d2 e7 W& k
diff(f2,x) diff(f2,y) diff(f2,z)
* o: o, i1 S$ T, k diff(f3,x) diff(f3,y) diff(f3,z)];, {/ n4 V) L% B( P6 q% J
& p' p- _0 c" L3 S! V%% 自定义牛顿迭代算法, 求方程组的解+ D6 n5 p$ V- E/ C5 g8 C
n=1; % 记录迭代的次数
- i ]0 a* E! D5 |x0=[-5;0;7]; % 迭代初值" H) ^) q0 }4 i5 X3 d- y% h0 D& L, M
E=1;. B" f* K W6 K, M/ k3 S2 ]
while E > 1e-4 % 如果精度不满足要求, 则一直进行迭代, 直到满足精度为止
+ h# l8 y @2 G, I6 i0 T x=x0(1); % 给 x 赋值
m* z& v. H" }* n, g y=x0(2); % 给 y 赋值
0 s# M$ c! c9 M z=x0(3); % 给 z 赋值
3 F# c# d1 _, f) a; h' \% [ x1=x0-inv(eval(J))*eval(f); % 迭代计算, 用 x0 迭代得到 x1
/ T, O2 ?; h- y: m# a* L2 X/ z+ h5 C E=max(abs((x1-x0)./x1)); % 计算求解的精度# }8 T* Z7 P% D* F
x0=x1; % 将当前得到的解 x1 赋值给 x0, 做为下一次迭代的值, `& C. J3 h0 U" \
n=n+1; % 迭代次数加 1
9 i% b) p% f8 R3 iend
9 j( T/ K+ k l2 F$ d. C' |, t; q' W/ _9 N0 m
%% 显示方程组的解, 并将求解结果带回方程组, 验算求解结果' J+ Z4 c0 E6 f Q
x=x1(1) % x 的求解结果
0 X7 O# @5 Z5 h2 v8 Yy=x1(2) % y 的求解结果4 ^$ X! y; `8 G, f8 O2 K. C
z=x1(3) % z 的求解结果
+ T/ v. a# j' [" M/ N. p' V3 beval(f) |
|