|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
MATLAB源程序代码分享:MATLAB实现改进的欧拉法求解常微分方程组" S* m& s2 u) w L
function F=f(t,Y)4 J* x8 r! H/ @) r, b1 a! |
% 定义待求的微分方程组
% P. Q2 X& [; q7 O' H- dx=Y(1);* j$ Z( [% x- z# c
y=Y(2);; g \% K4 x+ R/ k! o& E
f1=3*y;
1 M; X6 o6 w- X2 h9 W! E% l6 Sf2=(1-x^2)*y-x;9 e) j4 I U# I: [* }' Q. A
F=[f1;f2];) b4 H1 ?% m1 Y7 f/ n/ C: d
end
0 ^; d9 u2 y" u% O0 ]' g
& `8 n- |% _* T8 C6 X! c4 a, {: ?
7 M. h6 ^( ?$ s/ i& A%% 定义计算的步长, 设置变量的初始值
( }+ R- S7 @2 g& Z/ Qclear;clc;close all
" H+ }6 C# q8 T7 |0 VDelta=0.001; % 定义步长/ m; Q; y% @$ A; K7 s& o
t=0: Delta:20; % 定义自变量 t8 z% y; x: R! E8 c7 m
n=length(t);
1 u0 b4 l2 z! G2 \! G* \Y(:,1)=[2;0]; % 定义 x y 的初始值& K `" L* G' X; i: `( \
- ?9 O$ z# @5 @0 o8 Q) D1 F
%% 自定义改进的欧拉法, 求解微分方程组
3 H2 b9 V2 E% Mfor k=1:n-1
5 a+ K/ q ~% d5 U5 o7 k. n ?* Q F1=f(t(k),Y( :,k));" @* g8 f# B4 C$ ~* F5 y
F2=f(t(k+1),Y( :,k)+Delta*f(t(k),Y( :,k)));
# {9 M( |% Z. O% ^2 U# i Y(:,k+1)=Y( :,k)+Delta*(F1+F2)/2;$ |7 v1 }8 K! H5 j7 {2 J
end
- }* n8 [0 ~- Tx=Y(1,: );% h2 Q$ j6 |9 F7 ~4 Q: G
y=Y(2,: );7 c6 @9 v' g& C z7 {$ I
0 u2 f" i5 i2 E: [" r% z U
%% 绘制 x y 的求解结果: f/ V" a7 e1 z2 Q+ V, ?! H
figure$ P+ Q. ]- [% V
set(gcf,'units','normalized','position',[0.15 0.2 0.7 0.6]); % 设置 figure 窗口的位置和尺寸
! s+ _. ~$ i2 V3 }subplot(1,2,1)
U' r u, |% D4 N- Lplot(t,x,'b')! D$ f2 D+ d' D
xlabel('t')
; ~. J3 X! q# }2 xylabel('x')
p! Q, ]. f* L, l2 v
+ i& A" P& G, k( V2 Usubplot(1,2,2)
. z4 S0 w6 c g) R7 t! Bplot(t,y,'r')
# V z1 j3 W% |xlabel('t')
6 G: i4 p* }$ P; p8 v- Rylabel('y')9 O2 }' G: `& T% h: ~ M
5 }) e# E; r# P2 R, Z3 N# M% ]
|
|