|
|
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) |
|