python - 利用空间扩散因子实现 Fitzhugh-Nagumo 模型的数值求解

标签 python differential-equations pde

我正在尝试为 Fitzhugh-Nagumo 模型提出一个 python 实现。

V_t = V_xx + V(V - a)(1 - V) - W + I
W_t = eps(beta*V - W)

使用 eps = 0.05, a = 0.2, beta = 5, I = .1 的基本代码,我可以对系统进行数值求解(无需 V_xx ),但我似乎不知道如何实现空间扩散。

def func_v(v, w):
    return v * (1 - v) * (v - .2) - w + .1


def func_w(v, w):
    return .05 * (5 * v - w)


def get_yn(t0, v, w, h, t):
    while t0 < t:
        w += h * func_w(v, w)
        v += h * func_v(v, w)
        t0 += h
    return v, w

我知道二阶导数的中心差分公式是

V_xx(x_i, t) = (V(x_i+1, t) - 2*V(x_i, t) + V(x_i-1, t)) / dx^2

但是我如何实现 x_i 的不同值(比如说从 x=010)以获得波形沿x轴传播?

enter image description here

结果应该给出一个像这样传播的波。

最佳答案

ODE 求解器(实际上是任何计算机程序)只能处理具有有限维状态的问题。该偏微分方程中的状态是x 的一对函数v,w。从必要的普遍性来看,这些不能在计算机中表示。因此,您需要使用有限近似。在许多情况下被认为足够的第一个是简单函数表。然后使用有限差分公式计算 x 导数。

x = np.linspace(0,L,N+1);
dx = x[1]-x[0];
v0,w0 = initial_functions(x);

def func_v(v, w):
    d2v = -2*v;
    d2v[0] += v[-1]+v[1];
    d2v[1:-1] += v[:-2] + v[2:]
    d2v[-1] += v[-2]+v[0];
    return d2v/dx**2 + v * (1 - v) * (v - .2) - w + .1

等等

对于概念验证,欧拉方法可能就足够了,但获得的值是有问题的。使用更高阶的方法来获得可用的结果,而无需使用小得离谱的时间步长。

关于python - 利用空间扩散因子实现 Fitzhugh-Nagumo 模型的数值求解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59364039/

相关文章:

eclipse-plugin - Eclipse 插件开发 : IProject and IFile cannot be resolved to a type.?这个的库在哪里?

Eclipse PDE : What is a "target platform"?

python - 使用 Cross tab (spark dataframe) 的结果在 SparkMlib 中进行卡方检验

python - ImportError:无法从 Django Admin Pillow 导入名称 _imaging 访问

python - 如何在python中终止正在运行的线程?

python - 并行求解微分方程,python

julia - 如何访问 Julia 中神经 ODE 的训练参数?

wolfram-mathematica - 在 Mathematica 中求解双调和方程

python - Django 查询集与列表