|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 House 于 2020-3-12 18:11 编辑 7 [7 d. l/ T1 c( ]
k- |5 i0 f; P* }( O
MATLAB源程序代码分享:MATLAB实现四阶龙格库塔法求解常微分方程组
; B/ b* ^; A$ _7 h) ^5 \, w2 bfunction F=f(t,Y), O! D% r6 S" ~
% 定义待求的微分方程组
: D- Q+ r: x3 ~4 {( yx=Y(1);
2 H# S2 p1 C: c4 \& @% Sy=Y(2);
2 c& _# T% V' o' u6 Qf1=-x^2*(5-y);
3 n4 O; d) D* J) L2 q5 D0 df2=y*(4-3*x);
/ w) {/ H3 F) Z7 |* cF=[f1;f2];" x' l& d& t, C
end
' x. A9 f8 h2 o( r3 V, z- h1 w0 M% D: c$ f# u
8 E. l% s4 r+ H( ]" v" H1 o0 i# Y" _
3 S N* E/ U4 ]0 h; v" X0 U; j4 I
%% 定义计算的步长, 设置变量的初始值
7 c( ^: O7 t9 t, _! f. E- Cclear;clc;close all0 K9 K1 z6 ~( d1 ]. s3 ?! X
Delta=0.001; % 步长
" H+ m6 F% E8 [7 ~+ qt=0: Delta :8; % 定义自变量 t
6 P* ^" Z9 A* m- En=length(t); 4 m/ p5 e r6 A" r ~8 b& k/ t3 H
Y(:,1)=[0.5;3]; % 变量 x y 的初始值' K1 z; X; r$ }
( C# F' b% V+ `: }%% 自定义龙格库塔法, 求解微分方程组* I7 A1 u/ D R) k2 r& a$ j" A& B
for k=1: n-1
; R1 {% O+ K& } z1=f(t(k),Y(:,k));
+ T/ T G6 n7 T2 Z8 R+ }# U3 H1 G z2=f(t(k)+Delta/2,Y(:,k)+z1*Delta/2);8 h' W# h# L6 h8 k5 E) P
z3=f(t(k)+Delta/2,Y(:,k)+z2*Delta/2);
! D) l- z, k( Q+ r8 x5 v z4=f(t(k)+Delta,Y(:,k)+z3*Delta);
# P+ v* D5 Y% D' V' J- }* g Y(:,k+1)=Y(:,k)+Delta*(z1+2*z2+2*z3+z4)/6;
, ^! X8 G1 C" K4 s! iend
3 {6 N- {4 @5 g( u) r% F# B4 g4 M& ?x=Y(1,: );
, _. J/ n* o: C3 C9 ey=Y(2,: );* m% W* _9 w1 _1 }# U# h/ f7 F
! U- x" S; s/ `! C
%% 绘制 x y 的求解结果
3 m3 U' Y7 A9 p: a& Hfigure
2 M; g: J3 W. ?1 ]* lset(gcf,'units','normalized','position',[0.15 0.2 0.7 0.6]); % 设置 figure 窗口的位置和尺寸 M- L8 ?4 J" W
subplot(1,2,1)
. |. [! S$ [9 @, cplot(t,x,'b')0 o5 e: m/ |2 Q0 {( U( f
xlabel('t')
# t* V3 G$ ?& q# D0 p! l1 gylabel('x')/ v0 b: I- A9 `1 n* v6 P& {& D
( C" ]) s' A9 d$ z3 E5 ksubplot(1,2,2): M' s7 l7 n& F" l: c1 m8 s
plot(t,y,'r')
+ `, o5 [3 [- x$ i j$ O' qxlabel('t')
. O. B8 u$ i" z: G4 l! fylabel('y')
* t- z `' v2 N% b7 w; `( r1 u; A! t D# m W3 g
|
|