Ich habe für mein Studium ein Aufgabe zu lösen.
Ich muss eine DGL für das öffnen einer Bahnschranke aufstellen und diese dann nummerisch mit Matlab lösen.
Die DGL für eine Schranke ohne Gegengewicht habe ich mittlerweile:
Phi''(t)=(g * cos(Phi(t))) / L
Um das mit Matlab zu lösen muss ich aus dem DGL 2. Ordnung ein DGL System 1. Ordnung machen.
Wie kann ich das jetzt mit Matlab lösen, hat jemand eine Idee?
das kannst du mit
ode45
lösen, siehe vor allem die Beispiele "Solve Nonstiff Equation" oder auch "Pass Extra Parameters to ODE Function".
Der erste Schritt ist wie du schon sagst das Umwandeln in ein System von DGLen 1. Ordnung. Hast du das schon gemacht?
Anschließend kannst du das wie in den Beispielen mit ode45 lösen.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Was oben steht ist sehr ähnlich zur Ausgangslage in den Beispielen, daher sollte sich das übertragen lassen. Auch wenn es besser ist zu verstehen, was man tut, muss man das fast nicht mal, um es zu übertragen.
Falls du dabei Schwierigkeiten hast: je konkreter die Frage ist bzw. die Schwierigkeiten erklärt werden, desto eher ist es möglich zu antworten bzw. zu unterstützen.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
tspan = [0, 10]; y0 = [0; 0]; % 2 Gleichungen --> 2 Anfangsbedingungen [t,y] = ode45(@dgl, tspan, y0);
plot(t,y(:,1),t,y(:,2)); % es gibt nur 2 Komponenten und damit auch nur 2 Spalten
function dphi = dgl(t,phi)
g = 9.81; % keine globalen Variablen. Wenn etwas variabel sein soll, dann siehe das "Passing Extra Parameters" - Beispiel
L = 1; % wie zu g. War nicht definiert, ich habe mal L = 1 gesetzt
dphi (1,1) = phi(2); % du musst in phi indizieren
dphi (2,1) = (g * cos(phi(1))) / L ;
Das sind die Anfangsbedingungen für die DGL. Ohne die ist eine numerische Lösung nicht möglich. Im Beispiel habe ich mal phi(0) = phi'(0) = 0 genommen.
Zitat:
Ich möchte für verschiedene Winkel das Ergebnis haben.
Die Frage verstehe ich nicht. Der Winkel ändert sich doch ständig?
Falls du verschiedene Anfangsbedingungen meinst: da hilft nur eine for-Schleife.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
y ist der sogenannte Zustandsvektor mit allen Zustandsvariablen des Systems. In deinem Fall ist das der Winkel phi der Schranke sowie die erste Ableitung des Winkels nach der Zeit, also die Winkelgeschwindigkeit. Ich würde dir wie Harald empfehlen phi anstelle von y zu verwenden, das ist für das Verständnis einfacher.
y0 enthält deine Anfangsbedingungen, schließlich muss der solver wissen an welchem Punkt und mit welcher Startgeschwindigkeit deine Schranke startet.
y0 muss für jede Zustandsgröße einen Startwert enthalten, er sollte also 2 Einträge enthalten, nicht vier.
Das Problem liegt bei phi(t). Ode45 läuft durch t durch (von tspan(1) bis tspan(2)) und nimmt dabei auch Gleitkommawerte an, dadurch der Fehler. Deswegen hat Harald in seiner Version phi(1) benutzt.
In deiner Aufgabenstellung steht vmtl. phi(t) um zu verdeutlichen, dass phi eine Funktion von der Zeit ist. Deswegen musst du t aber nicht als index verwenden.
Ich möchte mein Programm noch erweitern.
Mit der DGL habe ich jetzt ja die Geschwindigkeit und die Beschleunigung der Schranke in Abhängigkeit von Zeit und Winkel.
Nun möchte ich eine Animation dazu haben, also das man sieht, wie die Schranke öffnet.
Ich kenne es bisher so, dass ich in einer For-schleife zu jedem Winkel die x und y Koordinaten berechne und diese in der Schleife Plotte, wodurch eine Animation entsteht.
Die Geschwindigkeit wird dabei durch die Berechnungsdauer oder die Pausen in der Schleife gesteuert.
Nun habe ich aber die Geschwindigkeit und die Beschleunigung vom Schwerpunkt der Schranke.
Wie kann ich in diesem Fall eine Animation einbringen?
Mit der DGL habe ich jetzt ja die Geschwindigkeit und die Beschleunigung der Schranke in Abhängigkeit von Zeit und Winkel.
ode45 integriert ja. Meines Erachtens bekommst du also Winkel (1. Spalte) und Winkelgeschwindigkeit (2. Spalte) in Abhängigkeit der Zeit t zurück.
Ich könnte mir das so vorstellen: die Schranke als Strecke, deren Winkel (und damit min. ein Endpunkt oder auch beide, je nachdem ob der Drehpunkt ein Endpunkt ist oder nicht) sich über die Zeit hinweg ändert.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
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.