Automatische Erzeugung von Finite-Differenzen-Matrizen für PDE-Systeme

8

Angenommen, Sie müssen ein System von PDEs lösen. Nehmen wir zumindest der Einfachheit halber an, dass es zeitunabhängig, quasi-linear (linear in seinen Ableitungen) ist, gelöst auf einem rechteckigen Gitter im (x, y) Raum und mit rundum festgelegten Randbedingungen. Meine Frage ist allgemeiner, aber fangen wir hier an.

Es kann zwei abhängige Variablen geben, und v ( x , y ) . Die allgemeine Gleichung könnte folgende Form haben:u(x,y)v(x,y)

a(x,y)Yxx+b(x,y)Yyy+cYxy+d(x,y)Yx+e(x,y)Yy=f(x,y,Y)

wobei alle Funktionen bis e 2x2-Matrizen sind, f eine 2x1-Matrix ist und Y istaefY

Y(x,y)=(u(x,y)v(x,y))

Angenommen, Sie möchten eine numerische Näherung mit endlicher Differenz berechnen. Angenommen, die Gitterpunkte sind in x und y gleichmäßig verteilt. Sie können in N Punkte und y in M Punkte diskretisieren . Und dann würden Sie eine Lösung als 2 (nm) -Säulenvektor konstruieren.xNyM

X=(u11un1unmv11vnm)

Sie würden dann eine Art Matrixgleichung lösen

(A+B+C+D+E)X=b,

wobei die 2nm x 2nm-Matrizen bis E Finite-Differenzen-Matrizen für die entsprechenden Differentialoperatoren sind. Die kombinierte Matrix in den Klammern weist eine Art Blockbandstruktur auf. Ihre Kantenwerte können aufgrund von Randbedingungen kompliziert sein.AE

AE

Das Problem ist, dass ich dies von Hand tun kann, aber es ist (i) viel Algebra; und (ii) bei der Implementierung vielen Tippfehlern und Fehlern unterliegen.

Zum Beispiel, hier ist ein Code, den Sie alle notwendigen Vektoren für einen 1D - Finite - Differenzen ‚Matrix‘ für verschiedene Ordnungen von Derivaten gibt. Gibt es eine Analogie für PDE-Systeme im Flugzeug?

TSGM
quelle

Antworten:

3

Mir ist keine einfache Lösung bekannt, aber es ist nicht allzu schwierig, dies mit einem symbolischen Berechnungspaket wie Maple oder Maxima zu automatisieren . Sie können hier ein Beispiel für diese Idee sehen, die auf eine 1D-Diffusionsgleichung angewendet wird.

Insbesondere möchten Sie die Funktionen LinearAlgebra[GenerateMatrix](in Maple) oder augcoefmatrix(in Maxima). MATLAB verfügt über eine Toolbox für symbolische Berechnungen, die meiner Meinung nach auch für diesen Zweck verwendet werden kann.

In Bezug auf die Automatisierung der Implementierung können Sie das CodeGenerationModul in Maple verwenden, um MATLAB-Code auszugeben, oder die Funktionen grindund fortranvon Maxima, um eine Ausgabe zu erzeugen, die MATLAB nahe kommt.

Juan M. Bello-Rivas
quelle