|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 House 于 2020-3-12 18:11 编辑
/ e( g) G# ~0 `% J, f
' M% F8 ]! v- A8 QMATLAB源程序代码分享:MATLAB实现四阶龙格库塔法求解常微分方程组
5 t/ B, z* t1 y( r( R, e& G$ Cfunction F=f(t,Y)3 s7 B% A7 w$ v3 {' V8 R
% 定义待求的微分方程组* Q# E' n& E! S5 T& _- ^/ B2 i
x=Y(1);# ^6 n& y+ O+ O" h
y=Y(2);
1 T+ X' @( X$ |# l( r' bf1=-x^2*(5-y);
8 ~" k1 {+ ?& Zf2=y*(4-3*x);. s, z" s% C- e! x7 T0 x# N
F=[f1;f2];/ \1 O3 L& Q2 F8 U
end
$ V8 l5 F( d. u& v4 ] f
: o4 x9 g8 r/ H! P* C9 A0 ?3 A! F6 I" g9 J$ }! U: } R j+ m
' p4 _' x1 J- ]+ i. s# u% A
' V: U8 |0 W' \& \. d6 s3 t5 M%% 定义计算的步长, 设置变量的初始值
8 T! h9 q8 t- Z1 Aclear;clc;close all
: ?; _4 B, Y8 E0 zDelta=0.001; % 步长
/ }5 I/ M$ t. H( S# l& z% j" m3 G1 K3 |t=0: Delta :8; % 定义自变量 t
0 Y# ~2 J4 s/ i! t! w1 Z5 ~n=length(t);
# B' a. W4 D! {, ]$ \Y(:,1)=[0.5;3]; % 变量 x y 的初始值. e" n. b; A3 `# E7 d: H+ I4 y2 w
2 n( a4 ?# _; t; U
%% 自定义龙格库塔法, 求解微分方程组
& k4 X; W- Y* p3 d0 C8 G7 Mfor k=1: n-14 a$ y1 R$ k* g0 V w/ U, _
z1=f(t(k),Y(:,k));, D% E F# G3 f B$ a2 B( v
z2=f(t(k)+Delta/2,Y(:,k)+z1*Delta/2);
/ v* d- u2 M# l0 B( { z3=f(t(k)+Delta/2,Y(:,k)+z2*Delta/2);
4 R% m/ ]) A1 ]: P+ y z4=f(t(k)+Delta,Y(:,k)+z3*Delta);
F% Y, t9 w6 |: a Y(:,k+1)=Y(:,k)+Delta*(z1+2*z2+2*z3+z4)/6;
1 O% @* c+ b4 L% @, |- Xend
- u* k$ I! D1 C$ wx=Y(1,: );
) R' f R! x; Z n9 @- Y0 e+ gy=Y(2,: );
" W+ _3 i8 ^4 ]; N/ |( j, P' V1 h6 h: s0 z$ P$ }
%% 绘制 x y 的求解结果
& ~" Q' \3 n3 _figure
& H! t( p3 `; R sset(gcf,'units','normalized','position',[0.15 0.2 0.7 0.6]); % 设置 figure 窗口的位置和尺寸" F4 i# u# }2 N4 W) l* [2 L! j! m- _
subplot(1,2,1)
3 _* ?3 F/ A% }; r- kplot(t,x,'b')
2 M) f+ ^8 P7 t$ j' i/ v; \xlabel('t')! H7 ^ l. I) n/ B6 o
ylabel('x')2 }+ [# U/ N4 O. U3 q. o2 ]
% l9 I' o0 I9 g( b
subplot(1,2,2)! \/ _# G) j* G+ q; V& B( E
plot(t,y,'r') ?3 F! F: T! x
xlabel('t')- e# i0 ~, v1 ^: ~2 |: Y$ Y' B* h
ylabel('y')
, I: \' d" {% R
6 Z, M" M( r" K0 i |
|