WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Burgers-Gleichung lösen und plotten

 

cc-ler
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 06.01.10
Wohnort: Jena/Saarbrücken/Nancy
Version: ---
     Beitrag Verfasst am: 06.01.2010, 11:06     Titel: Burgers-Gleichung lösen und plotten
  Antworten mit Zitat      
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 Wink ). 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.

Schon mal vielen Dank für eure Hilfe im Voraus!

cc-ler

Gleichung.pdf
 Beschreibung:

Download
 Dateiname:  Gleichung.pdf
 Dateigröße:  12.42 KB
 Heruntergeladen:  539 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.01.2010, 11:32     Titel:
  Antworten mit Zitat      
Hallo,

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


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
cc-ler
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 06.01.10
Wohnort: Jena/Saarbrücken/Nancy
Version: ---
     Beitrag Verfasst am: 07.01.2010, 10:42     Titel:
  Antworten mit Zitat      
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=[0 2*pi*sqrt(2) 0 -pi 0];


% On choisit un intervalle de temps de 0 à 10.

[T,A]=ode45(@burgers, [0 10],Ainit)

% 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)];

U= A*S ;
surf(U)  


Vielen Dank füre Mühe und vor allem deine schnelle Antwort, Harald!!!

cc-ler
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.01.2010, 11:03     Titel:
  Antworten mit Zitat      
Hallo,

auf den ersten Blick denke ich, dass das gehen müsste:

Code:
function a_strich = burgers(t, a)

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.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
cc-ler
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 06.01.10
Wohnort: Jena/Saarbrücken/Nancy
Version: ---
     Beitrag Verfasst am: 11.01.2010, 11:27     Titel:
  Antworten mit Zitat      
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
 

Und hier meine main (das S stört eigentlich nicht, oder?):
Code:

% main

% Initialwerte
Ainit=[0 2*pi*sqrt(2) 0 -pi 0];


% freigewähltes Zeitintervall von 0 bis 10

[T,A]=ode45(@sujet5, [0 10],Ainit);

% plotten
plot(t,A)


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)];

U= A*S ;
surf(U)
 


Schonmal vielen Dank für eure Hilfe.

cc-ler
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 11.01.2010, 11:44     Titel:
  Antworten mit Zitat      
Hallo,

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


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
cc-ler
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 06.01.10
Wohnort: Jena/Saarbrücken/Nancy
Version: ---
     Beitrag Verfasst am: 11.01.2010, 13:55     Titel:
  Antworten mit Zitat      
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
Code:
Error in ==> main2 at 12
plot(t,A)

Deswegen habe ich das plot... durch surf(A) ersetzt. Nun plottet er was, allerdings kann das so nicht stimmen. Was mache ich falsch?

Vielen Dank!


cc-ler
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 11.01.2010, 14:19     Titel:
  Antworten mit Zitat      
Hallo,

was soll t denn sein? Gemeint war vermutlich
Code:

Fehlermeldung genau lesen und 2 Mal hinschauen, und es sollte klar sein...

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.