【问题标题】:Solving DDE in Matlab在 Matlab 中求解 DDE
【发布时间】:2021-03-03 21:46:30
【问题描述】:

我正在尝试学习如何在 Matlab 上解决 DDE(延迟差异。eq),并且我正在使用一个非常有用的 (Youtube-tutorial) 来解决示例。在 3 维系统的情况下,代码如下:

tau = [1 0.5];
tf = 10;
sol = dde23(@dde,tau,@history,[0 tf]);
t = linspace(0,tf,200);
y = deval(sol,t);

figure(1)
plot(t,y)

function y = history(t)
y = [1;0;-1];
end

按照教程的dde函数是:

function dydt = dde(t,y,tau)
y1tau1 = tau(:,1);
y2tau2 = tau(:,2);
dydt = [y1tau1(1)
    y(1) - y1tau1(1) + y2tau2(2)
    y(2) - y(3)];
end

,如果我理解的话,我们有一个 3by2 矩阵,其中包含状态变量及其各自的延迟:第一列是三个状态变量中每一个的第一个延迟 tau_1,第二列是 tau_2 . 然而,这个矩阵只有 2 个非零分量,它们是 y_1 的 tau_1 延迟和 y_2 的 tau_2。 鉴于此,我认为它会是相同的(至少在这种情况下,我们只有 y_1 的一个延迟和 y_2 的一个延迟),就好像函数是:

function dydt = dde(t,y,tau)
dydt = [tau(1)
    y(1) - tau(1) + tau(2)
    y(2) - y(3)];
end 

我为他们两个都运行了脚本,结果在质量和数量上都完全不同,我不知道为什么。有人能解释一下区别吗?

【问题讨论】:

    标签: matlab differential-equations


    【解决方案1】:

    y1tau1(1)y2tau2(2)tau(1,1)tau(2,2)

    同时

    tau(1)tau(2)tau(1,1)tau(2,1) 相同。

    所以第二个是不同的,没有理由为什么两者不同,如果只是稍微有点不同,DDE 系统应该有相同的解决方案。


    由于您还有一个一般性的解释问题,因此 DDE 系统在数学上是

    dy1(t)/dt = y1(t-1)
    dy2(t)/dt = y1(t) - y1(t-1) + y2(t-0.5)
    dy3(t)/dt = y2(t) - y3(t)
    

    很遗憾,延迟值也被命名为tau,最好使用yd之类的其他名称,

    function dydt = dde(t,y,yd)
      dydt = [ yd(1,1)
               y(1) - yd(1,1) + yd(2,2)
               y(2) - y(3) ];
    
    end
    

    这个yd有两列,第一列是值y(t-tau(1))=y(t-1),第二列是y(t-tau(2))=y(t-0.5)。 DDE 函数本身不知道延迟,它只计算这些延迟的值。这些是从一个分段插值函数获得的,该函数将历史函数与迄今为止的解决方案一起延续。历史函数代替初始条件。

    【讨论】:

    • 但是 tau(2,2) 和 tau(2,1) 有什么区别呢?我知道它们包含在不同的矩阵中,但在这两种情况下只有两个时间延迟值。函数的第二个版本是否暗示两个延迟之一是 0?
    • 换句话说,我在考虑 tau(2,2)=tau(2,1)。 Matlab 是否还有其他计算可能会导致结果不同?
    • 我理解我的错误。我正在考虑该函数直接采用它没有的滞后值。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-11
    • 1970-01-01
    相关资源
    最近更新 更多