|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 House 于 2020-3-12 18:11 编辑
! h/ \/ a0 B/ r0 V7 b2 |- M* _0 h$ q5 C( w/ @
MATLAB源程序代码分享:MATLAB实现四阶龙格库塔法求解常微分方程组' {- @/ ~% h0 y: r* J4 W3 ?8 B' q. B/ R
function F=f(t,Y)
& ]& R+ {8 k8 U5 k% 定义待求的微分方程组8 K/ R' E* e: w0 P8 q
x=Y(1);
8 N% X0 C) |* |* t8 Wy=Y(2);0 L% m3 b/ u) J! _
f1=-x^2*(5-y);6 p% @& Q& l; P1 [" F5 q4 E
f2=y*(4-3*x);
: Y8 s" r7 N0 aF=[f1;f2];
, _: N6 U: m6 v; A* s- nend
: y/ H" u# ^2 d5 |, H, \8 V
: m: k0 B3 z5 B7 p7 Y0 Y2 ]) o7 p: w8 {6 H i- g
) m* G+ l) u$ _: y1 f, ^4 w) M1 y% \, K4 [
%% 定义计算的步长, 设置变量的初始值, W/ n5 P( S# M F# F+ F8 X
clear;clc;close all, T2 ~# | q! G- i0 M! a% ~6 H
Delta=0.001; % 步长, T/ p0 Z+ c! Z8 [! \: x
t=0: Delta :8; % 定义自变量 t# S' k7 q+ H% V+ \9 \
n=length(t); 6 p# _( _! c; O8 R, _: J# ^% l
Y(:,1)=[0.5;3]; % 变量 x y 的初始值
3 r8 Q8 v- H* X$ A9 w5 H3 `& j/ v% i* [
%% 自定义龙格库塔法, 求解微分方程组
( L( e+ X4 I) C; e' W/ a0 K9 Wfor k=1: n-1
m: @9 F* {6 h2 ?. N1 z z1=f(t(k),Y(:,k));
+ O; r/ D+ Q2 _$ j5 ?# Y3 q2 h z2=f(t(k)+Delta/2,Y(:,k)+z1*Delta/2);0 {6 o k' a) {3 T
z3=f(t(k)+Delta/2,Y(:,k)+z2*Delta/2);
& N: D% x1 |! g) }7 i9 j6 Q z4=f(t(k)+Delta,Y(:,k)+z3*Delta);
9 f; ]3 X4 ^" f: H Y(:,k+1)=Y(:,k)+Delta*(z1+2*z2+2*z3+z4)/6;
) e; ?9 M z Pend& u8 m9 _, \# @! v
x=Y(1,: );
1 t5 h" [* J, X# z& @y=Y(2,: );
8 I& {! J! j8 `
$ k1 b, s* c5 b: `, f% }%% 绘制 x y 的求解结果
$ a& A0 c* V! @ m% M2 K9 v1 P2 mfigure6 c: m1 c9 H) }* a) f% j p
set(gcf,'units','normalized','position',[0.15 0.2 0.7 0.6]); % 设置 figure 窗口的位置和尺寸* H p2 X( p0 v$ l
subplot(1,2,1)/ q1 p- f) L: ~) Y5 z
plot(t,x,'b')$ v" W( ~. @5 k; R
xlabel('t')
D' k6 y5 T" e I+ p* Uylabel('x'), o& W7 p) E {' z" B- p2 w
) A: C! H! g2 d! L
subplot(1,2,2)5 \7 S, G# R" i: L
plot(t,y,'r')' c3 }; V0 R! @# z7 c" M2 _
xlabel('t')
0 U( S0 p" P5 tylabel('y')( P9 f5 g9 }( e% ]! K
# Q( D5 ]) i3 i% K: }3 ?4 A( ^
|
|