Verfasst am: 06.01.2010, 11:06
Titel: Burgers-Gleichung lösen und plotten
Hallo!
Zuerst muss ich sagen, dass ich sehr sehr beschränkte Kenntnisse von Mathlab habe und gerade in meiner Austauschuni ins kalte Wasser gewurfen wurde.
Zum Problem: Ich muss die Burgersgleichung lösen und anschliessend graphisch darstellen. Die Lösung, bzw. das zu lösende DGL-System habe ich bereits mittels der Spektralen Methode berechnet (brauchte ich ja auch kein Matlab für ). Des Weiteren habe ich es auch schon hinbekommen für N=5 eine Lösung der DGL's mit Hilfe von ode45 zu plotten. Jetzt stehe ich allerdings vor dem Problem die DGL's für N zu lösen, was bereits daran scheitert, dass ich ehrlich gesagt nicht einmal die Summen in Matlab reinbekomme. Ich habe die letzten Tage einiges Versucht, aber irgendwie bekomme ich nichts hin... Meine Idee war, mittels "flipud" und "hankel" Teile der Gleichung zu vereinfachen, aber nichts funktioniert. Es wäre unglaublich toll, wenn jemand von euch eine Idee hätte und sie sogar erklären würde.
Da ich nicht weiss, wie ich die Gleichung hier reinstellen soll, habe ich sie einfach als PDF angehängt.
ich sehe keinen Weg, eine for-Schleife zu vermeiden. Bei jedem Teil der Summe würde ich mir überlegen, über welche Indizes die Summe läuft.
Inkl. eventueller Fehler:
Code:
a_strich = zeros(N,1);
for n = 1:N
a_strich(n) = -1/2 * pi * sum((1:n-1) .* a(1:n-1) .* a(n-1:-1:1))-1/2 * pi * sum((n+1:N) .* a(n+1:N) .* a(1:N-n)) - nu * 1/2 * (n*pi)^2 * a(n);
end
Hallo,
vielen Dank erstmal! Für mich sieht das soweit ganz logisch aus. Jetzt stellt sich für mich die Frage wie ich jetzt weitermache, um die Gleichung mit ode45 zu lösen und anschliessend zu plotten. Ich denke irgendwie könnte ich meinen Code für N=5 auf das Problem adaptieren aber gerade in der zweiten Hälfte (ab plot(T,A... ) mangelt es mir wohl an Erfahrung und Wissen. Grundsätzlich habe ich jetzt die Summe in eine Funktion geschrieben und will diese nun in eine ähnliche main wie die unten Aufgeführte einbinden, mit ode45 lösen und anschliessend plotten. Geht das? Wenn ja wie?
Hier mal mein code der main von N=5 (die Kommentare sind in französisch, aber ich denke ihr versteht das auch ohne)
Code:
% Programme principale
% Valeur initiale de a
Ainit=[02*pi*sqrt(2)0 -pi0];
% Trace les 5 courbes a1, a2, a3, a4 et a5 plot(T,A(:,1),'-',T,A(:,2),'-.',T,A(:,3),'.',T,A(:,4),'-o',T,A(:,5))
% Trace la courbe 3D de nos résultats
S = [sin(pi)* (0:0.05:1);
sin(2*pi)*(0:0.05:1);
sin(3*pi)*(0:0.05:1);
sin(4*pi)*(0:0.05:1);
sin(5*pi)*(0:0.05:1)];
N = length(a); % nicht optimal, aber tut's.
a_strich = zeros(N,1);
for n = 1:N
a_strich(n) = -1/2 * pi * sum((1:n-1) .* a(1:n-1) .* a(n-1:-1:1))-1/2 * pi * sum((n+1:N) .* a(n+1:N) .* a(1:N-n)) - nu * 1/2 * (n*pi)^2 * a(n);
end
Ansonsten solltest du das direkt wie von dir beschrieben anwenden können. Ich würde allerdings plot(t, A) verwenden und MATLAB die Farbgebung ändern lassen.
Hallo!
Erstmal vielen Dank für deine Antwort, Harald, und sorry für die späte Antwort, aber ich bin nicht eher zum Arbeiten gekommen. Nun habe ich es versucht, aber leider klappt es nicht und ich bekomme Fehlermeldungen, die ich nicht berichtigen kann (hauptsächlich ode45 betreffend). Hier meine Funktion:
Code:
function B = sujet5(t, a)% a_strich ist jetzt B
N = length(a); % nicht optimal, aber tut's.
B = zeros(N,1);
for n = 1:N
B = -1/2 * pi * sum((1:n-1) .* a(1:n-1) .* a(n-1:-1:1))-1/2 * pi * sum((n+1:N) .* a(n+1:N) .* a(1:N-n)) - 1/2 * (n*pi)^2 * a(n);
% nu = 1, zur Vereinfachung end
in der sujet5.m waren 2-3 Fehler [fehlende ' und (n)], auf die man mit Hilfe des Debuggers auch leicht hätte selber kommen können. Hier die korrigierte Variante:
Code:
function B = sujet5(t, a)% a_strich ist jetzt B
N = length(a); % nicht optimal, aber tut's.
B = zeros(N,1);
for n = 1:N
B(n) = -1/2 * pi * sum((1:n-1)' .* a(1:n-1) .* a(n-1:-1:1))-1/2 * pi * sum((n+1:N)' .* a(n+1:N) .* a(1:N-n)) - 1/2 * (n*pi)^2 * a(n);
% nu = 1, zur Vereinfachung end
Hallo,
oh ja, tut mir Leid, das hatte ich nicht gesehen, bzw. nicht beachtet, da ich nach wie vor Probleme mit dem plotten habe und nicht in der main gesucht habe. Mit der main, die ich oben angegeben habe funtioniert das Plotten leider noch nicht
Fehlermeldung genau lesen und 2 Mal hinschauen, und es sollte klar sein...
Grüße,
Harald
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.