|
|
[Symbolic Toolbox] DAE-System lösen |
|
bronsco |
Forum-Anfänger
|
|
Beiträge: 35
|
|
|
|
Anmeldedatum: 06.07.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 22.08.2010, 18:04
Titel: [Symbolic Toolbox] DAE-System lösen
|
|
|
|
|
Hallo miteinander!
Folgendes Problem liegt vor:
Ich habe ein mechanisches Mehrkörpersystem gegeben, welches nach der Reduktion der Freiheitsgrade durch holonome Zwangsbedingungen (Lagebeziehungen) noch 11 Freiheitsgrade aufweist. Zusätzlich bekomme ich über Kontaktpunkte weitere 5 nicht-holonome Zwangsbedingungen (Geschwindigkeitsbeziehungen). Das ganze führt dann auf ein DAE-System.
Ich stelle nun mit diesen 11 Minimalkoordinaten q die Lagrange-Fkt. L auf und bilde "die linke Seite" der DGL mit d/dt (dL/dq_d) - dL/dq. Zusätzlich kann ich noch meinen Vektor der nichtkonservativen Kräfte aufstellen (ein Teil "der rechten Seite"). Das alles passiert mit der Symbolic Toolbox.
Da ich noch nie mit so einem System gearbeitet habe, sind meine Fragen nun:
1) Wie sieht das weitere Vorgehen aus?
2) Wie beziehe ich die Zwangskräfte mit ein?
3) Anhand einfacher Beispiele habe mir ich so ein DAE-Problem in Malab angeschaut. Doch wie löse ich das ganze wenn ich es zuvor mit der Symbolic Toolbox herleite (und nicht per Hand wie es in den Beispielen möglich war)
Ziel des ganzen wäre es dann auch, eine lineare Zustandsraumdarstellung zu bekommen zwecks Reglerauslegung.
Ich bin für jeden Rat wirklich sehr dankbar!
Viele Grüße,
bronsco
|
|
|
|
|
Kai Gehrs |
Forum-Anfänger
|
|
Beiträge: 19
|
|
|
|
Anmeldedatum: 12.07.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 23.08.2010, 06:44
Titel:
|
|
|
|
|
Hallo,
die Symbolic Math Toolbox stellt derzeit leider keine symbolischen Algorithmen zur Lösung von DAEs zur Verfügung. Auch einen numerischen Solver für DAEs gibt es nicht innerhalb der Symbolic Math Toolbox. Ich fürchte, der einzige Workaround ist die Übertragung des ganzen Problems nach MATLAB.
Es muss nichts heißen, aber ich habe bisher auch noch keinen erschöpfenden symbolischen Ansatz zur Lösung von DAEs gesehen. Das sind Probleme, die man in der Regel numerisch angeht.
Das muss aber nicht heißen, dass die symbolische Vorarbeit vergebens war. Mitunter mag es sehr nützlich sein, die Gleichungen vorab symbolisch in ihrer Struktur zu vereinfachen, damit entsprechende für das Problem geeignete numerische Löser dann ein einfacheres Leben haben.
Ich vermute, die Nachfrage nach der linearen Zustandsraumdarstellung läuft auf Indexreduktion der DAE hinaus - also Reduktion auf ein System vom Index 0, was ja dann - wenn ich mich nicht irre - direkt ein gewöhnliche ODE System beschreibt. Auch hierfür (zur symbolischen Indexredutkion) sind keine Methoden in der Symbolic Math Toolbox vorhanden.
Viele Grüße aus Paderborn,
-- Kai Gehrs
|
|
|
bronsco |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 35
|
|
|
|
Anmeldedatum: 06.07.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 23.08.2010, 07:52
Titel:
|
|
Kai Gehrs hat Folgendes geschrieben: |
Ich fürchte, der einzige Workaround ist die Übertragung des ganzen Problems nach MATLAB.
(...)
Das muss aber nicht heißen, dass die symbolische Vorarbeit vergebens war. Mitunter mag es sehr nützlich sein, die Gleichungen vorab symbolisch in ihrer Struktur zu vereinfachen, damit entsprechende für das Problem geeignete numerische Löser dann ein einfacheres Leben haben.
|
Danke für ihre Antwort! Ich habe soetwas schon vermutet, dass ein weiteres Arbeiten in der Symbolic Toolbox nicht möglich sein wird.
Was darf ich unter "Übertragung des Problems nach Matlab" verstehen? Können Sie die zweite Aussage evtl. genauer ausführen?
|
|
|
Kai Gehrs |
Forum-Anfänger
|
|
Beiträge: 19
|
|
|
|
Anmeldedatum: 12.07.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 23.08.2010, 08:07
Titel:
|
|
Hallo,
im Notebook Interface der Symbolic Math Toolbox (also direkt in MuPAD) gibt es die Funktion 'generate::MATLAB'. Das könnte hilfreich sein, wenn Sie versuchen, Ihr Problem nach MATLAB zu portieren.
Zur symbolischen Vorarbeit: Je nach dem, wie das Problem formuliert wird, mag ein symbolisches 'Simplify' auf den Gleichungen eine Vereifachung herbeiführen, die das System u.U. numerisch effizienter behandeln lässt. Stellen Sie sich vor, sie hätten Ausdrücke der Form 'sin(x)^2 + cos(x)^2'. Da macht es natürlich schon Sinn, diese zu '1' zu vereinfachen. Das hängt natürlich sehr von den gegebenen Gleichungen ab, ob es wirklich hilfreich ist. Unter Umständen haben Sie eine Formulierung Ihres Problems, die bereits optimal vereinfach ist.
Viele Grüße aus Paderborn,
-- Kai Gehrs
|
|
|
bronsco |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 35
|
|
|
|
Anmeldedatum: 06.07.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 23.08.2010, 08:22
Titel:
|
|
Ah okay! In dem Notebook Interface habe ich allerdings nicht gearbeitet. Ich schreibe das ganze in einem M-File.
Aber wie stelle ich dann dem Solver nach der Simplifizierung mein Problem zur Verfügung? Ich habe das Gefühl, dass mir da irgendwie die Brücke fehlt, da ich ja die ganze Zeit "nur" symbolisch arbeite (wobei ich konstante Parameter wie Längen und Massen auch schon vorab definieren kann)...
|
|
|
Kai Gehrs |
Forum-Anfänger
|
|
Beiträge: 19
|
|
|
|
Anmeldedatum: 12.07.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 24.08.2010, 10:09
Titel:
|
|
Hallo,
suchen Sie am besten nach dem Stichwort 'DAE' in der MATLAB Dokumentation. Da gibt es Beispiele, wie man in MATLAB mit DAEs verfährt (z.B. van der Pol Equation).
Die Funktion 'generate::MATLAB' ist leider nur auf Seiten des MuPAD Interfaces verfügbar. Sie können innerhalb von MATLAB z.B. mit dem Kommando evalin(symengine,'generate::MATLAB(x^2+y^2)') direkt Befehle von der Symbolic Math Toolbox auswerten lassen. Vielleicht hilft das ein wenig.
Vermutlich werden Sie nicht darum herumkommen, händisch einige Nachbearbeitungsschritte beim Konvertieren der Gleichungen aus Ihrem M-File durchzuführen.
Viele Grüße aus Paderborn,
-- Kai Gehrs
|
|
|
bronsco |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 35
|
|
|
|
Anmeldedatum: 06.07.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 24.08.2010, 12:58
Titel:
|
|
|
|
|
Ich hatte gehofft die copy/paste-Tätigkeit zu umgehen...
Das Problem an der Sache ist ja eigentlich, dass ich dieses instabile DAE-System nicht "sofort" lösen will, da es ja durch Regelung der Eingangsgrößen stabilisert werden soll. Eine Lösung wäre ja, es in ein ODE zu überführen:
BGL: M*q_dd = h + W*lambda
NB: g_d = W' * q_d
-> NB einmal ableiten, die BGL für q_dd einsetzen und nach lambda auflösen. Somit hätte man die Zwangskräfte lambda und könnte diese wiederum in die BGL einsetzen -> ODE (q = Minimalkoordinaten, d = 1. Zeitableitung, dd = 2. Zeitableitung). Das Problem dabei ist dann noch die numerische Drift. Aber dieses ODE ließe sich dann einfach um den Arbeitspunkt (Nullpunkt) linearisieren usw...
Problem dabei: für lambda gilt
lambda = inv(W' * inv(M) * W) * (-W'*inv(M)*h - W_d'*q_d),
mit den symbolischen (!) Matrizen und Vektoren M = 11x11, W = 11x5, h = 11x1, q_d = 11x1. Hierfür habe ich dann ein Out of Memory Error erhalten (auch mit den Operatoren \ und /).
Gibt es da einen Ausweg?
|
|
|
Kai Gehrs |
Forum-Anfänger
|
|
Beiträge: 19
|
|
|
|
Anmeldedatum: 12.07.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 26.08.2010, 10:28
Titel:
|
|
|
|
|
Hallo,
schwer zu sagen.
Ich würde folgendes probieren: In MuPAD selbst gibt es die Funktionen 'linalg::matlinsolve' sowie 'numeric::matlinsolve' sowie auch 'numeric::inverse' (letztere erlauben die Option 'Symbolic'). Es käme auf einen Versuch an, die Invertierung der Matrizen darüber durchzuführen (also direkt über 'numeric::inverse' sowie indirekt über Lösen von Gleichungssystemen, wo die rechten Seiten der linearen Gleichungssysteme dann als entsprechende Einheitsvektoren zu wählen sind). Die die Methoden nicht unbedingt die gleichen algorithmischen Ansätze implementieren, besteht eine Möglichkeit, im konkreten Anwendungsfall einen besseren Lösungsweg zu finden.
Alternativ könnten Sie dann noch versuchen, in MuPAD die Matrizen direkt über modifizierten Koeffizientenringen mit einem alternativen Normalisierungsalgorithmus zu definieren (etwa über 'Dom::ExpressionField(expand,iszero)') und dann die Matrizen darüber zu invertieren.
Ein Beispiel:
A:= Dom::Matrix(Dom::ExpressionField(expand,iszero))([[1/a,1/b],[a+c,1/(a+c)]]): A^(-1)
ergibt ein anderes Ergebnis als
A:= Dom::Matrix(Dom::ExpressionField(normal,iszero))([[1/a,1/b],[a+c,1/(a+c)]])
A^(-1)
weil bei der ersten Variante zur Normalisierung innerhalb entsprechender Gauß-Algorithmen die Funktion 'expand' anstelle von 'normal' (wie im zweiten Beispiel) verwendet wird. Es könnte sein, dass Ihr Speicherüberlauf aus der Normalisierung innerhalb der Gauß-Algorithmen kommt. Das ist bei riesigen Ausdrücken mitunter nicht zu vermeiden.
Sie können theoretisch oben statt 'normal' oder 'expand' auch andere Funktionen wie etwa 'simplify' angeben und damit experimentieren.
Die Dokumentation in MuPAD (zu 'Dom::ExpressionField' sowie zu 'Dom::Matrix') sollte bei Bedarf vertiefte Informationen bereitstellen.
Weitere Ideen habe ich aktuell auch nicht.
Viele Grüße aus Paderborn,
-- Kai
|
|
|
|
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
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.
|
|