|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 House 于 2020-3-12 18:11 编辑
) ~9 J# [) o# M0 S1 ^7 G# ^' r
' t- Y# s+ p0 {: g. tMATLAB源程序代码分享:MATLAB实现四阶龙格库塔法求解常微分方程组/ ~, s! Z4 n7 q1 P5 p Q6 o- k7 r
function F=f(t,Y)
2 b$ C6 a$ V( u- T% 定义待求的微分方程组
- e3 W# E; t0 A4 @7 @% m Zx=Y(1);; U8 H+ ]8 X% T3 f0 l4 u6 C8 W9 W' V
y=Y(2);4 y( g# \# h2 [; U
f1=-x^2*(5-y);
5 T+ y; }! I: ]/ J/ o Gf2=y*(4-3*x);
7 F% G1 B( r# m: L; r5 UF=[f1;f2];
g ~* l$ ]" \9 Q! c; C- x f& v1 Rend
7 [& W6 b M5 s9 q& P% V, C' ], U$ B0 M7 u: Y) y
- q+ T- @8 Y* Y) ]1 @0 V/ w1 k2 S! M; Z, k' u0 t
* h( v7 |; L2 A- ?% H%% 定义计算的步长, 设置变量的初始值! S" i9 b; w. \1 H, ]% j
clear;clc;close all# T. Y/ B7 ^% b6 B" x2 K
Delta=0.001; % 步长 w" s' K+ k* q9 a9 Z
t=0: Delta :8; % 定义自变量 t* y, \$ ~4 j. r& m( E. x
n=length(t);
; R2 ]9 _3 W4 X- Z; |( AY(:,1)=[0.5;3]; % 变量 x y 的初始值
% J# t+ |$ o/ L- b- A+ d, l) e
/ D# a9 N: B p%% 自定义龙格库塔法, 求解微分方程组
" b# O V; |+ G9 Jfor k=1: n-1
) u2 s* S6 s: t6 ]) M z1=f(t(k),Y(:,k));, F0 O" ^7 w. `5 t y
z2=f(t(k)+Delta/2,Y(:,k)+z1*Delta/2);2 Z% q' ^8 W1 X4 @+ n9 b/ C( @2 ]
z3=f(t(k)+Delta/2,Y(:,k)+z2*Delta/2);2 {5 r) q/ Q. O0 l/ Q1 V3 h
z4=f(t(k)+Delta,Y(:,k)+z3*Delta);* u; @1 V# f6 L( i4 J5 U% H! ?- n; Q `
Y(:,k+1)=Y(:,k)+Delta*(z1+2*z2+2*z3+z4)/6;4 Q# _+ I. U/ P2 \
end5 [ \' c# o8 I6 q4 F
x=Y(1,: );
. d4 j/ |. @0 r( [1 x" x, ^y=Y(2,: );+ o4 l1 X; D2 d" ]/ j7 I" D
& ~; v0 ~& W- W
%% 绘制 x y 的求解结果
0 b: a2 O3 k' w, w' [( ifigure* Y# g9 a/ l! A7 j L2 Q/ e, s
set(gcf,'units','normalized','position',[0.15 0.2 0.7 0.6]); % 设置 figure 窗口的位置和尺寸+ p* S2 k) W* ?7 g
subplot(1,2,1)
" l) L- j/ |. \5 \, C3 w# Zplot(t,x,'b')
' Y' }- z2 H2 Uxlabel('t')
9 V! \) V/ y+ l! t3 b. E7 Uylabel('x')
7 L; \: ]- l3 f" o* L- A' L* Y- F b% \, V! k3 n3 I
subplot(1,2,2)4 y; b0 ^2 @, D- f
plot(t,y,'r')# r1 p& {6 r, T* o! e' m0 ~; Y
xlabel('t')
& S% b1 L% o' | V# R& nylabel('y')
" c) O0 }& ?5 y. \; z1 m* v; a) L; g) u9 \/ X: x
|
|