Mit dem Befehl function kann man ja eine Funktion definieren. Diese funktion kann dann als dynamische Variable einer ODE mit einem solver gelöst werden.
Z.Z. habe ich mit:
function dy = fu1(t,y,k)
dy=-k^2*y
die funktion definiert. Dabei ist die Funktion abhängig von t.
In meiner Script Datei lass ich dann eine Schleife für k von -N/2 bis N/2 durchlaufen, wobei ich N vorher oben festlege.
In jedem Schleifendurchlauf speicher ich die Lösungen zu gegebenem k in einer Spalte einer Matrix ab. Am Ende hab ich dann eine Matrix mit N+1 Spalten. Jede Spalte entspricht der Lösung zu einem bestimmten k.
Anstelle der Schleife müsste es aber doch auch möglich sein die ODE direkt als Vektor zu lösen.
also man könnte definieren
dy=zeros(1,N+1)
dy(1)=-(-N/2)^2*y
.
.
.
dy(N+1)=-(N/2)^2*y
dabei will ich aber nicht jede Zeile per hand eintippen. Gibt es da keine Möglichkeit dieses System ohne jede Zeile per Hand einzutippen zu definieren?
Da die Gleichungen voneinander unabhängig sind, halte ich es für eine gute Idee, sie getrennt voneinander zu simulieren. Wenn du es aber anders machen möchtest, wäre das System wohl so:
leg ich mit
dy=zeros(1,N+1)
auch schon die länge des vektors y fest?
weil du da numel(y) geschrieben hast.
eigentlich ist meine gleichung nichtlinear.
dy(k) = -k^2*y(k) - y(k) x (ik y(k))
dabei ist x die faltung. also y(k) gefaltet mit ik y(k)
so wie ich es zuvor implementiert hatte
ifft(fft(y(k))*fft(ik y(k))) denkt das programm aber dass die faltung sich auf die t variablen bezieht.
Nein, das machst du im Grunde mit der Länge des Startvektors.
Zitat:
weil du da numel(y) geschrieben hast.
Damit der gleichmäßig unterteilte Vektor genauso lang wie y wird.
Zitat:
denkt das programm aber dass die faltung sich auf die t variablen bezieht.
Ein denkendes Programm? Wäre ne tolle Sache. Aber mal ernsthaft: was soll t sein?
Grüße,
Harald
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 20.05.2013, 02:34
Titel:
Was ist für dich der Startvektor?
Denkendes Programm ist vllt doof ausgedrückt.
ich hab ne function dy=fu1(t,y)
dy=-k^2*y-ifft(fft(y)^2)
der berechnet jetzt die fft von dem spalten vektor y der die werte von y zu unterschiedlichen zeiten t angibt.
ich will aber dass die fft sich auf den vektor zu gleichen zeiten mit unterschiedlichen k bezieht.
bitte gehe auf die Antwort ein und schreibe vor allem, wieso dir das nicht weiterhilft.
Bitte beschreibe auch genau, am besten anhand von Code, was du versucht hast und was daran nicht geklappt hat.
Das ist die Burgers-Gleichung
Mir kam bei deinem obigen zitat:
Zitat:
function dy=fu1(t,y)
dy= -linspace(-N/2, N/2, numel(y))'.*y-ifft(fft(y).^2);
nur erstmal der Gedanke weil ich das schon zuvor probiert hatte, dass eventuell die fft gar nicht von dem vektor ak berechnet wird.
Ich erwarte so auftretende Schocks. Die sind aber nicht da.
Wenn ich das so ausführe nimmt die Amplitude einfach ab.
Daher muss irgendwas nicht stimmen.
Und ich glaube das liegt an der fft
Du kannst ja mal versuchen, die Gleichung von 10:35 explizit als Summe zu berechnen.
Grüße,
Harald
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 20.05.2013, 12:27
Titel:
Sry wenn ich doof frage :-/
Aber 10:35?
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 20.05.2013, 12:30
Titel:
Eine Frage hätte ich allerdings noch.
Für v=0 bekomm ich fortlaufend den Fehler:
Warning: Failure at t=1.411891e+00. Unable to meet integration tolerances without reducing the step size below the smallest value
allowed (3.552714e-15) at time t.
> In ode45 at 309
In BurgerVec at 10
Index exceeds matrix dimensions.
wenn du das laufen lässt siehst du die korrekten schocks.
mit v->0 wird die Flanke unendlich Steil.
Warum das nicht mit der DGL klappt frag ich mich also immer noch.
Wenn Matlab eine DGL löst in meinem Fall ist es die Lösung ak(t), dann ist ak(t) ein Vektor mit den gleichmäßigen Abständen Delta t im Interval.
Kann es sein, dass Matlab von diesem Vektor bei der fft ausgeht?
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.