【Matlab】dde23解时滞时延微分方程

本文介绍如何将具有特定时滞的DDE(延迟微分方程)模型转换为一阶和二阶常时滞系统,并通过Matlab的dde23函数进行求解。首先演示了将原始DDE方程简化为y1' = y1(t-0.1)和y2' = y2(t-0.5),然后扩展到包含y2' = -2和y4' = -2的二阶系统。

具有常时滞的 DDE

举例为如下方程
y 1 ′ ( t ) = y 1 ( t − 1 ) y 2 ′ ( t ) = y 1 ( t − 1 ) + y 2 ( t − 0.2 ) y 3 ′ ( t ) = y 2 ( t − 1 ) \begin{aligned} y_1'(t) &= y_1(t-1) \\ y_2'(t) &= y_1(t-1) + y_2(t-0.2) \\ y_3'(t) &= y_2(t-1) \\ \end{aligned} y1(t)y2(t)y3(t)=y1(t1)=y1(t1)+y2(t0.2)=y2(t1)

编写时滞代码

%% 测试求解常时滞微分方程
% Author: Zhao-Jichao
% Date: 2021-07-05
clear
clc

%% Define Time-Delay
lags = [1 0.2];

tspan = [0 5];
sol = dde23(@ddefun, lags, @history, tspan);

%% Draw Results
plot(sol.x,sol.y,'-o')
xlabel('Time t');
ylabel('Solution y');
legend('y_1','y_2','y_3','Location','NorthWest');

%% DDE Function
function dydt = ddefun(t,y,Z) % equation being solved
  ylag1 = Z(:,1);
  ylag2 = Z(:,2);

  dydt = [ylag1(1); 
          ylag1(1)+ylag2(2); 
          y(2)];
end
%-------------------------------------------
function s = history(t) % history function for t <= 0
  s = ones(3,1);
end
%-------------------------------------------

在这里插入图片描述

修改成自用的一阶系统微分方程

y 1 ′ = y 1 ( t − 0.1 ) y 2 ′ = y 2 ( t − 0.5 ) \begin{aligned} y_1'&=y_1(t-0.1) \\ y_2'&=y_2(t-0.5) \\ \end{aligned} y1y2=y1(t0.1)=y2(t0.5)

写成了两个并列的形式,方便对比最终的效果。

代码如下

%% 测试求解常时滞微分方程
% Author: Zhao-Jichao
% Date: 2021-07-05
clear
clc

%% Define Time-Delay
lags = [0.1 0.5];

tspan = [0 5];
sol = dde23(@ddefun, lags, @history, tspan);

%% Draw Results
plot(sol.x,sol.y,'-o')
xlabel('Time t');
ylabel('Solution y');
legend('y_1','y_2','y_3','Location','NorthWest');

%% DDE Function
function dydt = ddefun(t,y,Z) % equation being solved
  ylag1 = Z(:,1);
  ylag2 = Z(:,2);

  dydt = [-ylag1(2); 
          -ylag2(2)];
end
%-------------------------------------------
function s = history(t) % history function for t <= 0
  s = ones(2,1);
end
%-------------------------------------------

在这里插入图片描述

再改一个二阶的

方程为:
y 1 ′ = y 2 ( t − 0.1 ) y 2 ′ = − 2 y 3 ′ = y 4 ( t − 0.5 ) y 4 ′ = − 2 \begin{aligned} y_1' &= y_2(t-0.1) \\ y_2' &= -2 \\ y_3' &= y_4(t-0.5) \\ y_4' &= -2 \\ \end{aligned} y1y2y3y4=y2(t0.1)=2=y4(t0.5)=2

%% 测试求解常时滞微分方程
% Author: Zhao-Jichao
% Date: 2021-07-05
clear
clc

%% Define Time-Delay
lags = [0.1 0.5];

tspan = [0 3];
sol = dde23(@ddefun, lags, @history, tspan);

%% Draw Results
plot(sol.x,sol.y)
xlabel('Time t');
ylabel('Solution y');
legend('y_1','y_2','y_3','y_4','Location','NorthWest');

%% DDE Function
function dydt = ddefun(t,y,Z) % equation being solved
  ylag1 = Z(:,1);
  ylag2 = Z(:,2);

  dydt = [ylag1(2); 
          -2;
          ylag2(4); 
          -2;];
end
%-------------------------------------------
function s = history(t) % history function for t <= 0
  s = ones(4,1);
end
%-------------------------------------------

在这里插入图片描述

Ref: 时滞微分方程 — 示例

### 使用 MATLAB 的 `dde23` 求时滞微分方程MATLAB 中,`dde23` 是一个专门用于求具有常时滞时滞微分方程 (DDE) 的求器。为了正确使用它,需要定义以下内容:方程组、时滞参数和历史。以下是详细的说明和示例代码。 #### 定义方程组 首先,需要编写描述 DDE 的函数。此函数应接受两个输入变量:当前时间 `t` 和滞后状态 `y_lag`,并返回导数值。 #### 定义时滞 对于具有常时滞DDE,可以将时滞表示为一个常向量,其中每个元素对应一个时滞值。 #### 定义历史 历史时滞微分方程在初始时间之前的。通常,历史可以是一个常数或一个函数。 #### 示例代码 以下是一个完整的示例,展示如何使用 `dde23` 求具有常时滞微分方程。 ```matlab % 定义时滞 tau = 1; % 常时滞 % 定义历史 history = @(t) 1; % 初始历史为常数 1 % 定义求区间 tspan = [0, 10]; % 时间范围从 0 到 10 % 调用 dde23器 sol = dde23(@ddefun, tau, history, tspan); % 绘制结果 t = linspace(tspan(1), tspan(2), 100); y = deval(sol, t); plot(t, y); xlabel('时间 t'); ylabel(' y(t)'); title('使用 dde23时滞微分方程'); % 定义 DDE 方程组 function dydt = ddefun(t, y, Z) % Z 是滞后状态值 ylag = Z; % 获取滞后状态 dydt = ylag + t; % 示例方程 dy/dt = y(t-1) + t end ``` #### 释 上述代码中: - `tau` 定义了时滞值。 - `history` 是历史函数,这里假设历史为常数 1。 - `tspan` 定义了求的时间范围。 - `dde23` 调用了求器,并返回包含信息的结构体 `sol`。 - `deval` 函数用于在指定的时间点上评估。 - 最后绘制了随时间变化的曲线[^1]。 #### 注意事项 如果时滞函数不是简单的常数形式,而是更复杂的表达式,则需要使用 `ddesd` 求器[^2]。在这种情况下,时滞函数需要显式定义。 --- ###
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zhao-Jichao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值