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 z
MATLAB源程序代码分享:MATLAB实现牛顿迭代法求解非线性方程组
& X8 _0 S8 j# d" h$ W% ^* \
( t' g- r7 d [. \8 G' q
1.png
(107.02 KB, 下载次数: 9)
下载附件
保存到相册
2020-3-11 10:14 上传
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 D
syms x y z % 定义符号变量 x y z
7 V( B' f& L, c. w* e! m
f1=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 A
f=[f1;f2;f3]; % 三个方程组成方程组
( t. E9 D+ j# ]- a; N' o
& ?4 I/ W! t x% z2 ^
%% 计算雅克比矩阵
; V$ e1 u4 c. P6 y, M
J=[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- u
x=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