|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
( e* p% `4 o6 C0 w# q" q1 v
! X/ E& s2 {6 g- ZMATLAB源程序代码分享:MATLAB实现牛顿迭代法求解非线性方程组 o6 ^; b# W) m+ O0 I, D3 ]! F' `
- o$ J+ ~0 b' u9 W+ B5 C8 _* j- d
* V6 O4 T& W$ {0 U2 ]& R# w1 B
4 |7 m9 L0 ]+ }; E
%% 定义一个三元非线性方程组( ~! I& p* i# s9 W
clear;clc;close all/ o! F B8 ^+ T2 ?: d3 N0 [
syms x y z % 定义符号变量 x y z
N% L: N& z; x1 F! lf1=6/(1+(x-y).^2)+sin(pi*y/2); % 方程 1
% H5 j# y# a9 z0 W* f4 l Q3 Bf2=x*sin(pi*x)+y*sin(20*pi*y)-z; % 方程 2
& }: G* e+ `- x' f. W8 G. Y7 gf3=x+2.0*y+z; % 方程 3
* W) L+ u* X! P2 @; g9 wf=[f1;f2;f3]; % 三个方程组成方程组
$ t+ `/ Q# j- h) W: [0 l0 N& l n- l l1 w- @. O
%% 计算雅克比矩阵. a' R! i% B4 @) i' d% y
J=[diff(f1,x) diff(f1,y) diff(f1,z) 3 w- A. o% X- M/ P: a- W
diff(f2,x) diff(f2,y) diff(f2,z); |0 W2 |' Z( K% y# }% R! c
diff(f3,x) diff(f3,y) diff(f3,z)];
" M5 z" {! z5 p1 S$ g" \
9 W1 G6 ?) b. l+ q8 [ ?. ~%% 自定义牛顿迭代算法, 求方程组的解7 X3 T' }- g4 Q2 ` t/ a% E0 U9 N& T
n=1; % 记录迭代的次数) [+ b8 e* }, I- |/ Z
x0=[-5;0;7]; % 迭代初值4 g0 x8 q' i' c5 }
E=1;0 V/ ?" K& D d% i
while E > 1e-4 % 如果精度不满足要求, 则一直进行迭代, 直到满足精度为止
9 m" {, u4 w7 x9 `. M3 O2 F# l& X5 A7 z x=x0(1); % 给 x 赋值# l( j! _) J, B _! h( ~/ {
y=x0(2); % 给 y 赋值6 z& A1 L+ n% W; F
z=x0(3); % 给 z 赋值
6 ?# C, o; O2 o( Z* ?6 F+ a x1=x0-inv(eval(J))*eval(f); % 迭代计算, 用 x0 迭代得到 x1
) ?1 Z6 \! ]! w t @0 @0 `: z( a5 H E=max(abs((x1-x0)./x1)); % 计算求解的精度& M" d* o" R' m5 D
x0=x1; % 将当前得到的解 x1 赋值给 x0, 做为下一次迭代的值* N4 c) m2 @: u* n" M; d
n=n+1; % 迭代次数加 1
! `/ @6 u( e+ J8 U$ I/ o) ^end5 p [3 c! J6 ]
- h6 v* L+ d& \0 B9 h( [" h%% 显示方程组的解, 并将求解结果带回方程组, 验算求解结果
/ J" V- ?% h5 T& w0 | wx=x1(1) % x 的求解结果
% c! d- R- x1 v, r' u0 T3 iy=x1(2) % y 的求解结果
% O/ s8 R }* w4 U9 G8 Sz=x1(3) % z 的求解结果$ G' @. E9 h1 q. f
eval(f) |
|