|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 House 于 2020-3-12 18:11 编辑
7 k L2 G+ l5 j, ~6 Y3 b3 V0 ~4 [2 J, U2 F6 D; }
MATLAB源程序代码分享:MATLAB实现四阶龙格库塔法求解常微分方程组
0 R- p3 N. O) g9 Yfunction F=f(t,Y)
( V5 b5 L6 u# s) T3 a- E% 定义待求的微分方程组5 R* a: Q8 K5 E, X* ^
x=Y(1);" [: m' A* Z# c/ a$ o0 X
y=Y(2);# F. y) f1 P# F8 s8 P
f1=-x^2*(5-y);
. n* ? P7 H7 G# W9 h3 a$ L" \f2=y*(4-3*x);0 G# g% j8 z8 |" w- l |1 O/ b
F=[f1;f2];* L" x+ A8 r3 C: J# I; t. ~
end1 I1 \3 S/ a y5 m: c2 h
+ z) ?8 W* N! o* W) K, }; R- ]$ r# w w3 ^# L/ j
' `6 |0 R$ {4 a0 ^( x; n8 B, c7 `
, S- o4 V: b* B5 `4 g: v%% 定义计算的步长, 设置变量的初始值
! C& W. ]$ _- c1 i" {" Z+ Fclear;clc;close all: n7 J5 |3 b4 A* C7 I
Delta=0.001; % 步长/ e2 j A5 j; ?( D
t=0: Delta :8; % 定义自变量 t C; C% e7 y1 i; T0 ?2 A8 d
n=length(t); ! t( v0 @- u9 J9 @/ I
Y(:,1)=[0.5;3]; % 变量 x y 的初始值( ?5 m7 U/ f" \4 B. C) h
. f* u5 Y+ F0 ]3 m% s%% 自定义龙格库塔法, 求解微分方程组
+ [+ f/ ^/ k: R/ v' R( ~. Gfor k=1: n-16 G. g7 T9 B, h" E
z1=f(t(k),Y(:,k));
- l0 x% O: X+ a8 \ z2=f(t(k)+Delta/2,Y(:,k)+z1*Delta/2);
2 ~$ g$ N g. m z3=f(t(k)+Delta/2,Y(:,k)+z2*Delta/2);+ R/ r$ v! |) b- _
z4=f(t(k)+Delta,Y(:,k)+z3*Delta);8 Q) s5 H5 e. s3 i$ P
Y(:,k+1)=Y(:,k)+Delta*(z1+2*z2+2*z3+z4)/6;3 N% o1 x+ l9 o6 Z0 Y
end
4 H$ e% m- S$ Q; h% kx=Y(1,: );% J/ R1 T2 t) A/ G8 |1 l4 K, Z
y=Y(2,: );
9 \, ?6 [9 ~( Q' W! z1 M1 I' p/ X
- F; y) v& |0 G/ X%% 绘制 x y 的求解结果% V- S- b" _& V4 K% W
figure
+ r" X7 L( e$ ?) v' Jset(gcf,'units','normalized','position',[0.15 0.2 0.7 0.6]); % 设置 figure 窗口的位置和尺寸
. l! F" y/ b" L6 t/ A& Osubplot(1,2,1)5 T9 X }" H! V9 f" e; B5 m
plot(t,x,'b')
, L6 x" z7 V' {" W+ ?: f( K. |7 x/ e) Dxlabel('t')! t" p" k: ^; K8 w
ylabel('x')" H5 R* d. h: A) j- G3 T) L
9 E* |1 S( M S2 \2 C3 Q1 ^: `: Qsubplot(1,2,2)# j# k7 K+ {2 o% ~2 R: P: [* h* J
plot(t,y,'r')$ F7 G1 f4 T) X$ @$ V" w5 z
xlabel('t')
$ J% d+ M$ I, j# m6 L; ]7 N% Zylabel('y')
2 o/ u: Q. X. A' m) C7 `: B' {, o5 E' W8 A& f; p4 B8 i
|
|