EDA365电子论坛网

标题: MATLAB使用自定义的欧拉法求解常微分方程组 [打印本页]

作者: House    时间: 2020-3-10 10:36
标题: MATLAB使用自定义的欧拉法求解常微分方程组
本帖最后由 House 于 2020-3-10 17:43 编辑 : i. `5 _3 L# I6 {
. t: i% e) T# ]6 F: t# G; j( B
MATLAB使用自定义的欧拉法求解常微分方程组5 d' w& ]* M" @: I- m; J
2 A. p  l2 f5 ?8 {- X: P) D5 R

* I& p# j) N9 W0 m' \* D
9 G3 B: \2 B+ v; w, Cfunction F=f(t,Y)9 L8 C: b! t! ]) v! w' J
% 定义待求的微分方程组! n, W% o4 w2 i7 C- r- J
x=Y(1);
! G+ b9 V0 C% i' u- d- O* w; ~9 Dy=Y(2);" @  [) O' L, v& L( ^/ Z( B% e4 w
f1=3*y;) J7 @0 T% v9 [; r0 t9 `& i
f2=(1-x^2)*y-x;' w$ m7 K( @: E  X# t
F=[f1;f2];
0 }  e8 n' R# mend( A7 b3 Q- m3 U
# D: i8 N; m- z# m
8 |! A6 P1 Z% g* N
%% 定义计算的步长, 设置变量的初始值0 V- ?$ L7 p3 K3 b
clear;clc;close all
, x. B6 f6 P) `# {' FDelta=0.001;      % 定义步长8 t, H  x+ ^+ d# u+ W
t=0: Delta :20;     % 定义自变量 t) L8 u2 J# |" f, U7 Z* {1 [4 l
n=length(t);" v% A4 X" m5 }6 k% v
Y(:,1)=[2;0];     % 定义 x y 的初始值
8 M5 F7 `8 s) v2 m9 s% a
8 y9 J/ G0 k  c* l; ]; |1 z- i4 W%% 自定义欧拉法, 求解微分方程组
3 W# E5 X1 ^4 I' e& L. Dfor k=1:n-1$ \7 q% h7 ?+ T
    Y(:,k+1)=Y(:,k)+Delta*f(t(k),Y(:,k));7 B) f% p) K% p) b
end4 M) h1 R  r  u; D' j' t& [  d
x=Y(1,: );0 U+ W: y9 p1 k2 Y/ }4 _' f- X
y=Y(2,: );
( t7 @( k6 o% p. i: V
7 r% F1 N5 s7 q%% 绘制 x y 的求解结果
. r4 D, K8 s" F. ]) `$ Afigure5 H" T0 c4 [* T; _# i
set(gcf,'units','normalized','position',[0.15 0.2 0.7 0.6]);  % 设置 figure 窗口的位置和尺寸! e( w$ f! ]( L, `3 @
subplot(1,2,1)6 t" D* f8 l" |' V5 t+ |
plot(t,x,'b')  _  t% D+ E& Z) w% m6 O
xlabel('t')
6 h! ?4 k% B' B. r- m! \5 eylabel('x')( s5 s" n6 S3 k1 A

2 @- `7 r$ L/ Zsubplot(1,2,2)
& K$ x1 B& `- E2 l5 {$ n6 kplot(t,y,'r')
* i5 z- p1 U% a+ Jxlabel('t')* H  D, G  U' _9 s
ylabel('y')
/ w' @4 J8 H8 ^5 y( P% c6 Y; m$ K! N1 ~" a  n
+ S; {8 C6 S6 K

! ?, L. m6 f- s! L# m! M# x* p
作者: wu68aq    时间: 2020-3-10 17:43
谢谢楼主分享的代码。




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