Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Matlab求解时滞微分方程_Matlab_Differential Equations_Dde_Timedelay_Ode45 - Fatal编程技术网

用Matlab求解时滞微分方程

用Matlab求解时滞微分方程,matlab,differential-equations,dde,timedelay,ode45,Matlab,Differential Equations,Dde,Timedelay,Ode45,我试图用Matlab中的ode45解决DDE问题。我的问题是关于我解这个方程的方法。我不知道我是对还是错,我应该用dde23来代替。 我有一个方程式: xdot(t)=Ax+BU(t-td)+E(t) & U(t-td)=Kx(t-td) & K=constant 通常,当我的方程没有延迟时,我用ode45解这个方程。现在在我的等式上有延迟,我再次使用ode45来得到结果。我得到了每一步U(t-td)的确切数量,我替换了它的数量并解出了方程 我的解决方案正确吗?还是应该使用dd

我试图用Matlab中的ode45解决DDE问题。我的问题是关于我解这个方程的方法。我不知道我是对还是错,我应该用dde23来代替。 我有一个方程式:

xdot(t)=Ax+BU(t-td)+E(t) & U(t-td)=Kx(t-td) & K=constant
通常,当我的方程没有延迟时,我用ode45解这个方程。现在在我的等式上有延迟,我再次使用ode45来得到结果。我得到了每一步U(t-td)的确切数量,我替换了它的数量并解出了方程


我的解决方案正确吗?还是应该使用dde23?

这里有两个问题:

  • ode45
    是一个具有自适应步长的解算器。这意味着您的采样步骤不一定等同于实际的集成步骤。相反,积分器根据需要将采样步骤拆分为多个积分步骤,以达到所需的精度(有关更多信息,请参阅科学计算)。 因此,您可能无法在集成的每个步骤中提供正确的延迟值
    U
    ,即使您认为这样做了

    但是,如果采样步骤足够小,则每个采样步骤确实有一个时间步骤。这样做的原因是,通过使时间步长小于所需的时间步长(从而浪费计算时间),可以有效地禁用自适应积分

  • 高阶Runge–Kutta方法,如
    ode45
    不仅在每个积分步骤中使用导数的值,而且在两个积分步骤之间对其进行评估(不,它们不能为这两个时间步骤之间的导数提供可用的解)

    例如,假设延迟和积分步长为td=16。要使积分步骤从t=32变为t=48,您需要计算
    U
    ,而不仅仅是在t = 32−16 = 16和t = 48−16 = 32,但也在t = 40−16 = 24现在,你可能会说:好的,让我们进行积分,这样我们在所有这些时间点都有一个积分步骤。但是对于这些集成步骤,您需要中间的步骤,例如,如果要从t=16到t=24,则需要在t= 0、t=4、t=8时评估<代码> u>代码>。你会得到一个由越来越小的时间步组成的无穷无尽的级联

  • 由于问题2,除了一步积分器之外,不可能提供过去的精确状态——在您的情况下,使用一步积分器可能不是一个好主意。因此,如果要将DDE与多步积分器集成,则不可避免地要使用某种插值来获取过去的值<代码>dde23使用良好的插值以复杂的方式执行此操作


    如果仅在积分步骤中提供
    U
    ,则实际上执行的是a,这是最差的插值,因此需要使用非常小的积分步骤。如果您真的愿意,您可以这样做,
    dde23
    及其更复杂的分段三次Hermite插值可以使用更大的时间步长并自适应地进行积分,因此速度会更快。而且,你不太可能会犯错误。最后,
    dde23
    可以处理非常小的延迟(小于集成步骤),如果您正处于这种情况。

    这里有两个问题:

  • ode45
    是一个具有自适应步长的解算器。这意味着您的采样步骤不一定等同于实际的集成步骤。相反,积分器根据需要将采样步骤拆分为多个积分步骤,以达到所需的精度(有关更多信息,请参阅科学计算)。 因此,您可能无法在集成的每个步骤中提供正确的延迟值
    U
    ,即使您认为这样做了

    但是,如果采样步骤足够小,则每个采样步骤确实有一个时间步骤。这样做的原因是,通过使时间步长小于所需的时间步长(从而浪费计算时间),可以有效地禁用自适应积分

  • 高阶Runge–Kutta方法,如
    ode45
    不仅在每个积分步骤中使用导数的值,而且在两个积分步骤之间对其进行评估(不,它们不能为这两个时间步骤之间的导数提供可用的解)

    例如,假设延迟和积分步长为td=16。要使积分步骤从t=32变为t=48,您需要计算
    U
    ,而不仅仅是在t = 32−16 = 16和t = 48−16 = 32,但也在t = 40−16 = 24现在,你可能会说:好的,让我们进行积分,这样我们在所有这些时间点都有一个积分步骤。但是对于这些集成步骤,您需要中间的步骤,例如,如果要从t=16到t=24,则需要在t= 0、t=4、t=8时评估<代码> u>代码>。你会得到一个由越来越小的时间步组成的无穷无尽的级联

  • 由于问题2,除了一步积分器之外,不可能提供过去的精确状态——在您的情况下,使用一步积分器可能不是一个好主意。因此,如果要将DDE与多步积分器集成,则不可避免地要使用某种插值来获取过去的值<代码>dde23使用良好的插值以复杂的方式执行此操作

    如果仅在积分步骤中提供
    U
    ,则实际上执行的是a,这是最差的插值,因此需要使用非常小的积分步骤。如果您真的愿意,您可以这样做,
    dde23
    及其更复杂的分段三次Hermite插值可以使用更大的时间步长并自适应地进行积分,因此速度会更快。而且,你不太可能会犯错误。最后,
    dde23
    可以处理非常小的延迟(比集成步骤小),如果您喜欢这种类型的话