Example04 / 13
一致型 1 型前馈环(与门)的持续性检测
用欧拉法(步长 0.01,总时长 15)模拟两种线路对输入 X 脉冲的响应: 简单调控:dZ/dt = beta·X − alpha·Z; 一致型 1 型 FFL(与门):dY/dt = beta·X − alpha·Y,dZ/dt = beta·X·θ(Y > K_yz) − alpha·Z。 输入为短脉冲(持续 0.5)与长脉冲(持续 4)。 输出解读:简单调控对两种脉冲都响应;FFL 对短脉冲不响应、对长脉冲延迟响应。 理论延迟 T_on = (1/alpha)·ln(1/(1 − K_yz/Y_st)),此处 Y_st = beta/alpha = 1、K_yz = 0.5,T_on = ln2 ≈ 0.69, 短于 T_on 的脉冲被过滤。改变 K_yz 或 alpha,延迟随之改变:结构相同、参数不同,功能也会不同。
Output输出图

Output文字输出
理论延迟 T_on = ln2 ≈ 0.69 脉冲 0.5:简单调控 Z 峰值 = 0.39,FFL 的 Z 峰值 = 0.00 脉冲 4.0:简单调控 Z 峰值 = 0.98,FFL 的 Z 峰值 = 0.96
Code代码
# 用欧拉法(步长 0.01,总时长 15)模拟两种线路对输入 X 脉冲的响应:
# 简单调控:dZ/dt = beta·X − alpha·Z;
# 一致型 1 型 FFL(与门):dY/dt = beta·X − alpha·Y,dZ/dt = beta·X·θ(Y > K_yz) − alpha·Z。
# 输入为短脉冲(持续 0.5)与长脉冲(持续 4)。
# 输出解读:简单调控对两种脉冲都响应;FFL 对短脉冲不响应、对长脉冲延迟响应。
# 理论延迟 T_on = (1/alpha)·ln(1/(1 − K_yz/Y_st)),此处 Y_st = beta/alpha = 1、K_yz = 0.5,T_on = ln2 ≈ 0.69,
# 短于 T_on 的脉冲被过滤。改变 K_yz 或 alpha,延迟随之改变:结构相同、参数不同,功能也会不同。
import numpy as np
import matplotlib.pyplot as plt
def simulate(pulse_len, ffl=True, beta=1.0, alpha=1.0, K_yz=0.5, dt=0.01, T=15.0, t_on=1.0):
"""模拟数据,仅用于演示方法:阶跃型调控函数的简化模型。"""
t = np.arange(0, T, dt)
X = ((t >= t_on) & (t < t_on + pulse_len)).astype(float)
Y = np.zeros_like(t); Z = np.zeros_like(t)
for i in range(1, len(t)):
Y[i] = Y[i - 1] + dt * (beta * X[i - 1] - alpha * Y[i - 1])
gate = (Y[i - 1] > K_yz) if ffl else 1.0
Z[i] = Z[i - 1] + dt * (beta * X[i - 1] * gate - alpha * Z[i - 1])
return t, X, Y, Z
print(f"理论延迟 T_on = ln2 ≈ {np.log(2):.2f}")
fig, axes = plt.subplots(1, 2, figsize=(10, 3.5))
for ax, L in zip(axes, [0.5, 4.0]):
t, X, Y, Z_ffl = simulate(L, ffl=True)
_, _, _, Z_simple = simulate(L, ffl=False)
ax.plot(t, X, "k--", label="X input")
ax.plot(t, Z_simple, label="Z (simple)")
ax.plot(t, Z_ffl, label="Z (C1-FFL, AND)")
ax.set_title(f"pulse length = {L}"); ax.set_xlabel("time")
print(f"脉冲 {L}:简单调控 Z 峰值 = {Z_simple.max():.2f},FFL 的 Z 峰值 = {Z_ffl.max():.2f}")
axes[0].legend()
plt.tight_layout(); plt.show()Run在浏览器中运行
首次加载 Python 环境约需 20–40 秒;可以修改参数后重新运行。