|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 House 于 2020-3-12 18:11 编辑
0 p% T7 D* `, c# T% @% e6 P$ G* n8 l" w9 d' C4 {; }6 K6 @
MATLAB源程序代码分享:MATLAB实现四阶龙格库塔法求解常微分方程组. \+ s. g1 n9 s: O
function F=f(t,Y)
! w* o' C) k1 x O! r" ~! o# t% 定义待求的微分方程组
$ S2 D* I9 ~0 \) t, M3 H4 Ex=Y(1);! O' r6 G+ ~3 b1 P' s# @* f$ v4 k
y=Y(2);) O: h' P- w" Q
f1=-x^2*(5-y);8 i: X% P9 g, L }- ?+ a
f2=y*(4-3*x);
& h4 N* k( d) U& p* }F=[f1;f2];
; a) X/ L8 t# wend
4 @ P7 D3 H' m6 E! ~; r. _& H6 `+ r: ~' Q$ f/ k# B7 i
+ {6 b' O2 v' J% q3 d# N. r# r/ w
7 C2 p9 e) @7 ^. c8 @6 p9 S1 H$ {- F, @6 N
%% 定义计算的步长, 设置变量的初始值
1 Z' Q6 c6 u( u6 A) j3 a& n" o7 ]clear;clc;close all
, J C% ?/ Z1 qDelta=0.001; % 步长6 i: O# T0 ?% N5 h
t=0: Delta :8; % 定义自变量 t* G1 `! l+ ]$ L' Y5 G3 W
n=length(t); 9 Z6 n5 s! X% U9 ^$ w0 O
Y(:,1)=[0.5;3]; % 变量 x y 的初始值) [3 m q: |( k8 L* J/ r: b4 B
; R' z& j0 C/ {
%% 自定义龙格库塔法, 求解微分方程组& _9 E c3 [. N5 z* \
for k=1: n-1
- u! z& q( r, Y z1=f(t(k),Y(:,k));
* I0 I% G7 I `5 Q' c( t: r B z2=f(t(k)+Delta/2,Y(:,k)+z1*Delta/2);
s+ S G$ [4 F. B z3=f(t(k)+Delta/2,Y(:,k)+z2*Delta/2);
% m( h4 _" V/ m- }; K. S z4=f(t(k)+Delta,Y(:,k)+z3*Delta);- q# t) Z& x0 A) \$ p1 j- |
Y(:,k+1)=Y(:,k)+Delta*(z1+2*z2+2*z3+z4)/6;
4 r/ W- `) l1 f3 @, uend
& Z1 l3 p/ ~" Y- P& E' Px=Y(1,: );9 x! O- Z9 ?) w3 g$ |" V" D
y=Y(2,: );7 W% j3 x/ g! {0 I, @9 l) n
- h2 @6 Z1 z! v( |& y. `, K; n%% 绘制 x y 的求解结果
$ t# P$ B3 p" j; H; M0 _6 X. T' Vfigure
- |* H- `! N8 n1 @. _$ _% Uset(gcf,'units','normalized','position',[0.15 0.2 0.7 0.6]); % 设置 figure 窗口的位置和尺寸+ E7 v+ u. Y# X9 s$ o/ c
subplot(1,2,1). i" t4 h) y" j6 h
plot(t,x,'b')' _: r2 U3 J6 P( j* E9 J( S$ t- V
xlabel('t')
/ P# T+ x# |+ hylabel('x')
5 H! @* r. J3 k2 X" O/ m* M8 {9 E; v2 Y3 R9 ?8 y1 \9 O
subplot(1,2,2)0 l9 H# @- G' w
plot(t,y,'r')8 P9 s3 O7 p2 M& ]& _
xlabel('t')
7 |0 ]6 [7 i: o$ @3 N9 qylabel('y')
( V5 O1 Q. h! E8 j1 P- }
! x1 z7 z7 T7 a) z/ J7 y+ D% X6 X( D0 w+ w |
|