用 Theano 求解反应扩散系统

Solving reaction-diffusion system with Theano

我是 Theano 的新手,我尝试实现一个反应扩散系统的数值积分器 - FitzHugh–Nagumo model 这个版本:

目前我的表达方式是:

import theano as th
import theano.tensor as T

u = T.dmatrix('u')
v = T.dmatrix('v')
e = T.dscalar('e')
a0 = T.dscalar('a0')
a1 = T.dscalar('a1')

dudt = u - u**3 -v
dvdt = e*(u - a1*v - a0)

所以我还没有实现有限差分laplacian operator。我的问题是在 Theano 中是否有一种聪明的方法来做这件事?

我在这里看到两个耦合的一阶非线性常微分方程。

更新:现在你的方程很清楚了——拉普拉斯算子在那里;两个耦合的非线性偏微分方程。 好多了

您的空间离散化需要有限差分或有限元方法。当然是您的选择,但我更喜欢有限元方法而不是有限差分方法。

您还需要及时进行某种数值积分。隐式纠错方案将是最好的。

我快速浏览了 Theano 文档。我没有看到任何可以帮助您解决空间离散化问题的东西。一旦完成,您将拥有可以求解的矩阵方程,但我不相信 Theano 会帮助您制定问题。

我承认我不是 Theano 专家。

使用Theano有什么理由吗? Python 中还有其他方法可以求解耦合非线性 ODE 系统。

Google 中的反应扩散系统定义似乎表明 u(x,y,t), v(x,y,t)。

我不是 Theano 的用户,但看起来像 b = Ax 这样的方程式形式的问题是可行的。

我在 Google 上遇到的一些使用 Theano 和一般求解偏微分方程的资源如下。

Expressing the Laplacian using Theano

Solving a reaction-diffusion problem using numpy

Github project using Theano to solve the shallow water PDE

在 Google 的张量流上使用卷积网络解决了一个类似但更简单的问题的有趣示例,可在此处找到:

https://www.tensorflow.org/versions/r0.7/tutorials/pdes/index.html

特别是他们使用了扩散核的以下定义:

  laplace_k = make_kernel([[0.5, 1.0, 0.5],
                           [1.0, -6., 1.0],
                           [0.5, 1.0, 0.5]])