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

[Symbolic Toolbox] DAE-System lösen

 

bronsco
Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 06.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.08.2010, 18:04     Titel: [Symbolic Toolbox] DAE-System lösen
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen


Kai Gehrs
Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 12.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.08.2010, 06:44     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
bronsco
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 06.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.08.2010, 07:52     Titel:
  Antworten mit Zitat      
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?
Private Nachricht senden Benutzer-Profile anzeigen
 
Kai Gehrs
Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 12.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.08.2010, 08:07     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
bronsco
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 06.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.08.2010, 08:22     Titel:
  Antworten mit Zitat      
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)...
Private Nachricht senden Benutzer-Profile anzeigen
 
Kai Gehrs
Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 12.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.08.2010, 10:09     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
bronsco
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 06.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.08.2010, 12:58     Titel:
  Antworten mit Zitat      
Ich hatte gehofft die copy/paste-Tätigkeit zu umgehen... Smile

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?
Private Nachricht senden Benutzer-Profile anzeigen
 
Kai Gehrs
Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 12.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.08.2010, 10:28     Titel:
  Antworten mit Zitat      
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
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 - 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.