|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 House 于 2020-3-10 17:43 编辑 ' i$ f) K4 U: L" U- }
' {. V. Z, s! U- u4 p/ B
MATLAB使用自定义的欧拉法求解常微分方程组1 s+ n) M. n. H) T
" A! @9 ? X' M* `
* b4 b: v: y. {) p: h8 |4 v E
& Q0 A& s4 g/ |- t- }
function F=f(t,Y)
3 {, `- d6 x* @4 L4 e/ d2 x P1 V9 R% 定义待求的微分方程组6 _: B* }& V) M Y+ }, e
x=Y(1);
0 L7 ^# ?. s' \" N7 T3 s) b2 d1 b1 Ey=Y(2);7 U; b# O& B) ~+ `' c3 f$ x0 N
f1=3*y;$ H7 ^ b9 ]" q5 Y8 L
f2=(1-x^2)*y-x;
2 }/ W, J3 r/ L; D+ H6 @! oF=[f1;f2];* G( x# B- ~4 G R) H' M: q+ `
end
* s3 i, _& K6 B' H. ?
: r( G4 P9 ]7 P1 V' Y9 J q) E$ A2 _( t( e( ]/ w
%% 定义计算的步长, 设置变量的初始值" x- z1 l; j1 J" l0 V9 e
clear;clc;close all
& O4 v: M- q6 h7 \Delta=0.001; % 定义步长5 e/ K- E8 S8 q2 N( U6 R V9 s
t=0: Delta :20; % 定义自变量 t2 G3 W- A& `5 T' f( ~
n=length(t);
) @4 V* P/ q, T0 L& x: c/ `Y(:,1)=[2;0]; % 定义 x y 的初始值" x" a0 {5 s0 `
4 d, h2 E$ a3 X* J) ]# x" _- ]* O
%% 自定义欧拉法, 求解微分方程组
$ G/ g/ |2 z2 V) n% ? I4 f: B) bfor k=1:n-1
* n$ X" w" G: z Y(:,k+1)=Y(:,k)+Delta*f(t(k),Y(:,k));
% ^- {) \2 r$ x v4 Z- Wend: C) Y- Y" S0 V6 y6 ?
x=Y(1,: );
, R% J. c6 Y8 g, {- U' z" Q2 c/ _8 jy=Y(2,: );- j4 X* P) @9 [ ]# l: j0 `$ X
! E0 M( x6 Y4 J1 W' Z; F A1 k. f
%% 绘制 x y 的求解结果$ W& x3 U& j& f2 J0 }
figure' A" ~& c: p1 v# W [" ]
set(gcf,'units','normalized','position',[0.15 0.2 0.7 0.6]); % 设置 figure 窗口的位置和尺寸 h$ Q7 G& j+ a6 [/ s3 w
subplot(1,2,1)
. y8 O% H9 G* u0 `9 k# Q9 bplot(t,x,'b')
( ~! W2 n5 t, Rxlabel('t')
; Y/ n/ y, G/ D& }ylabel('x')& D; H* x i9 Q- q8 g( x
4 i. j r+ v, u8 L% T J
subplot(1,2,2)
/ h- W5 s% T# P3 @plot(t,y,'r')) |2 b9 }9 [' K, p; O% K- K
xlabel('t')
5 [% \* {; f) ?: h$ N# Aylabel('y') C" Y8 U' B( l
' N- Q4 f7 ]2 ?- p. @2 Q2 k
- @3 S8 V7 X0 H; K
n$ `. {* Z% p! T% X |
|