matlab - 求解受约束提供非负解的延迟微分方程 (DDE) 系统

标签 matlab scipy numerical-methods differential-equations numerical-integration

在 MATLAB 中,ode45有一个名为 NonNegative 的参数这将解决方案限制为非负。 They even wrote a paper about how this method works以及当它变为负数时将 y_i 设置为 0 并不愚蠢,因为这通常不会起作用。

现在,MATLAB 也有 dde23用于求解延迟微分方程,但此积分器没有等效的 NonNegative 参数。

不幸的是,我的任务是为现有的 ODE 系统添加延迟,该系统使用 ode45 解决。与 NonNegative启用。

我应该如何进行任何想法?

编辑:

我不确定这是否有帮助,但是...

我系统的 DDE 部分基本上是这样的:

 dx = 1/(1+y*z) - x;
 dy = (y*z)^2/(1+(y*z)^2) - y;
 dz = X - z;

其中 X(第三个等式中的大写字母变量)是 x 的延迟版本。然后,我通过向 xz 的方程中添加几项,然后对组合的积分进行积分,将此 DDE 系统链接到现有(和更大的)ODE 系统系统一起。

最佳答案

您遇到了一个棘手的问题,我不确定是否有一步解决方案。我很乐意向任何愿意提供替代答案的人表示敬意。

根据延迟的长度,一种选择是多次运行等式,每次迭代都将 x 的旧值传递给最新更新。

例如,假设您的延迟时间为一小时。在第一个小时内,运行带有 NonNegative 标记的 ode45。将值与时间参数一起存储到新矩阵中,然后再次运行算法。这次确保您添加了两个输入参数:您的旧解矩阵和旧时间矩阵

dx = 1/(1+y*z) - x; 
dy = (y*z)^2/(1+(y*z)^2) - y;
tindex = find(told>t,1) -1 % find the upper index which best approximates t
X = xold(tindex) + (xold(tindex+1)-xold(tindex))*(t-told(tindex))/(told(tindex+1)-told(tindex)) % or interpolation method of your choosing
dz = X - z;

现在清洗、冲洗并重复。请注意,X 现在是一个准时间相关项,如 ode45 中的示例 3 所示。 .

关于matlab - 求解受约束提供非负解的延迟微分方程 (DDE) 系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6977107/

相关文章:

python - 高效切片三角稀疏矩阵

c - 高斯消除的内存管理

R 的 `chol` 与 MATLAB 的 `cholcov` 不同。如何进行类似 Cholesky 的协方差分解?

matlab - 如何确定函数调用的输出是否未使用?

Python 暴力破解 2 个变量的函数

python - 使用 Sympy 和 Scipy 求解欠定方程组和约束

python - 如何减少二维连接域上的集成的集成时间

ARM 与 x86 的浮点运算

performance - 优化矢量化 Matlab 函数

arrays - MATLAB:选择给定范围内的所有数组