EDA365电子论坛网
标题:
MATLAB源程序代码分享:MATLAB实现改进的欧拉法求解常微分方程组
[打印本页]
作者:
House
时间:
2020-3-17 10:25
标题:
MATLAB源程序代码分享:MATLAB实现改进的欧拉法求解常微分方程组
MATLAB源程序代码分享:MATLAB实现改进的欧拉法求解常微分方程组
" F0 b! ^4 Y, i+ v$ V) \
function F=f(t,Y)
; f' z9 a, t: F" R$ P c* c: b4 R
% 定义待求的微分方程组
) \9 V Z) P2 p6 |
x=Y(1);
2 |! m3 t7 s% ~8 w0 X1 c7 F3 [2 r5 h1 Z
y=Y(2);
8 E D% V4 V6 I* s2 l
f1=3*y;
2 i# V3 V* _; \% Y1 D, A
f2=(1-x^2)*y-x;
+ d& D% S* _0 T% U5 U2 T
F=[f1;f2];
# B u) u% A5 z$ E
end
5 n; F! F2 Q$ B# U0 g, Z
3 A6 J+ o( o' H- x# |9 E
, M! s3 Q$ x4 Q) A3 `
%% 定义计算的步长, 设置变量的初始值
0 l+ v0 D% O$ b" G; I
clear;clc;close all
; G2 R$ k( ^2 f4 L( c$ j
Delta=0.001; % 定义步长
: R0 a% {( T; k; Y8 J7 V
t=0: Delta:20; % 定义自变量 t
# K! {, M: F5 N; Z8 l6 k" Q
n=length(t);
$ |$ A4 f: y) V/ Y& f$ O1 T
Y(:,1)=[2;0]; % 定义 x y 的初始值
8 p: a5 q0 U7 B3 |
, a& J! I- n6 @! C
%% 自定义改进的欧拉法, 求解微分方程组
5 q1 _ w' ?5 O
for k=1:n-1
+ j/ F t) x# ^+ h
F1=f(t(k),Y( :,k));
+ Q( ^" v4 M( H7 i; P, I
F2=f(t(k+1),Y( :,k)+Delta*f(t(k),Y( :,k)));
% b& a% R+ ^$ Y; X; W
Y(:,k+1)=Y( :,k)+Delta*(F1+F2)/2;
# X, [/ L; f& c" A/ J
end
! d1 S) j6 k+ c4 H0 A
x=Y(1,: );
2 i; k# F' `8 Q {
y=Y(2,: );
& e9 q2 I* P0 n z- g7 d2 T
3 l; \3 I' g- R9 Z2 S8 t6 E- Q4 g
%% 绘制 x y 的求解结果
9 P1 }8 J: J, l
figure
: J" `0 Z* P' r g+ Z
set(gcf,'units','normalized','position',[0.15 0.2 0.7 0.6]); % 设置 figure 窗口的位置和尺寸
8 J* U p9 u/ o8 ^" I. ]3 R3 M* i
subplot(1,2,1)
- M5 t3 u/ T- v8 l
plot(t,x,'b')
' {! x' K& O" N( v0 h
xlabel('t')
( I3 _+ q+ Z9 m& x! f# b
ylabel('x')
9 q$ o. j4 j. c5 j
o4 q" } X6 x s: n5 q5 r/ W
subplot(1,2,2)
* q% q, p+ ` B+ _6 u
plot(t,y,'r')
6 V6 z* K' z# S
xlabel('t')
* z4 u4 N* A; s$ ?4 I( |
ylabel('y')
- E5 Z' S: z: F# |1 B
e) s4 R3 s9 i0 l4 \( e: ?
1.jpg
(38.39 KB, 下载次数: 5)
下载附件
保存到相册
2020-3-17 10:25 上传
作者:
wu68aq
时间:
2020-3-17 17:41
MATLAB源程序代码分享:MATLAB实现改进的欧拉法求解常微分方程组。
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2