MATLAB 数学应用 微分方程 时滞微分方程 dde23

dde23:求解带有固定时滞的时滞微分方程 (DDE)。

语法

sol = dde23(ddefun,lags,history,tspan)
sol = dde23(ddefun,lags,history,tspan,options)

参数

参数说明
ddefun用于对微分方程 y ′ ( t ) = f ( t , y ( t ) , y ( t − τ 1 ) , . . . , y ( t − τ k ) ) y'(t)=f(t,y(t),y(t−τ_1),...,y(t−τ_k)) y(t)=f(t,y(t),y(tτ1),...,y(tτk)) 右侧进行计算的函数句柄。此函数必须为以下形式:dydt = ddefun(t,y,Z);其中 t 对应当前 t,y 是一个求 y(t) 近似值的列向量,Z(:,j) 用于为时滞 τj = lags(j) 求 y(t – τj) 的近似值。输出是对应 f ( t , y ( t ) , y ( t − τ 1 ) , . . . , y ( t − τ k ) ) f(t,y(t),y(t−τ_1),...,y(t−τ_k)) f(t,y(t),y(tτ1),...,y(tτk)) 的列向量。
lags固定正时滞向量 τ1, …, τk。
history按以下三种方式之一指定 history:
  • 一个 t 函数,要求 y = history(t) 能够将 t ≤ t0 的解 y(t) 以列向量的形式返回
  • 一个固定列向量(如果 y(t) 为常量)
  • 来自之前积分的解 sol(如果此调用继续该积分)
tspan从 t0=tspan(1) 到 tf=tspan(end) 的积分区间,其中 t0 < tf。
options可选积分参数。使用 ddeset 函数创建的结构体。

说明

sol = dde23(ddefun,lags,history,tspan) 计算 DDE 结构体

y ′ ( t ) = f ( t , y ( t ) , y ( t − τ 1 ) , . . . , y ( t − τ k ) ) y'(t)=f(t,y(t),y(t−τ_1),...,y(t−τ_k)) y(t)=f(t,y(t),y(tτ1),...,y(tτk))

[ t 0 , t f ] [t_0,t_f] [t0,tf] 区间上的积分,其中 τ 1 , . . . , τ k τ_1, ..., τ_k τ1,...,τk 为固定正时滞和 t 0 , t f t_0,t_f t0,tf。输入参数 ddefun 是一个函数句柄。

dde23 以结构体 sol 的形式返回解。使用辅助函数 deval 和输出 sol 来计算区间 tspan = [t0,tf] 中的特定点 tint 的解。

yint = deval(sol,tint)

dde23 返回的结构体 sol 包含下列字段。

字段含义
sol.xdde23 选择的网格
sol.ysol.x 网格点处的 y(x) 近似值。
sol.ypsol.x 网格点处的 y(x) 近似值
sol.solver求解器名称 ‘dde23’

sol = dde23(ddefun,lags,history,tspan,options) 的解算方法与上述方法相同,只是将默认积分属性替换为了 options(使用 ddeset 创建的参数)中的值。

常用选项包括标量相对误差容限 ‘RelTol’(默认为 e − 3 e^{-3} e3)和绝对误差容限的向量 ‘AbsTol’(默认情况下,所有分量均为 e − 6 e^{-6} e6)。

使用 ‘Jumps’ 选项解决历史记录或求解中的不连续问题。将此选项设置为一个包含不连续性问题位置的向量,这些不连续性位于 t 0 t_0 t0 之前的求解中(历史记录),或者位于 t 0 t_0 t0 之后的 t t t 已知值位置的等式系数中。

使用 ‘Events’ 选项指定一个函数,dde23 调用该函数来找出函数 g ( t , y ( t ) , y ( t − τ 1 ) , . . . , y ( t − τ k ) ) g(t,y(t),y(t−τ_1),...,y(t−τ_k)) g(t,y(t),y(tτ1),...,y(tτk)) 消失位置。此函数必须为以下形式

[value,isterminal,direction] = events(t,y,Z)

并包含一个事件函数以测试每个事件。对于 events 中的第 k 个事件函数:

  • value(k) 是第 k 个事件函数的值。
  • 如果想要积分在此事件函数为零时终止,则 isterminal(k) = 1;否则为 0。
  • 如果想要 dde23 计算此事件函数的所有零,则 direction(k) = 0;如果仅计算事件函数呈上升趋势时的零,则 +1,如果仅计算事件函数呈下降趋势时的零,则 -1。

如果指定了 ‘Events’ 选项,并且检测到事件,输出结构体 sol 还包括下列字段:

字段含义
sol.xe包含所有事件位置的行向量,即事件函数消失的时间
sol.ye包含特定列数据的矩阵,其列值为与 sol.xe 中的时间对应的解
sol.ie索引向量,其中的索引值用于指定在 sol.xe 中的对应时间所发生的事件

示例

以下示例显示如何在 [0, 5] 区间上对 DDE 求解,其中 lags 为 1 和 0.2。ddex1de 函数计算时滞微分方程,ddex1hist 计算 t <= 0 的历史记录。

sol = dde23(@ddex1de,[1, 0.2],@ddex1hist,[0, 5]);

此代码在 [0,5] 的区间上以 100 个等间距点计算解,然后绘制结果。

tint = linspace(0,5);
yint = deval(sol,tint);
plot(tint,yint);

ddex1 显示如何使用局部函数解决此问题。

算法

dde23 跟踪不连续性并使用显式 Runge-Kutta (2,3) 对和插值对 ode23 求积分。它通过迭代来采用超过时滞的步长。

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

结冰架构

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

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

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

打赏作者

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

抵扣说明:

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

余额充值