Schreiben der Finite-Differenz-Matrix der Poisson-Gleichung mit Neumann-Randbedingungen


15

Ich bin daran interessiert, die Poisson-Gleichung mit dem Finite-Differenzen-Ansatz zu lösen. Ich möchte besser verstehen, wie man die Matrixgleichung mit Neumann-Randbedingungen schreibt. Würde jemand das Folgende überprüfen, ist es richtig?

Die Finite-Differenz-Matrix

Die Poisson-Gleichung,

2u(x)x2=d(x)

kann durch eine Finite-Differenz-Matrix-Gleichung angenähert werden,

1(Δx)2Mu^=d^

wo eine ist Matrix und und sind (Spalten) Vektoren, n × n u d 1 × nMn×nu^d^1×n

Finite-Differenz-Matrix der Poisson-Gleichung

Hinzufügen einer Neumann-Randbedingung

Eine Neumann-Randbedingung erzwingt einen bekannten Fluss an der Grenze (hier wenden wir ihn auf der linken Seite an, wo die Grenze bei ).x=0

u(x=0)x=σ
Schreiben dieser Randbedingung als zentrierte endliche Differenz,

Fehler in der Gleichung. NB. Ich habe hier ursprünglich einen Fehler gemacht, einen Fehler unterschrieben und nicht durch 2 geteilt. Das Folgende wurde korrigiert.

u2-u02Δx=σ

Beachten Sie die Einführung eines Maschenpunkts außerhalb der ursprünglichen Domäne ( ). Dieser Term kann durch Einführen der zweiten Gleichung eliminiert werden u0

u0-2u1+u2(Δx)2=d1

Die Gleichung ergibt sich aus mehr Informationen aufgrund der Einführung des neuen Maschenpunkts. Es erlaubt uns, die doppelte Ableitung von als Grenze in Bezug auf Verwendung einer zentrierten endlichen Differenz zu schreiben .u1u0

Der Teil, bei dem ich mir nicht sicher bin

Die Kombination dieser beiden Gleichungen kann entfallen. Um die Arbeit zu zeigen, lassen Sie uns zuerst das Unbekannte neu arrangieren,u0

u0=-2σΔx+u2u0=(Δx)2d1+2u1-u2

Als nächstes werden sie gleich gesetzt und in die Form neu angeordnet,

u2-u1(Δx)2=d12+σΔx

Ich habe diese Form gewählt, weil sie der obigen Matrixgleichung entspricht. Beachten Sie, dass die Terme sowohl hier als auch in der ursprünglichen Gleichung durch dividiert sind . Ist das der richtige Ansatz?u(Δx)2

Verwenden Sie schließlich diese Gleichung als erste Zeile der Matrix,

Poisson-Gleichung mit einer Neumann-Randbedingung auf der linken Seite (korrigiert)

Einige abschließende Gedanken,

  1. Ist diese endgültige Matrix korrekt?
  2. Hätte ich einen besseren Ansatz wählen können?
  3. Gibt es eine Standardschreibweise für diese Matrix?

2
Ihre Berechnung enthält zwei Fehler: Eine zentrierte endliche Differenz muss durch dividiert werden . Zweitens ist ebenfalls falsch, weil das Minus ein Plus sein muss. 2Δxu0=-σΔx+u2
vanCompute

3
Dies wird in LeVeques Finite-Differenzen-Text , Kapitel 2 , sehr gut herausgearbeitet .
David Ketcheson

1
Diese Probleme werden auch in scientificpython.net/1/post/2013/01/…
Evgeni Sergeev

Antworten:



1

u0

Treten Sie zurück und denken Sie eine Sekunde über das Problem nach. Die Angabe einer Laplace-Gleichung besagt grundsätzlich, dass jeder Punkt der Durchschnitt seiner Nachbarn ist. Dies wird üblicherweise als Gummiplatte dargestellt und hilft mir, über diese Dinge nachzudenken. (Poisson ist ähnlich mit mehr oder weniger dehnbaren Punkten)

Wenn Sie den Wert der Lösungsoberfläche an den äußersten Rändern angeben, "fixieren" Sie das Blatt an diesen Punkten im Raum. Wenn Sie das Blatt anhand seiner Ableitung an den Rändern angeben, gibt es eine beliebige Anzahl von Lösungen, die die Gleichung erfüllen, die das Blatt im Raum übersetzt, während die tatsächliche Form und damit die Ableitungen beibehalten werden.

u0=0


1
In der Regel wird die Poisson-Gleichung also mit mindestens einer Dirichlet-Randbedingung gelöst, so dass eine eindeutige Lösung gefunden werden kann? Ich denke, es ist sinnvoll, dass die Neumann-Randbedingungen nur dann sinnvoll sind, wenn Quelle und Senken enthalten sind, ansonsten gibt es unendlich viele Lösungen. Wenn ich stattdessen die Diffusionsgleichung nehme, sind manchmal Neumann-Randbedingungen für die korrekte Physik erforderlich (z. B. kein Fluss der Größe durch eine Grenze bei du / dx = 0). Das interessiert mich wirklich. Ist die obige Methode der richtige Ansatz, um Neumann-BCs anzuwenden?
Boyfarrell

1
Sie können Neumann BCs nicht auf allen Seiten Ihres Papiers auftragen. In diesem Fall haben Sie keine eindeutige Lösung. Es muss mindestens einseitig festgesteckt sein.
vanCompute

@meawoppl: Wie spezifiziert man den Fixpunkt und löst dabei auch eine direkte Matrix?
Jvriesem

Normalerweise weisen Sie einer Konstanten einfach einen Punkt zu, indem Sie nur einen Term in einer Reihe auf 1, den Rest auf Null und einen Wert auf der rechten Seite setzen, der der gewünschten Lösungsebene entspricht.
Meawoppl
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.