Ich versuche einige Ressourcen zu finden, um zu erklären, wie man Randbedingungen wählt, wenn man Finite-Differenzen-Methoden zur Lösung von PDEs einsetzt.
Die Bücher und Notizen, auf die ich momentan Zugriff habe, sagen ähnliche Dinge aus:
Die allgemeinen Regeln für die Stabilität bei Vorhandensein von Grenzen sind für einen Einführungstext viel zu kompliziert. Sie erfordern ausgefeilte mathematische Maschinen
(A. Iserles Ein erster Kurs in der numerischen Analyse von Differentialgleichungen)
Beispiel: Wenn Sie versuchen, die 2-Schritt-Sprungmethode für die Advektionsgleichung zu implementieren:
mit MATLAB
M = 100; N = 100;
mu = 0.5;
c = [mu 0 -mu];
f = @(x)(exp(-100*(x-0.5).^2));
u = zeros (M, N);
x = 1/(M+1) * (1:M);
u(:,1) = f(x);
u(:,2) = f(x + mu/(M+1));
for i = 3:N
hold off;
u(:,i) = conv(u(:,i-1),c,'same') + u(:,i-2);
plot(x, u(:,i));
axis( [ 0 1 0 2] )
drawnow;
end
Die Lösung verhält sich gut, bis sie die Grenze erreicht, wenn sie sich sehr plötzlich schlecht verhält.
Wo kann ich lernen, mit solchen Randbedingungen umzugehen?
quelle
Allgemeine Antwort
Ihr Problem ist, dass Sie die Randbedingungen überhaupt nicht festlegen (oder sogar spezifizieren) - Ihr numerisches Problem ist schlecht definiert.
Grundsätzlich gibt es zwei Möglichkeiten, die Randbedingungen festzulegen:
Welchen Weg Sie einschlagen, hängt stark von der Physik Ihres Problems ab. Für Wellengleichungsprobleme bestimmt man normalerweise die Eigenwerte des Flusses Jacobian, um zu entscheiden, ob äußere Randbedingungen erforderlich sind oder ob die innere Lösung verwendet werden soll (diese Methode wird allgemein als "Aufwind" bezeichnet).
Unten finden Sie eine geänderte Version Ihres Quellcodes:
quelle
N = 1000
den Code etwas länger machen und ausführen, stellen Sie fest, dass er sich nicht so verhält, wie erwartet.Ich habe mir das etwas genauer angesehen und es scheint, dass dies (zumindest in den grundlegenden Fällen, die ich behandle) von der Gruppengeschwindigkeit der Methode abhängt.
Die leapfrog Methode ist (zum Beispiel):
Nun müssen wir die Gruppengeschwindigkeit der Randbedingungen herausfinden:
Wir können die Grenzgruppengeschwindigkeit wie folgt berechnen:
Um also einige Gruppengeschwindigkeiten zu finden, die die Grenzen erlauben, müssen wir Folgendes finden:
Ich muss noch ziemlich viel darüber nachlesen, bevor ich es vollständig verstehe. Ich denke, die Schlüsselwörter, die ich suche, sind GKS-Theorie.
Quelle für all diese A Iserles Part III Notizen
Eine klarere Berechnung dessen, was ich getan habe, finden Sie hier: http://people.maths.ox.ac.uk/trefethen/publication/PDF/1983_7.pdf
quelle
Leute, ich bin sehr neu auf dieser Seite. Vielleicht ist dies nicht der richtige Ort, aber bitte verzeihen Sie mir, da ich sehr neu hier bin :) Ich habe ein sehr ähnliches Problem, der einzige Unterschied ist die Startfunktion, die in meinem Fall eine Kosinuswelle ist. Mein Code lautet: Alles löschen; clc; alle schließen;
M = 1000; N = 2100;
mu = 0,5;
c = & mgr; 0 & ndash; u; f = @ (x) 1-cos (20 · pi · x-0,025). ^ 2; u = Nullen (M, N); x = 0: (1 / M): 0,05; u (1: Länge (x), 1) = f (x); u (1: Länge (x), 2) = f (x - mu / (M)); x = Linspace (0,1, M);
für i = 3: N warte;
Diagramm (x, u (:, i)); Achse ([0 1,5 - 0,5 2]) gezeichnet; % pause end
Es gibt bereits diesen Code hier, aber aus irgendeinem Grund, wahrscheinlich im Zusammenhang mit der Kosinuswelle, schlägt mein Code fehl: / Jede Hilfe wäre dankbar :) Danke!
quelle