|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
MATLAB源程序代码分享:MATLAB实现改进的欧拉法求解常微分方程组
9 {, a" K' F u# N( Ifunction F=f(t,Y)
1 d( Y. z0 y; Y- c% r& j% 定义待求的微分方程组, G5 i( S$ g) B8 R4 M; ~$ Q
x=Y(1);
$ w8 v5 s# r/ h# d1 Uy=Y(2);2 K3 I/ C* d. m) B Q# F
f1=3*y;
, B5 w4 \! G" R9 O1 Mf2=(1-x^2)*y-x;$ z- ]. J% s) @" u3 }3 R
F=[f1;f2];5 e. ~) P' B2 M
end Y: A8 K" y! Y; |7 G' p3 ^" ^
$ A5 r: P8 ]$ {; C2 X ~
- S( Z' O& q5 E7 A7 _%% 定义计算的步长, 设置变量的初始值0 H1 ]* j, R; Y; }) G! ~
clear;clc;close all/ f9 ~0 |" D' t
Delta=0.001; % 定义步长4 \7 ~4 i/ E& A* f# J- K5 p
t=0: Delta:20; % 定义自变量 t
) x1 q( Q% \9 Zn=length(t);
% M1 Q; T& I/ x3 c% LY(:,1)=[2;0]; % 定义 x y 的初始值% Y$ k8 {5 G6 K
7 g: N: Q* w3 V; t1 z! p/ D: n%% 自定义改进的欧拉法, 求解微分方程组3 R( H. w8 R5 M7 R8 c3 X/ F& b
for k=1:n-1
v* _1 C0 {& G5 w+ B( h& K F1=f(t(k),Y( :,k));
& V3 l' A- `* z' B F2=f(t(k+1),Y( :,k)+Delta*f(t(k),Y( :,k)));
3 F& G1 V9 \+ v9 V Y(:,k+1)=Y( :,k)+Delta*(F1+F2)/2;
2 J/ y. A3 b. t* [end2 R9 |1 u( i {' k
x=Y(1,: );
3 G$ y0 E/ _: _$ D* T+ vy=Y(2,: );8 X1 w: x9 ~! M
8 |. j7 Q# ] W; ^, o8 g$ ^7 r5 T* |% A
%% 绘制 x y 的求解结果5 Z* W" z' y6 Y9 k: n
figure: o' H' I; a: y/ n, k
set(gcf,'units','normalized','position',[0.15 0.2 0.7 0.6]); % 设置 figure 窗口的位置和尺寸
/ r4 [3 k# H1 w# Dsubplot(1,2,1)' F# h( T1 H& D
plot(t,x,'b')
5 B% _- ?* }, P" e( ?" n. S7 D% B/ [xlabel('t')+ C! E( H; x. T1 _1 O/ b! w
ylabel('x')) W, E+ F r) E; e3 K1 H
0 C1 `; X( S# `0 l6 L$ _
subplot(1,2,2)8 {& Z" o$ f0 W/ j
plot(t,y,'r')
% I! l! e/ X5 R+ cxlabel('t')! ~2 n. |/ _1 L, Y0 X4 G* Y
ylabel('y')# z# x* g7 {2 S/ L _7 A2 g
+ C% H* u) o$ h8 B8 [. f8 C
|
|