|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
( q1 x7 _; d, F% w! D/ [+ T9 B) Z- s8 E
MATLAB源程序代码分享:MATLAB实现牛顿迭代法求解非线性方程组8 |/ V7 B2 U: _* R* x5 O s
3 S$ d; Y2 i; U* X1 s8 I
- k( v+ F+ r' ?1 V c" A- a6 {2 c
# y( Y1 S8 Q) y0 n" }; K%% 定义一个三元非线性方程组
# y3 ? W+ ~2 U- r O4 c, S/ N$ Nclear;clc;close all6 ]" G8 p9 J) D" a/ R
syms x y z % 定义符号变量 x y z
9 A; C1 n0 |: ]6 E8 Cf1=6/(1+(x-y).^2)+sin(pi*y/2); % 方程 1
; h. _4 H2 E9 Y8 d+ bf2=x*sin(pi*x)+y*sin(20*pi*y)-z; % 方程 2
8 J8 b* C1 T9 F. Xf3=x+2.0*y+z; % 方程 3( B) _* C. c8 L+ i+ p- s3 T
f=[f1;f2;f3]; % 三个方程组成方程组5 p0 w a5 Q" L* Z2 H8 X7 m
; U/ r9 T+ j: |
%% 计算雅克比矩阵
4 z" `, t0 }7 ^: EJ=[diff(f1,x) diff(f1,y) diff(f1,z) 5 w4 Y1 c) m: l5 S0 j
diff(f2,x) diff(f2,y) diff(f2,z)
g& ^+ i# x- u. Y& x* x diff(f3,x) diff(f3,y) diff(f3,z)];
: t/ H- n% U. P! U9 l y! P- f( `/ N8 Z
%% 自定义牛顿迭代算法, 求方程组的解, P' Q9 L; E: Y
n=1; % 记录迭代的次数
1 F2 ]6 y5 {( b: L/ K: I+ Lx0=[-5;0;7]; % 迭代初值 S1 H/ ?/ L) D+ S: ^2 ~# y
E=1;5 H6 M$ z4 @+ d" {# @0 Y" c5 d9 j
while E > 1e-4 % 如果精度不满足要求, 则一直进行迭代, 直到满足精度为止
2 ?" j' g1 n) |: D2 z2 d9 T2 } x=x0(1); % 给 x 赋值
6 c" e9 d2 Z: S; m. `8 e y=x0(2); % 给 y 赋值/ }( z- N. @! Z$ J/ D! J' Q9 K
z=x0(3); % 给 z 赋值
9 [- r( I/ u- v4 k2 N x1=x0-inv(eval(J))*eval(f); % 迭代计算, 用 x0 迭代得到 x10 [5 |" r: ?0 a
E=max(abs((x1-x0)./x1)); % 计算求解的精度2 C; d9 W4 r; [ b
x0=x1; % 将当前得到的解 x1 赋值给 x0, 做为下一次迭代的值
z; k. K: [; [# ~2 H/ r, J9 ` n=n+1; % 迭代次数加 1
7 g6 p, c9 s6 J8 f% G/ eend A$ L, r4 b; _# g# f
( j# ^; ]/ ^) Y. I" @: z! M0 V%% 显示方程组的解, 并将求解结果带回方程组, 验算求解结果) L3 k9 ^4 h% `8 O
x=x1(1) % x 的求解结果6 L( e) g/ W0 X R7 p& s( e
y=x1(2) % y 的求解结果 e0 P1 y/ Y) M! J
z=x1(3) % z 的求解结果
9 Q' Y8 l0 U0 G, q$ a8 g. o) Meval(f) |
|