作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 Python 研究以下延迟微分方程的行为:
y''(t) = -y(t)/τ^2 - 2y'(t)/τ - Nd*f(y(t-T))/τ^2,
哪里
f
是一个截止函数,当其参数的绝对值在 1 到 10 之间时基本上等于恒等式,否则等于 0(见图 1),并且
Nd
,
τ
和
T
是常数。
f
的术语。功能,因为没有它也会出现问题。图 2 显示了代码给出的函数图。
from jitcdde import jitcdde, y, t
import numpy as np
from matplotlib import pyplot as plt
import math
from chspy import CubicHermiteSpline
# Definition of function f:
def functionf(x):
return x/4*(1+symengine.erf(x**2-Bmin**2))*(1-symengine.erf(x**2-Bmax**2))
#parameters:
τ = 42.9
T = 35.33
Nd = 8.32
# Definition of the initial conditions:
dt = .01 # Time step.
totT = 10000. # Total time.
Nmax = int(totT / dt) # Number of time steps.
Vt = np.linspace(0., totT, Nmax) # Vector of times.
# Definition of the "noise"
X = np.zeros(Nmax)
for i in range(Nmax):
X[i]=math.cos(Vt[i])
past=CubicHermiteSpline(n=3)
for time, datum in zip(Vt,X):
regular_past = [10.,0.]
past.append((
time-totT,
np.hstack((regular_past,datum)),
np.zeros(3)
))
noise= lambda t: y(2,t-totT)
# Integration of the DDE
g = [
y(1),
-y(0)/τ**2-2*y(1)/τ+0.008*noise(t)
]
g.append(0)
DDE = jitcdde(g)
DDE.add_past_points(past)
DDE.adjust_diff()
data = []
for time in np.arange(DDE.t, DDE.t+totT, 1):
data.append( DDE.integrate(time)[0] )
plt.plot(data)
plt.show()
顺便说一下,我注意到即使没有噪音,解决方案在零点处似乎是不连续的(对于负时间,y 设置为零),我不明白为什么。
最佳答案
随着评论的公布,你的问题最终归结为:step_on_discontinuities
假设延迟相对于积分时间很小,并执行放置在延迟分量指向积分开始的那些时间的步骤(在您的情况下为 0
)。这样initial discontinuities被处理。
但是,使用延迟的虚拟变量实现输入会给系统带来很大的延迟,totT
在你的情况下。step_on_discontinuities
的相应步骤将在 totT
本身,即在所需的积分时间之后。
因此,当您到达 for time in np.arange(DDE.t, DDE.t+totT, 1):
时在您的代码中,DDE.t
是 totT
.
因此,您在实际开始集成和观察之前已经迈出了一大步,这可能看起来像是不连续并导致奇怪的结果,特别是您看不到输入的效果,因为此时它已经“结束”了。
为避免这种情况,请使用 adjust_diff
或 integrate_blindly
而不是 step_on_discontinuities
.
关于python-3.x - 使用 JiTCDDE 的意外解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62539759/
我正在尝试使用 Python 研究以下延迟微分方程的行为: y''(t) = -y(t)/τ^2 - 2y'(t)/τ - Nd*f(y(t-T))/τ^2, 哪里f是一个截止函数,当其参数的绝对值在
我是一名优秀的程序员,十分优秀!