|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 House 于 2020-3-12 18:11 编辑
K( k9 e, L. E! J& H! y8 m' U0 I( H3 m9 O- b/ [# Y+ l( r e
MATLAB源程序代码分享:MATLAB实现四阶龙格库塔法求解常微分方程组
0 h5 b3 i% P3 p. k- R& \function F=f(t,Y)
, j/ e$ z( W- N3 D0 n% 定义待求的微分方程组
3 H& v" m3 z, l( k1 y8 V2 j$ A5 ~x=Y(1);
4 e& H5 S$ Z! {* Y8 `/ R2 S5 iy=Y(2);' S9 P% w, C$ b- ~5 n* B: f
f1=-x^2*(5-y);4 \& q; E; e( a$ X
f2=y*(4-3*x);# ^$ E* S R9 b* }6 C n) y9 b
F=[f1;f2];" ~! I. }, L8 ]+ }6 p3 y
end
9 m1 Y% F) \( E% q7 Q$ M" B1 U- p- {- j2 H+ b t% K- C) V4 d
3 ^ R) k# K w" ]" J |2 }
$ @* j' q9 F: m4 ]$ Q: X, l6 m+ j; k# k6 m$ |
%% 定义计算的步长, 设置变量的初始值
, b8 Y7 H) d J" W! Dclear;clc;close all* V* ^7 y8 }/ {$ a" R4 Z( l+ u
Delta=0.001; % 步长
, o! Z9 x/ B2 @* v$ c8 q- h Pt=0: Delta :8; % 定义自变量 t+ q* x, U2 V; h- @ r
n=length(t);
2 V6 S; D- j" e J# gY(:,1)=[0.5;3]; % 变量 x y 的初始值
" u! d* y0 S6 J7 Q" o( z0 k
. v/ e" d9 e3 A& P9 r! b%% 自定义龙格库塔法, 求解微分方程组
6 D2 U$ i8 x: c) B4 E/ ]1 o5 dfor k=1: n-1. ]3 j3 J. y- @
z1=f(t(k),Y(:,k));3 v& R1 t; R5 u8 b5 C; V# a2 z' {
z2=f(t(k)+Delta/2,Y(:,k)+z1*Delta/2);
6 v( p5 p z' Y0 m4 ?' L z3=f(t(k)+Delta/2,Y(:,k)+z2*Delta/2);1 v, \- `, C9 P% D1 D t7 E. y
z4=f(t(k)+Delta,Y(:,k)+z3*Delta);/ o: r* H p% {0 e8 T% l$ l
Y(:,k+1)=Y(:,k)+Delta*(z1+2*z2+2*z3+z4)/6;/ ?7 Z. p4 Z- c l
end
% I) r" y8 d4 e( E9 ~x=Y(1,: );4 ?+ j6 ]' }. F6 M+ k2 H' ~. H
y=Y(2,: );
( B# W5 F1 [+ U+ B# i
+ D( u2 U# l, q# t7 |: D%% 绘制 x y 的求解结果
- g" L5 k3 U: v/ r) h$ D3 \" kfigure
0 A, O3 h L. V& o% wset(gcf,'units','normalized','position',[0.15 0.2 0.7 0.6]); % 设置 figure 窗口的位置和尺寸
I0 o# N* b7 ^ M- @0 b- Osubplot(1,2,1): Q) [: R! k; ]4 [. s; f
plot(t,x,'b')9 t% U* E4 I. H# A
xlabel('t')2 ?2 A! [( m+ U) {" \' V: x
ylabel('x')4 G& W' ~7 a; S8 O0 x( O3 Z$ h
6 g2 k+ O. _! y
subplot(1,2,2)# m; V5 k# m0 b# T
plot(t,y,'r')
- N! M* `# O# Q8 }" d3 x: l# \xlabel('t')3 p& U* f% R& J' ~7 _/ q
ylabel('y')
+ @) |, Z" ]# h% F& K
- u U7 E4 w" T |
|