| 
 | 
	
    
 
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册  
 
x
 
MATLAB源程序代码分享:MATLAB实现改进的欧拉法求解常微分方程组: m) s; o8 D% `6 v- L% f$ @* B  y 
function F=f(t,Y) 
$ D* F6 l4 |1 W' Y* c: L% 定义待求的微分方程组 
6 k7 ]3 U+ m+ K8 v; Yx=Y(1);$ q" N6 m1 l0 P" C7 I2 i2 u 
y=Y(2); 
3 N2 g! D# ^6 k) Q5 sf1=3*y;: I7 c* [/ ]- o 
f2=(1-x^2)*y-x; 
. O4 c" ~7 C. V& rF=[f1;f2];: F) d7 c! z: t& S8 y. e 
end% g7 v0 V* {7 H. Q0 P; w8 w 
 
/ C7 L8 D6 P4 I3 m! [9 C, I/ B 
- G; ?5 [& ]" x% F4 b4 H%% 定义计算的步长, 设置变量的初始值 
& s3 n$ j: N  Eclear;clc;close all 
0 H! U7 |: Y- U+ i  y4 N/ JDelta=0.001;      % 定义步长 
% k) r* |& J! `" |2 ]6 I  [2 |+ J* y2 ot=0: Delta:20;     % 定义自变量 t 
# ^* n0 B+ O0 z( Y7 Ln=length(t);, U* E% [# _3 w8 O 
Y(:,1)=[2;0];     % 定义 x y 的初始值) w$ j3 f+ A# @, I6 A0 `5 S 
 
$ a# A# {9 y( T%% 自定义改进的欧拉法, 求解微分方程组: h0 {: ^! r- y: P2 T9 { 
for k=1:n-1 
/ c; l, m$ Y* n) A0 }    F1=f(t(k),Y( :,k)); 
& Z0 ~0 M, S& \  }' d* Y% X    F2=f(t(k+1),Y( :,k)+Delta*f(t(k),Y( :,k))); 
8 W4 c+ i! ?+ L    Y(:,k+1)=Y( :,k)+Delta*(F1+F2)/2; 
3 w6 }# r. J$ I; ^9 |' Rend 
5 s' l6 ]; U9 P. ^' D5 Sx=Y(1,: ); 
: F! a, P/ C  A3 Cy=Y(2,: ); 
7 ^' Z+ u6 `: ^, Z0 k0 r" e) n4 f- p 
' {9 k/ X& O! ?) n# e. P. h%% 绘制 x y 的求解结果 
+ r. l" i' n  X# W1 E3 _9 Wfigure& U+ d, a" B, p( X 
set(gcf,'units','normalized','position',[0.15 0.2 0.7 0.6]);  % 设置 figure 窗口的位置和尺寸$ r3 b" p" |' B7 _ 
subplot(1,2,1)5 T' {. D5 g2 A( {2 L 
plot(t,x,'b') 
4 F# C1 N0 i4 D6 L$ Fxlabel('t')$ I; J. P5 D% R7 b. p 
ylabel('x')3 |/ S8 Y9 x% n% `+ J7 e) d; p 
 
0 i4 J" B# c& e( [6 [9 rsubplot(1,2,2)/ t3 N, v5 e( X8 a 
plot(t,y,'r') 
0 i6 f: e7 U- o; o0 k: Ixlabel('t') 
8 n& e1 Q/ j. c. L, i3 `ylabel('y') 
- r' J1 q9 n: ^  k; D4 N; p( s/ B# R& h# y  M 
 
 |   
 
 
 
 |