ich versuche eine Matrix zu erzeugen indem ich in der ersten Spalte die Parameter hineinschreibe (in dem Fall Masse) und in die anderen Spalten die Y Werte zu den jeweils ausgewerteten Zeiten.
Code:
for row_index = 1:10 for col_index = 1:length(time)
Matrix(row_index,column_index) = [mass(row_index)];
end end
wo kommen diese besagten y-Werte denn her?
Auf der rechten Seite der Zuweisung ist keine Abhängigkeit von col_index, d.h. du würdest 10 mal dasselbe zuweisen.
die y-Werte sind aus der Lösung der ODE (ordinary diff. eq.) und diese möchte ich praktisch rechts neben die Masse listen. Dachte, dass das am Elegantesten mit der nested-loop funktioniert.
P.S: Der gepostete Code ist natürlich nicht vollständig. Wollte fragen, ob du irgendwo optimierungs-/verbesserungsbedarf siehst.
wenn mehrere Spaltenvektoren nebeneinander geschrieben werden sollen, dann reicht normalerweise auch eine for-Schleife über die Spalten, und oft reicht schon [ , ].
Die entscheidende Frage ist, wie deine Daten vorliegen bzw. erzeugt werden. Das geht aus dem Beitrag aber nun einmal nicht hervor.
Die Frage ist nicht klar. Was sind die "Y-Werte" im Code? Wie soll das Ergebnis aussehen?
Der Code ist verwirrend. "col_index" ist vermutlich das gleiche wie "column_index", aber was ist "time"?
ich versuche eine Matrix zu erzeugen indem ich in der ersten Spalte die Parameter hineinschreibe (in dem Fall Masse) und in die anderen Spalten die Y Werte zu den jeweils ausgewerteten Zeiten.
Code:
Matrix = zeros(10, 15);
for row_i= 1:10
y = rand(1, 14);
Matrix(row_i, 1) = mass(row_i);
Matrix(row_i, 2:15) = y;
end
danke für eure Hilfe und Sorry für meine verwirrte Schreibweise und den mageren Input
Hier mal meine Lösung. Die Y-Werte werden von dem ode45-Solver errechnet.
Code:
mm = 1;
for jj = 1:10 [time,eks]=ode45(@Exp_01,ts,y0,SolverOptionen,mass(mm));
for row_index = 1:10
Matrix(row_index,column_index) = mass(row_index);
end for kk = 2:length(time)+1
Matrix(jj,kk) = eks(kk-1);
end
mm = mm + 1;
end
diese Idee setzt voraus, dass ode45 unabhängig von mass immer gleich viele Zeitschritte macht. Um das sicherzustellen, muss ts ein Vektor mit mehr als 2 Elementen sein. Ist das bei dir der Fall?
Kannst du erklären, warum es mehr als 2 Einträge sein müssen? Oder ist das trivial?
Wenn ich jetzt sage, dass das trivial ist, dann hilft dir das nicht weiter, oder? :P
Also: Weil es laut Doku so sein muss, um die Lösung zu festen Stützstellen zu bekommen. Das ist wiederum nötig, wenn du die Lösungen in verschiedenen Spalten einer Matrix anordnen möchtest.
Das verstehe ich aber trotzdem nicht ganz. Erzeugt er mir nicht für jedes FESTES t einen jeweiligen y-Wert, welcher dann in einer neuen Zeile zugewiesen wird? Sieht bei mir zumindest so aus. Die Doku sagt hinsichtlich den "mehr als zwei Einträgen" folgendes:
Evaluation points, returned as a column vector.
If tspan contains two elements, [t0 tf], then t contains the internal evaluation points used to perform the integration.
If tspan contains more than two elements, then t is the same as tspan.
Erzeugt er mir nicht für jedes FESTES t einen jeweiligen y-Wert, welcher dann in einer neuen Zeile zugewiesen wird?
Für jedes Element von t bzw. bei dir time, ja. Nur: wie wird denn time gewählt? Wenn tspan zwei Elemente hat, dann enthält time die internen Zeitschritte, und die sind je nach Dynamik der DGL unterschiedlich. Wenn tspan mehr als zwei Elemente hat, dann sollte time im Grunde tspan sein.
heisst das dann,dass er die internen Zeitschritte variiert bei 2 Elementen ergo die Nachkommastellen je nach (wie du schon sagtest) Dynamik der DGL variieren!?
hat auf jeden Fall sehr geholfen fürs Verständnis und dann noch mit solch einem einfachen Code als Demonstration Besten Dank und dir noch ein schönes Wochenende
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.