|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
MATLAB源程序代码分享:MATLAB实现改进的欧拉法求解常微分方程组
7 s8 x2 e+ n5 C4 C0 A: `function F=f(t,Y)6 ^3 i4 z" F+ S _1 C
% 定义待求的微分方程组 ]' F% n# q: _; Y
x=Y(1);
3 G, r' V- y0 Z2 w6 ey=Y(2);
+ m1 r4 n: L# o7 mf1=3*y;" P# c4 T" {: e1 N) L) z: r
f2=(1-x^2)*y-x;
1 N; m" C; D3 I& y2 @F=[f1;f2];' A/ b3 d- C, t' ~4 W
end
; p" ~, a9 H- V( V$ a) l" ?* u8 ?9 y
) N! c7 [% ~/ d) @
%% 定义计算的步长, 设置变量的初始值1 Q! {0 n( _" ]
clear;clc;close all4 O# O+ N1 n2 f5 ?# m
Delta=0.001; % 定义步长
3 S4 @/ f, E- X6 c% _/ at=0: Delta:20; % 定义自变量 t
$ y! m8 P U* C% ?+ Zn=length(t);
0 V- A& w, r1 O q# L4 A- o4 kY(:,1)=[2;0]; % 定义 x y 的初始值
2 R/ h# Q4 _# D3 D$ d4 b) ?: m7 u3 \$ b/ T) @3 g
%% 自定义改进的欧拉法, 求解微分方程组: ?& V z0 l9 B ]+ r
for k=1:n-1% c5 g+ `, Z) m+ q$ q
F1=f(t(k),Y( :,k));
9 Y$ u0 X' W w) j0 B! g: u F2=f(t(k+1),Y( :,k)+Delta*f(t(k),Y( :,k)));
% l% s8 r+ V; L6 O% p Y(:,k+1)=Y( :,k)+Delta*(F1+F2)/2;
; {. x; B" s. T4 k/ W/ Hend) O' |" n+ ] C! v
x=Y(1,: );
) [5 ~" x; o# Y; By=Y(2,: );2 A( R- l7 P% r1 N. `- r+ |
9 w. R: l. f* O- S7 Z
%% 绘制 x y 的求解结果
9 | G5 L2 \% U: k1 wfigure+ ?, r0 h+ C2 \; L; t7 z! b) e
set(gcf,'units','normalized','position',[0.15 0.2 0.7 0.6]); % 设置 figure 窗口的位置和尺寸
U( L& n5 ^! R' y2 r4 Osubplot(1,2,1)0 \) _; A6 m/ I0 ~- G7 }+ m
plot(t,x,'b')2 V! A! N; l, f. {( m" y
xlabel('t')& ?9 y! m6 p1 N' m1 j* Y/ t
ylabel('x')
# X4 g4 B9 I6 |/ K9 R& o
4 [6 X2 n( T7 \3 D7 h( x0 E. }subplot(1,2,2)# d+ S* t' Q5 z' i5 K1 T/ ]2 ~
plot(t,y,'r'), X/ L. O& y$ W9 C
xlabel('t')
1 D3 k; x1 i H- ^ylabel('y')! k. [9 o; M0 X' K
) L, L) O' h/ z' ?) A
|
|