EDA365电子论坛网

标题: MATLAB源程序代码分享:MATLAB实现牛顿迭代法求解非线性方程组 [打印本页]

作者: House    时间: 2020-3-11 10:14
标题: MATLAB源程序代码分享:MATLAB实现牛顿迭代法求解非线性方程组

% @6 C3 Z% Z  f$ J  m5 |0 N4 s: {
$ K2 X& C2 ^0 L& t3 zMATLAB源程序代码分享:MATLAB实现牛顿迭代法求解非线性方程组& X8 _0 S8 j# d" h$ W% ^* \

( t' g- r7 d  [. \8 G' q
9 G, a7 H6 t" b' J* j( F) S; ?1 k; m' H& S
%% 定义一个三元非线性方程组9 Q( c8 m$ E- Y, L3 v) C! \; h
clear;clc;close all
# `/ e$ m* T" \: L' F, H% n) |1 Dsyms x y z                          % 定义符号变量 x y z
7 V( B' f& L, c. w* e! mf1=6/(1+(x-y).^2)+sin(pi*y/2);      % 方程 1# y) a" W  K# ^* o- ~1 f7 ]
f2=x*sin(pi*x)+y*sin(20*pi*y)-z;    % 方程 2# ~  E& w) H, H" Q: U/ e& _9 f; l
f3=x+2.0*y+z;                       % 方程 3
; K, M# Q5 {& W0 F) u/ C) ]5 _. I  S8 Af=[f1;f2;f3];                       % 三个方程组成方程组( t. E9 D+ j# ]- a; N' o
& ?4 I/ W! t  x% z2 ^
%% 计算雅克比矩阵
; V$ e1 u4 c. P6 y, MJ=[diff(f1,x) diff(f1,y) diff(f1,z)
) k! x4 ^5 ]( n7 e   diff(f2,x) diff(f2,y) diff(f2,z); F; Z% X* g! _9 V  j) P
   diff(f3,x) diff(f3,y) diff(f3,z)];
. d; v4 |4 S- M7 o' Z& n* t7 q  v) U" F/ }" r
%% 自定义牛顿迭代算法, 求方程组的解0 C' B9 h# a. t# z6 Q, y; t1 }
n=1;                               % 记录迭代的次数4 A- b/ H7 h, q
x0=[-5;0;7];                       % 迭代初值+ O$ u' o) Q! t* i1 U# w
E=1;. b( b2 T1 a" [
while E > 1e-4                     % 如果精度不满足要求, 则一直进行迭代, 直到满足精度为止5 A, n' k# M7 Q7 B+ |9 n( q& P, }$ K7 @
    x=x0(1);                       % 给 x 赋值
- J: t. S& R3 n5 g    y=x0(2);                       % 给 y 赋值
8 A1 `! U# Z# E8 |+ R    z=x0(3);                       % 给 z 赋值4 S  g8 Q) d7 |
    x1=x0-inv(eval(J))*eval(f);    % 迭代计算, 用 x0 迭代得到 x1
/ [2 u/ L8 T; X# c9 W1 l: t    E=max(abs((x1-x0)./x1));       % 计算求解的精度
- S1 I6 J" t* _2 O4 W! g' E    x0=x1;                         % 将当前得到的解 x1 赋值给 x0, 做为下一次迭代的值
, a' K- {$ j3 v4 Z- s* _    n=n+1;                         % 迭代次数加 1  5 C3 F2 a' ^2 h% w6 T: z
end+ ^0 |9 q( g  X2 i" @7 C
! B" n6 W% ]4 K! Y, U: L+ y: x% C
%% 显示方程组的解, 并将求解结果带回方程组, 验算求解结果
* S; q& {7 a  F2 O- z/ {% b- ux=x1(1)    % x 的求解结果' x* I+ f$ Z  N- O" x
y=x1(2)    % y 的求解结果2 w- J; q& G. ~+ ^* s5 q- I
z=x1(3)    % z 的求解结果. b) A1 L0 ]- B+ ~2 g2 d
eval(f)
作者: gaoxings    时间: 2020-3-11 17:02
MATLAB实现牛顿迭代法求解非线性方程组。




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2