MATLAB 数学应用 微分方程 时滞微分方程 中立型DDE

本文讲述了如何使用 ddensd 求解中立型DDE(时滞微分方程),其中时滞出现在导数项中。

方程是:

y ′ ( t ) = 1 + y ( t ) − 2 y ( t 2 ) 2 − y ′ ( t − π ) y'(t) = 1 + y(t) -2y(\dfrac{t}{2})^2 - y'(t-π) y(t)=1+y(t)2y(2t)2y(tπ)

t ≤ 0 t≤0 t0 时,历史解函数是 y ( t ) = c o s ( t ) y(t)=cos(t) y(t)=cos(t)

由于该方程在 y ′ y' y 项中存在时滞,因此该方程称为中立型 DDE。如果时滞仅出现在 项中,则根据时滞的形式,方程将是常时滞或状态相关 DDE。

要在 MATLAB 中求解此方程,您需要先编写方程、时滞和历史解的代码,然后再调用时滞微分方程求解器 ddensd。您可以将这些作为局部函数包含在文件末尾,或者将它们作为单独的文件保存在 MATLAB 路径上的目录中。

编写时滞代码

首先,编写函数来定义方程中的时滞。方程中具有时滞的首项是 。

function dy = dely(t,y) 
    dy = t/2;
end

方程中具有时滞的另一个项是 。

function dyp = delyp(t,y) 
    dyp = t-pi;
end

在此示例中, y y y y ′ y' y 分别仅有一个时滞。如果有更多时滞,则您可以将它们添加到这些相同的函数文件中,这样函数将返回向量而不是标量。

注意:所有函数都作为局部函数包含在示例的末尾。

编写方程代码

现在,创建一个函数来编写方程代码。此函数应具有签名 yp = ddefun(t,y,ydel,ypdel),其中:

  • t 是时间(自变量)。
  • y 是解(因变量)。
  • ydel 包含 的时滞。
  • ypdel 包含 的时滞。

求解器会自动将这些输入传递给该函数,但是变量名称决定如何编写方程代码。在这种情况下:

  • y d e l       →     y ( t 2 ) ydel   →  y(\dfrac{t}{2}) ydely(2t)

  • y p d e l       → y ′ ( t − π )   ypdel   → y'(t−π)  ypdely(tπ)

function yp = ddefun(t,y,ydel,ypdel) 
    yp = 1 + y - 2*ydel^2 - ypdel;
end

编写历史解代码

接下来,创建一个函数来定义历史解。历史解是时间 的解。

function y = history(t)
    y = cos(t);
end

求解方程

最后,定义积分区间 [ t 0 t f ] [t_0 t_f] [t0tf] 并使用 ddensd 求解器对 DDE 求解。

tspan = [0 pi];
sol = ddensd(@ddefun, @dely, @delyp, @history, [0,pi]);

对解进行绘图

解结构体 sol 具有字段 sol.x 和 sol.y,这两个字段包含求解器在这些时间点所用的内部时间步和对应的解。但是,您可以使用 deval 计算在特定点的解。

在 0 和 pi 之间以 20 个等距点计算解。

tn = linspace(0,pi,20);
yn = deval(sol,tn);

绘制计算解和历史解对解析解的图。

th = linspace(-pi,0);
yh = history(th);
ta = linspace(0,pi);
ya = cos(ta);

plot(th,yh,tn,yn,'o',ta,ya)
legend('History','Numerical','Analytical','Location','NorthWest')
xlabel('Time t')
ylabel('Solution y')
title('Example of Paul with 1 Equation and 2 Delay Functions')
axis([-3.5 3.5 -1.5 1.5])

在这里插入图片描述

局部函数

此处列出了 DDE 求解器 ddensd 为计算解而调用的局部辅助函数。您也可以将这些函数作为它们自己的文件保存在 MATLAB 路径上的目录中。

function yp = ddefun(t,y,ydel,ypdel) 
    yp = 1 + y - 2*ydel^2 - ypdel;
end
%-------------------------------------------
function dy = dely(t,y) % delay for y
    dy = t/2;
end
%-------------------------------------------
function dyp = delyp(t,y) % delay for y'
    dyp = t-pi;
end
%-------------------------------------------
function y = history(t) % history function for t < 0
    y = cos(t);
end
%-------------------------------------------
  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
Matlab中可以使用龙格库塔法(RK方法)来求解时滞微分方程。在给定的代码中,函数LK(a,b,x0)表示使用龙格库塔法求解时滞微分方程的主要函数。该函数使用了dde23函数来求解时滞微分方程,其中@myddefun表示用户自定义的时滞微分方程函数,lags表示时滞的长度,history表示初始条件,tspan表示时间区间。最后,函数返回求解得到的结果x。此外,代码中还提供了一个名为myfun的函数,用于定义时滞微分方程。该函数中的参数p、q、r、alpha、tao分别为方程中的常数项和时滞的时间长度,dxdt表示方程的导数。需要注意的是,给出的代码中有一部分被注释掉了,未使用到。 在引用中,作者提到了一本关于时滞微分方程的书籍《时滞微分方程——泛函数微分方程引论》,该书可以提供更深入的学习和理解时滞微分方程的知识。 时滞微分方程通常是难以直接求解的,因此常常使用数值方法来计算其数值解。所以,在求解时滞微分方程时,通常会使用数值解法,而非解析解法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [一阶时滞微分方程三种求解方法的MATLAB实现及稳定性分析](https://blog.csdn.net/qq_41196612/article/details/104920583)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

结冰架构

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

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

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

打赏作者

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

抵扣说明:

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

余额充值