|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 House 于 2020-3-12 18:11 编辑 8 n7 |% g' y+ @# B
" q" z) }% [+ P( N
MATLAB源程序代码分享:MATLAB实现四阶龙格库塔法求解常微分方程组
& v" R! r2 C& M3 wfunction F=f(t,Y)) K5 A. U( w& [' Q& ?
% 定义待求的微分方程组: r3 {% Y3 F* y/ z2 [
x=Y(1);
9 h e; a: y) ~ ]y=Y(2);" f# }' q x. ^
f1=-x^2*(5-y);
$ e' ]4 Y2 q1 ^0 D2 T* wf2=y*(4-3*x);4 }4 w5 A$ f. b0 T/ f2 \( S" y( X u3 C
F=[f1;f2];
& u" o1 K- J+ I- [" C+ J" S1 a( Yend
* ^2 q6 p Z' m+ n1 c
8 c k3 S8 h3 i W; N; A
0 W! o; R5 B/ t( @' l) }% J$ t' d3 K8 a0 g
1 o2 r9 s; E1 N# f/ ~, |* X6 W%% 定义计算的步长, 设置变量的初始值7 S- i% w: B. l' K$ |- p' n& ?
clear;clc;close all: z3 B% g+ h+ Q9 P F) L
Delta=0.001; % 步长
2 l& l l0 m( a, `; g& At=0: Delta :8; % 定义自变量 t
! r5 E$ m4 v' p7 e! [% q) O/ ]# }n=length(t); $ s0 T4 X, F3 u8 W. z. ?
Y(:,1)=[0.5;3]; % 变量 x y 的初始值4 q; D5 k: j" |- J) x1 y5 R" g
3 H( x0 F( r! L. f8 M%% 自定义龙格库塔法, 求解微分方程组
- ^. k* l7 v0 y6 H/ {+ S+ Sfor k=1: n-16 x% z& E1 t$ v4 }+ n, o" Q
z1=f(t(k),Y(:,k));
5 s0 h9 U! E9 s( S8 N7 D z2=f(t(k)+Delta/2,Y(:,k)+z1*Delta/2);) u# r$ k" J9 K- w2 I
z3=f(t(k)+Delta/2,Y(:,k)+z2*Delta/2);: g1 Q' t k& n5 J
z4=f(t(k)+Delta,Y(:,k)+z3*Delta);
9 X, I+ z, k( O J( l Y(:,k+1)=Y(:,k)+Delta*(z1+2*z2+2*z3+z4)/6;6 R) V7 E2 E) K7 L
end
) I1 w& V1 o' {3 c- g) R3 }! Cx=Y(1,: );; W. F( u! @ `; B% ^. c
y=Y(2,: );
$ ^8 Y: L( J5 j( ]6 W @
' l5 z3 p' z. a% g X5 t8 l4 r7 ?%% 绘制 x y 的求解结果
- L) v+ Z2 ?+ o$ A3 Rfigure
7 R! {- ]+ h& o4 P- Bset(gcf,'units','normalized','position',[0.15 0.2 0.7 0.6]); % 设置 figure 窗口的位置和尺寸. G) c/ D/ W. _" M* Z# E
subplot(1,2,1)+ r8 e; o/ g% p" p! P0 f I
plot(t,x,'b')
) i0 @9 c) H. J+ n0 Pxlabel('t')4 b7 E: W5 v: ?. a; i3 [3 }
ylabel('x')( r; S& S3 u3 r! J6 `- X* S; e8 z
% U- {7 ^5 N' f# I7 K B
subplot(1,2,2)
/ B/ W1 b9 J1 y5 F9 eplot(t,y,'r')
2 S5 R' C" _3 k6 D, y5 s/ \% \xlabel('t')
2 Q0 X0 c1 L* C6 k0 G8 d, Jylabel('y')0 z+ \7 V, D A
, M) B9 n* i; P6 q8 e: Q |
|