|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
! w& n/ ?4 f% i; m/ ]+ x
4 M1 ^, q- ]6 B" GMATLAB源程序代码分享:MATLAB实现牛顿迭代法求解非线性方程组2 Z# m' r6 a( S: n6 \- g
: E5 ?9 h; u/ ~: @, V! d
- ~- ]$ p, u% r# I3 F
; L7 ?0 E* h3 O, S0 _ L( |* E: Y0 B%% 定义一个三元非线性方程组. r4 c- @' r3 l! j: d
clear;clc;close all. X* B9 j, d5 G& v; B9 H
syms x y z % 定义符号变量 x y z# [ |* d0 G' ?- g ~6 t
f1=6/(1+(x-y).^2)+sin(pi*y/2); % 方程 1
$ i/ V+ |+ l8 u# {% q7 i1 Uf2=x*sin(pi*x)+y*sin(20*pi*y)-z; % 方程 2
. @4 Q) `) [9 c% x( X% O M4 mf3=x+2.0*y+z; % 方程 3
8 f$ D7 J; B3 Q( @# m: Kf=[f1;f2;f3]; % 三个方程组成方程组; a8 e- ^1 X6 l7 x+ }' O$ l
) J+ a5 P- J. K%% 计算雅克比矩阵
/ q) j' ~7 v7 A1 l2 uJ=[diff(f1,x) diff(f1,y) diff(f1,z) * Y& W! R, j3 A# n. U! L+ B
diff(f2,x) diff(f2,y) diff(f2,z)
8 w% V% r! L' u E! j+ x2 n6 o! _# ^ diff(f3,x) diff(f3,y) diff(f3,z)];5 q) s5 F2 C- q; { k
0 G! h1 i, [2 ]6 g2 \%% 自定义牛顿迭代算法, 求方程组的解
* g9 d3 ^2 o! r' K" [6 wn=1; % 记录迭代的次数
$ h) C/ ?8 Y. z+ r+ J5 Ux0=[-5;0;7]; % 迭代初值0 W7 [! B+ t. ~3 @) u0 q K; X5 s
E=1;" I9 B# |" N0 y& g8 a( N
while E > 1e-4 % 如果精度不满足要求, 则一直进行迭代, 直到满足精度为止
3 `" r- L9 v6 M! i x=x0(1); % 给 x 赋值
. H) j% C- d( t+ C4 m) x7 O7 @ y=x0(2); % 给 y 赋值
4 P2 h* L' |' e+ g) e; Q; O z=x0(3); % 给 z 赋值
' {5 {* |% [0 L) c& F x1=x0-inv(eval(J))*eval(f); % 迭代计算, 用 x0 迭代得到 x1
' E# u/ H; N: N& X* |6 k* y E=max(abs((x1-x0)./x1)); % 计算求解的精度4 w9 {4 `& d) ^8 q) }, A
x0=x1; % 将当前得到的解 x1 赋值给 x0, 做为下一次迭代的值4 h, J* N1 x0 O9 z
n=n+1; % 迭代次数加 1 A6 N% j3 K2 Y( O( D5 V3 {0 F* q C5 b
end9 e( W& }; ]2 U D/ d
n: @2 G$ d: n: P
%% 显示方程组的解, 并将求解结果带回方程组, 验算求解结果! s, S% `6 p0 z
x=x1(1) % x 的求解结果; ~% d, C, R2 y
y=x1(2) % y 的求解结果4 ~9 F* a1 G7 \. k
z=x1(3) % z 的求解结果7 X- [+ x2 o: g3 e3 X
eval(f) |
|