2016-02-21 4 views
8

Ich bin neu in Theano, und ich versuche, einen numerischen Integrator eines Reaktions-Diffusions-System zu implementieren - FitzHugh–Nagumo model dieser Version:Solving Reaktions-Diffusions-System mit Theano

enter image description here

enter image description here

Denn jetzt meine Ausdrücke sind:

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) 

So habe ich nicht implementiert die Finite-Differenzen laplacian operator noch nicht. Meine Frage ist, ob es einen schlauen Weg in Theano gibt?

+0

Was ist Ihre räumliche Domäne, und was sind die Randbedingungen? –

+0

Mein räumlicher Bereich ist 2D, also sind 'v' und' u' Funktionen von '(x, y)'.Momentan studiere ich periodische Randbedingungen. – Ohm

Antwort

4

Gibt es einen Grund für die Verwendung von Theano? In Python gibt es weitere Möglichkeiten, ein System gekoppelter nichtlinearer ODEs zu lösen.

Die Reaktion-Diffusion-System-Definition von Google scheint darauf hinzudeuten, dass u (x, y, t), v (x, y, t).

Ich bin kein Benutzer von Theano, aber es sieht so aus, als würde man das Problem in Form einer Gleichung wie b = Ax aufstellen.

Einige Ressourcen, auf die ich bei Google gestoßen bin, um Theano zu verwenden und PDEs generell zu lösen, sind unten aufgeführt.

Expressing the Laplacian using Theano

Solving a reaction-diffusion problem using numpy

Github project using Theano to solve the shallow water PDE

+0

Der dritte Link ist wirklich hilfreich – Ohm

+0

['sympy'] (http://www.sympy.org/en/index.html) ist auch eine mögliche Option und vielleicht einfacher als' theano' dafür? –

1

Ich sehe hier zwei gekoppelte, nichtlineare, gewöhnliche Differentialgleichungen erster Ordnung.

Update: Jetzt sind Ihre Gleichungen klar - Laplace sind da; zwei gekoppelte nichtlineare PDEs. Viel besser.

Sie benötigen einen finiten Differenzen- oder Finite-Elemente-Ansatz für Ihre räumliche Diskretisierung. Ihre Wahl natürlich, aber ich würde einen Finite-Elemente-Ansatz über finite Differenzen bevorzugen.

Sie brauchen auch eine Art numerische Integration in der Zeit. Ein implizites Fehlerkorrekturschema wäre am besten.

Ich schaute schnell auf die Theano Docs. Ich habe nichts gesehen, was dir bei deinem räumlichen Diskretisierungsproblem helfen könnte. Sobald Sie dies erreicht haben, werden Sie Matrixgleichungen haben, die Sie lösen können, aber ich glaube nicht, dass Theano Ihnen helfen wird, das Problem zu formulieren.

Ich gebe zu, dass ich kein Theano Maven bin.

2

Ein interessantes Beispiel für eine ähnliche, aber einfachere Problem, behoben mit Faltungs Netzwerke auf Googles tensorflow sind hier zu finden:

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

Insbesondere t hey verwenden Sie die folgende Definition des Diffusionskerns:

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