跳转至

FitzHugh-Nagumo 神经元的最小能量刺激

背景

FitzHugh-Nagumo 模型用快速膜电压变量和慢速恢复变量描述可兴奋细胞动力学。它既保留了神经兴奋中类似阈值的非线性跃迁,又足够简洁,适合作为最优控制教程。

本例寻找单向有界电流,以最小归一化刺激能量,在固定截止时刻把静息神经元模型带到指定电压。只有当独立前向积分在电压仍向上变化时到达该值,结果才会通过验收。这里的目标是一次上升沿穿越,并非终端平衡态,也不能证明截止时刻之后会形成完整动作电位。

问题定义

\(v(t)\) 为膜电压,\(w(t)\) 为恢复变量,\(I(t)\) 为注入电流。无量纲动力学为

\[ \dot v=v-\frac{v^3}{3}-w+I, \]
\[ \dot w=\varepsilon\left(v+a-bw\right), \]

其中

\[ a=0.7, \qquad b=0.8, \qquad \varepsilon=0.08. \]

初始条件为脚本采用的无外部刺激静息平衡点:

\[ v(0)=v_r=-1.1994080352440348, \]
\[ w(0)=w_r=\frac{v_r+a}{b}=-0.6242600440550435. \]

在固定无量纲时域 \(T=12\) 的末端,只约束电压:

\[ v(T)=1, \qquad w(T)\ \text{自由}. \]

目标是最小化归一化电流平方:

\[ \min_{v,w,I}\;J= \int_0^T\left(\frac{I(t)}{I_{\max}}\right)^2\,\mathrm dt, \qquad I_{\max}=2. \]

路径边界把轨迹限制在模型范围内:

\[ -2.5\le v(t)\le2.5, \qquad -1\le w(t)\le2, \]
\[ 0\le I(t)\le2. \]

优化问题本身没有加入终端导数约束。求解之后,独立积分轨迹必须满足 \(\dot v(T)>0\);否则脚本会把它判为错误方向的穿越并拒绝结果。

变量与单位

符号 含义 单位或数值
\(t\) 模型时间 无量纲
\(v\) 膜电压状态 无量纲
\(w\) 慢恢复状态 无量纲
\(I\) 注入刺激电流 无量纲
\(a\) 恢复偏置 \(0.7\)
\(b\) 恢复增益 \(0.8\)
\(\varepsilon\) 快慢时间尺度比 \(0.08\)
\(T\) 固定刺激时域 \(12\)
\(J\) 电流除以 \(I_{\max}\) 后的平方积分 无量纲

所有量均为无量纲量。若没有额外的物理尺度和电极模型,图中的电流以及报告的电荷、能量都不能换算成安培、库仑或焦耳。

建模选择

非负电流边界使其成为理想化的单相刺激。它适合研究非线性兴奋过程,但不满足电荷平衡。恢复状态在截止时刻自由,因为任务是在上升沿到达电压,而不是收敛到指定平衡点。

脚本使用 \(80\times4\) Lobatto 网格。平滑去极化状态和中等电流仅用于初始化 NLP;它们只是初始猜测,不能替代动力学约束。

独立验证

配点求解后,脚本在 4,001 个时刻重构电流。独立的高精度 DOP853 积分从 \((v_r,w_r)\) 出发并使用该采样电流。脚本比较前向积分状态与配点状态,检查前向终端误差,并在独立传播轨迹上计算

\[ \dot v(T)=v(T)-\frac{v(T)^3}{3}-w(T)+I(T). \]

所有状态与电流边界也会在密集网格上检查。

验证结果

指标 验证值
归一化目标 \(J\) \(0.03586644\)
注入电荷 \(\int I\,\mathrm dt\) \(0.93127477\)
刺激能量 \(\int I^2\,\mathrm dt\) \(0.14346575\)
峰值电流 \(0.21801146\)
前向积分终端电压误差 \(2.272\times10^{-5}\)
前向积分终端电压变化率 \(\dot v(T)\) \(0.721925\)
最大前向积分误差 \(2.289\times10^{-5}\)
最大密集路径越界量 \(0\)

终端电压变化率为正,验证了上升沿到达。并且在报告精度下,\(\int I^2\,\mathrm dt=I_{\max}^2J=4J\),这也直接检验了归一化目标的一致性。

膜电压、优化刺激电流与 FitzHugh-Nagumo 相平面轨迹

适用范围与安全限制

这是教学模型,不是临床波形或医疗建议。模型未包含电极和组织动力学、电荷平衡相位、电极极化、空间激活、物理单位下的安全限值、参数差异、噪声以及截止时刻之后的轨迹。可实际部署的刺激设计需要经过校准的生物物理模型、满足电荷平衡的硬件约束和专业安全审查。

运行示例

python -m examples.neural_stimulation

无界面运行并保存图片:

python -m examples.neural_stimulation --save neural-stimulation.png --no-show
system, phase = build_problem()
guess = initial_guess(phase)
solution = solve_problem(system, guess)
plot_solution(solution)

源代码

完整可运行示例见: examples/neural_stimulation.py