|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
$ |2 P3 i8 W) _& j# v: [, W
# b% S$ a- }' X; R7 |MATLAB源程序代码分享:MATLAB实现牛顿迭代法求解非线性方程组7 ~" T/ Q5 M( C
: r9 W# E' p( P) c- x" V" K9 N
+ z/ {( H4 A/ ~, k
( ~; A ]" a! N+ X%% 定义一个三元非线性方程组4 W( @) ^# _( D' T* k& Y% e
clear;clc;close all
9 f( d) f8 d' U5 Lsyms x y z % 定义符号变量 x y z
0 B1 {, b* L2 E0 M5 U+ Sf1=6/(1+(x-y).^2)+sin(pi*y/2); % 方程 1
8 x5 u7 k9 l" g+ p$ n( x' g% Y# ff2=x*sin(pi*x)+y*sin(20*pi*y)-z; % 方程 2
; v) p: F6 o1 ?4 `f3=x+2.0*y+z; % 方程 3
% p/ n& W' Q$ zf=[f1;f2;f3]; % 三个方程组成方程组6 ~& K. ^1 X+ U- ~- `0 _
( [- Y/ j' h7 ^5 K! j% S
%% 计算雅克比矩阵
* A( A( E( B% {7 `J=[diff(f1,x) diff(f1,y) diff(f1,z)
6 p1 Y! \+ b" D* P; T4 l diff(f2,x) diff(f2,y) diff(f2,z)
! r) z3 @: v3 w/ K: }- e diff(f3,x) diff(f3,y) diff(f3,z)];! ?0 h5 ^0 k# F3 ~
7 A1 `4 m8 u; N9 h$ n%% 自定义牛顿迭代算法, 求方程组的解
6 `9 \- H' }& j( m: r$ U' wn=1; % 记录迭代的次数4 u7 _4 I4 e. D1 W( x; j0 ~
x0=[-5;0;7]; % 迭代初值
9 d( P# n0 P$ Z1 HE=1;
$ b" B8 h! [, C8 U, u y9 L1 b* ?while E > 1e-4 % 如果精度不满足要求, 则一直进行迭代, 直到满足精度为止; A6 y# Z, u- @# t$ h
x=x0(1); % 给 x 赋值 `) G/ G: a7 v8 ]: @7 W' r8 V6 y
y=x0(2); % 给 y 赋值) `8 ^. X8 E3 j7 ?
z=x0(3); % 给 z 赋值, F) u, O! h4 u" y+ }
x1=x0-inv(eval(J))*eval(f); % 迭代计算, 用 x0 迭代得到 x19 k; M) @% H8 C J G
E=max(abs((x1-x0)./x1)); % 计算求解的精度. i9 O. e5 U7 n, B2 o
x0=x1; % 将当前得到的解 x1 赋值给 x0, 做为下一次迭代的值! @# w# `8 q6 U, J3 `9 M8 J$ U
n=n+1; % 迭代次数加 1
' t2 K8 g4 H# T( X3 O0 J& }2 m$ cend
, w! `& m; S* g: m8 h. t3 `$ N9 `. G0 y+ J8 b J
%% 显示方程组的解, 并将求解结果带回方程组, 验算求解结果
3 n6 { V: I5 Y) ^1 Ex=x1(1) % x 的求解结果" R% ^8 U' ]& F, i- g9 h) ?/ T
y=x1(2) % y 的求解结果
* U6 Q" ?% |$ U0 F' Y) L- lz=x1(3) % z 的求解结果
" ^7 m$ ^+ a% @- ^, jeval(f) |
|