|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 House 于 2020-3-12 18:11 编辑
+ Y5 b3 l. \! H6 j7 L, y1 {+ }7 V3 \+ x6 q; {5 H$ v
MATLAB源程序代码分享:MATLAB实现四阶龙格库塔法求解常微分方程组! i `4 ^: H3 o% X! W% s
function F=f(t,Y)3 K1 f0 f4 T3 J$ Q0 y' c
% 定义待求的微分方程组; X: \; I, _+ R% J6 y
x=Y(1);
/ J: `" c: I# [% w$ W( |4 a9 G( B2 R5 Ey=Y(2);% `* a+ d" ]1 ]5 b- b; o" T4 G
f1=-x^2*(5-y);; Z. r4 R! i; _7 H+ g9 s
f2=y*(4-3*x);5 I) D) d$ i! R1 \
F=[f1;f2];
4 z: }( t, X; T8 c Z4 v, _3 Yend4 Z, H" |3 t2 p$ I" J
0 x2 ]6 J# j% D3 F+ r8 ~& |5 |
! j& l% \4 P) u6 A! N% r0 T" F6 N
* s6 g n( P, Q, H. ^7 G# ?
0 o- t W! |) J
%% 定义计算的步长, 设置变量的初始值
; R8 S# s) e2 O2 \9 i2 C$ mclear;clc;close all# P, r1 q* \' f: v& q
Delta=0.001; % 步长
4 q% d* t( j1 C M* v8 It=0: Delta :8; % 定义自变量 t
9 D; o+ u2 c; j sn=length(t);
0 P& q4 C! B, d+ n+ d' a/ {Y(:,1)=[0.5;3]; % 变量 x y 的初始值
; D6 M8 |' X0 f( [6 r; n3 n7 K& h+ B- M3 w- M! Q
%% 自定义龙格库塔法, 求解微分方程组
- [( A, _# a) Z; Z+ O' T0 pfor k=1: n-1
; W8 w% `0 {! Y0 u7 n z1=f(t(k),Y(:,k));5 ]/ ?% O9 R, |
z2=f(t(k)+Delta/2,Y(:,k)+z1*Delta/2);
& R0 l4 q& f( z) o) Z, T: K z3=f(t(k)+Delta/2,Y(:,k)+z2*Delta/2);
5 \& c* v8 P. ^( `/ v z4=f(t(k)+Delta,Y(:,k)+z3*Delta);2 V% g3 T6 r, v& B& Q
Y(:,k+1)=Y(:,k)+Delta*(z1+2*z2+2*z3+z4)/6;
1 o$ P& b# q4 x; @end
( C5 s! ~3 e/ h! Ax=Y(1,: );3 A$ z; J! b6 i/ q
y=Y(2,: );
: b; g, U q+ a7 I! ^/ [3 ]1 z( D6 |& r2 ]; ?5 o' h3 w# p
%% 绘制 x y 的求解结果
0 ]3 m* {! B( ~# q, Lfigure
8 t! R1 q3 N: s) N- U8 E# S* `set(gcf,'units','normalized','position',[0.15 0.2 0.7 0.6]); % 设置 figure 窗口的位置和尺寸
6 ?8 E9 A5 m o1 M$ u) _* t4 bsubplot(1,2,1), M- T# [1 K8 F. d P( G
plot(t,x,'b')
$ h3 D/ J- R! [xlabel('t')
* q J: B) C: r! \% kylabel('x')
2 a+ s1 V! u3 w3 A" _4 ]; [( i! U5 L$ r( M+ v/ `
subplot(1,2,2)
' S0 Z8 Z9 j4 G& xplot(t,y,'r')+ w+ J/ M5 ]0 P4 U
xlabel('t')
) O5 |, e1 V2 E' l0 N' q6 \ylabel('y')
3 F& V. w, G# N0 c) H
0 c) Z' a% d, V6 C9 A |
|