|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
MATLAB源程序代码分享:MATLAB实现改进的欧拉法求解常微分方程组/ ~2 |, }1 m& f7 E
function F=f(t,Y)
1 D. p8 b/ J- E6 {8 H% 定义待求的微分方程组* H6 C( c5 J. E& H( [7 y0 b
x=Y(1);
7 b8 r7 J9 }# z0 d% M) |y=Y(2);) M$ Y" k" ~# M4 t
f1=3*y;2 R% t* g S: ^) F8 N) ]
f2=(1-x^2)*y-x;
/ D* x7 R) V' F) s$ v3 MF=[f1;f2];
- T: ]! h$ R* T( P2 Oend5 F5 k ^" j( y8 Q) n$ i
! r f6 z3 g9 N4 M Q) f- ]4 F) _2 P) s. V0 d1 ~
%% 定义计算的步长, 设置变量的初始值9 \1 I- R7 T/ ^; N" K5 b; ?
clear;clc;close all0 F/ w( p7 a/ x5 O/ w$ L# a
Delta=0.001; % 定义步长
9 u. P) ^/ D: `4 [5 z2 q: G3 dt=0: Delta:20; % 定义自变量 t$ Y& Q7 w% M6 U2 J8 K
n=length(t);% q8 D7 S- ? N& C7 V2 O/ ]
Y(:,1)=[2;0]; % 定义 x y 的初始值
7 X% f! L, O3 Q; L6 M
- R9 S! k H' h- \%% 自定义改进的欧拉法, 求解微分方程组
) E' m9 E! u( vfor k=1:n-11 t% ~7 b% A5 F! m
F1=f(t(k),Y( :,k));
3 A. Z; W( _3 | F2=f(t(k+1),Y( :,k)+Delta*f(t(k),Y( :,k)));3 d8 h$ a; D7 i
Y(:,k+1)=Y( :,k)+Delta*(F1+F2)/2;: ^3 G- b& z8 P* O
end
- m8 Y6 ]( P' I! Tx=Y(1,: );8 Q' Q; {0 j3 |
y=Y(2,: );
( j+ X* a# d9 H2 k, _# O. B: o3 U* @
%% 绘制 x y 的求解结果
* @6 `* O& y- ~, e9 N1 hfigure
! V6 L4 Z5 P$ j: }) R D, f& nset(gcf,'units','normalized','position',[0.15 0.2 0.7 0.6]); % 设置 figure 窗口的位置和尺寸: N3 p# v$ [. n: A( O/ g
subplot(1,2,1)6 t0 U* E: \: I" N+ F5 E
plot(t,x,'b')1 \' r4 ]& N8 D4 G2 E1 l
xlabel('t')
9 L, q; ^' X: h6 m# ~9 t- h. J% oylabel('x'), T7 Q5 @' p. E$ Y
2 |/ P% B t# n) a* a2 K/ J6 o
subplot(1,2,2)" n6 W* E4 C# d- n
plot(t,y,'r')
; R1 ~1 P2 E" H+ D# w& S4 t# Dxlabel('t')
; h# Q) U6 l+ w; h" l) h: v# m) Lylabel('y')2 @' H/ b7 z, d9 ?- {
+ R$ L: ^4 [1 }7 }& N0 Q
|
|