|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
MATLAB源程序代码分享:MATLAB实现改进的欧拉法求解常微分方程组
* `, T+ j8 t( ?$ W6 S! rfunction F=f(t,Y)
6 U8 |2 h! R2 @0 Q3 n2 J" b, [% 定义待求的微分方程组! G! Y6 n% q# u! d3 e' E
x=Y(1);
/ R, l) b/ G4 ^& v9 ry=Y(2);2 w4 T/ F% {' j
f1=3*y;7 o8 }! g6 C" W f$ o+ c
f2=(1-x^2)*y-x;
. I; s H, G+ p0 J! d& AF=[f1;f2];% J6 n) T* B$ a) ^9 B
end
; y( H" L1 M4 E+ E$ }* u) {9 ?6 A. q6 x
/ U1 y8 T5 t6 L; [4 i2 _( f% H%% 定义计算的步长, 设置变量的初始值- }9 M) m6 J4 B- p0 x. }" k
clear;clc;close all4 ]9 Q, o) ^+ |' v& |9 b. G' ]
Delta=0.001; % 定义步长& a9 T+ S5 H! V6 H+ P4 p, ^5 m
t=0: Delta:20; % 定义自变量 t
" j* a8 B) M: `# c9 |0 j& h6 D% |n=length(t);
2 y$ ]2 a* |0 J: o( J/ PY(:,1)=[2;0]; % 定义 x y 的初始值
3 K1 Y3 g0 r) e7 I1 K5 P" y$ [2 U) G9 [" T& v$ p( W
%% 自定义改进的欧拉法, 求解微分方程组7 F2 h' K: a0 D
for k=1:n-1' \6 U2 W+ x# R% M& b
F1=f(t(k),Y( :,k));2 h7 z. H1 V+ @( Z" Y) o
F2=f(t(k+1),Y( :,k)+Delta*f(t(k),Y( :,k)));
# a2 j# a) |! s1 p* i8 n( V Y(:,k+1)=Y( :,k)+Delta*(F1+F2)/2;
3 y+ }: n E0 y) ^' \end
, x" Y. _, z; k, |2 t- T( l4 ~/ dx=Y(1,: );) P9 N j7 d& J1 ~! S5 M( e
y=Y(2,: );
5 M( |, c+ X6 W
) W( R+ \6 Q& B; m/ F%% 绘制 x y 的求解结果
1 }3 t/ b- S( p9 T# jfigure
; t F( ~7 a% r) Qset(gcf,'units','normalized','position',[0.15 0.2 0.7 0.6]); % 设置 figure 窗口的位置和尺寸: j) n1 W) F( a7 r4 r
subplot(1,2,1). `6 m: _9 q8 R5 a* N
plot(t,x,'b')+ R- \+ e# O& E7 W: `4 o
xlabel('t')
0 q3 U; P( C; ?0 V, Nylabel('x')
$ a8 ?& a( k1 X3 T
4 {9 \2 n1 ]& c3 B& csubplot(1,2,2)
5 i: j6 c0 [. Dplot(t,y,'r')
: L& l- x( n* [6 P5 L* y$ l) nxlabel('t')
1 T) K1 _( C6 ?$ X2 _* h7 r* Gylabel('y')5 E; P6 z' I' k! p& C+ h0 l* _
* Z* z1 Z' W7 o$ [
|
|