|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 House 于 2020-3-12 18:11 编辑
" {7 ~3 J& n( i U
) ]9 N8 ~3 ^* t: } {' O, uMATLAB源程序代码分享:MATLAB实现四阶龙格库塔法求解常微分方程组
4 F. o. J% q: I: [$ T2 y) {" jfunction F=f(t,Y)# ]2 O- k. C K& ?
% 定义待求的微分方程组
5 D0 K; Y$ V1 G0 |/ cx=Y(1);9 t! | Q3 U# B' b8 n9 s
y=Y(2);4 G7 y8 K$ b9 g3 N {" f
f1=-x^2*(5-y);2 n3 `# J+ X0 G; y' W
f2=y*(4-3*x);
# T' @2 C- Y# r" b( E+ b* \F=[f1;f2];7 j# V% n/ I a; V+ f* a
end4 v N" ^; y1 B; T: z2 o
% J6 u- r1 j% b. i5 t' r; }0 i) Z
8 n" E" h$ _% E1 X
0 W! p) Q% C% ?2 G2 l
* w8 s" x l% u# W" b5 y%% 定义计算的步长, 设置变量的初始值/ c: Z! y0 E$ Y! e4 @7 _
clear;clc;close all
* r( ^3 {! W4 {; ^+ g0 |8 d, F3 JDelta=0.001; % 步长, d& k* n* h9 W8 `8 m
t=0: Delta :8; % 定义自变量 t4 y) a3 ?$ `+ W+ t
n=length(t);
7 Y& ~; O. i; Z" oY(:,1)=[0.5;3]; % 变量 x y 的初始值
( Y. Q- a8 q" G$ v& @( F4 e. u( b: ?1 f: R3 @
%% 自定义龙格库塔法, 求解微分方程组1 R% B( |" _' _) k4 L- ~
for k=1: n-1. h E) I# L7 m; y: J
z1=f(t(k),Y(:,k));
! b5 E. G4 s" s/ f z2=f(t(k)+Delta/2,Y(:,k)+z1*Delta/2);( t) t7 Y+ J+ D+ o1 d: e% @
z3=f(t(k)+Delta/2,Y(:,k)+z2*Delta/2); P- P# k; f+ Q5 d3 B: a
z4=f(t(k)+Delta,Y(:,k)+z3*Delta);: G R x ?' a
Y(:,k+1)=Y(:,k)+Delta*(z1+2*z2+2*z3+z4)/6;
( u6 A2 u& i) R* d' Q0 ?$ q: tend9 ]0 x9 J: q7 S! m4 c$ ^
x=Y(1,: );$ |3 Q0 a- q8 _, S: H6 I
y=Y(2,: );6 Z8 ^% G- F/ u" i% O0 u" u& [
: W7 P# n1 k0 P8 y%% 绘制 x y 的求解结果/ e) X8 v. m4 h; F( a
figure' U! [7 Z; E9 z: ]0 B
set(gcf,'units','normalized','position',[0.15 0.2 0.7 0.6]); % 设置 figure 窗口的位置和尺寸) T! m! R. {$ @3 `
subplot(1,2,1)
4 ~* ~! B5 ], s J. Wplot(t,x,'b')$ E E b! a2 U. U) C' g0 J8 A( K
xlabel('t')& d5 _6 |/ ~; i. D6 q
ylabel('x')& v' P7 t5 I/ ~# i. b0 O+ B
2 G0 [9 h! N1 a
subplot(1,2,2)
) ?% X) k3 [( T; |* ]; ]plot(t,y,'r')
/ R( R7 v# e/ Txlabel('t')
5 W+ `0 y( L% lylabel('y')7 Q& }* }( A6 D7 Q7 n1 e8 \
$ U6 L2 S" U5 Q/ ` |
|