2016-02-21 15 views
8

Sono nuovo di Teano, e cerco di implementare un integratore numerica di un sistema di reazione-diffusione - FitzHugh–Nagumo model di questa versione:Solving con Theano

enter image description here

enter image description here

per ora le mie espressioni sono:

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) 

Quindi non ho implementato le differenze finite laplacian operator ancora. La mia domanda è se c'è un modo intelligente di farlo a Theano?

+0

Qual è il tuo dominio spaziale e quali sono le condizioni al contorno? –

+0

Il mio dominio spaziale è 2D, quindi 'v' e' u' sono funzioni di '(x, y)'.Per ora sto studiando condizioni al contorno periodiche. – Ohm

risposta

4

C'è qualche motivo per usare Theano? Esistono altri modi in Python per risolvere un sistema di ODE non lineari accoppiati.

La definizione del sistema di diffusione-reazione di Google sembra suggerire che u (x, y, t), v (x, y, t).

Non sono un utente di Theano, ma sembra che risolva il problema sotto forma di un'equazione come b = Ax è la strada da percorrere.

Alcune risorse che ho trovato su Google per l'utilizzo di Theano e in generale la risoluzione dei PDE sono riportate di seguito.

Expressing the Laplacian using Theano

Solving a reaction-diffusion problem using numpy

Github project using Theano to solve the shallow water PDE

+0

Il terzo collegamento è davvero utile – Ohm

+0

['sympy'] (http://www.sympy.org/en/index.html) è anche un'opzione possibile e forse più semplice di' theano' per questo? –

1

Vedo qui due equazioni differenziali ordinarie del primo ordine accoppiate, non lineari.

Aggiornamento: ora le tue equazioni sono chiare - i laplaciani ci sono; due PDE accoppiati non lineari. Molto meglio.

Avete bisogno di una differenza finita o di un approccio ad elementi finiti per la vostra discretizzazione spaziale. La tua scelta, ovviamente, ma preferirei un approccio agli elementi finiti rispetto alle differenze finite.

È inoltre necessario un qualche tipo di integrazione numerica nel tempo. Uno schema implicito di correzione degli errori sarebbe il migliore.

Ho guardato rapidamente i documenti Theano. Non ho visto nulla per aiutarti con il tuo problema di discretizzazione spaziale. Una volta raggiunto il risultato, avrai equazioni matriciali che puoi risolvere, ma non credo che Theano ti aiuti a formulare il problema.

Ammetto che non sono un esperto di Theano.

2

Un interessante esempio di una simile, ma il problema più semplice, risolto utilizzando le reti convoluzionali sul tensorflow di Google si possono trovare qui:

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

In particolare t hey usa la seguente definizione del kernel di diffusione:

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