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] Linearisierung nichtlinearer DGL

 

bronsco
Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 06.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.07.2010, 11:28     Titel: [Symbolic] Linearisierung nichtlinearer DGL
  Antworten mit Zitat      
Hallo miteinander!

ich bin derzeit noch Student und habe im Rahmen einer Studienarbeit aus einem System mit 8 Körpern über die Lagrange'schen Gleichungen 2. Art die nichtlinearen Bewegungsgleichungen mit Hilfe der Symbolic Math Toolbox hergeleitet. Also f(q, q_d, q_dd, u) = 0 mit q = generalisierte Koordinaten und deren zeitliche Ableitungen sowie den Systemeingängen u. Diese nichtlinearen Gleichungen sind seeehr lang geworden durch kinematische Kopplungen usw..

Nun will ich diese nichtlinearen Gleichungen um einen Arbeitspunkt x_0, u_0 linearisieren. Also folgendermaßen:
Code:

 % Linearisierung um Arbeitspunkt
q_0 = zeros(length(q),1);
q_d_0 = zeros(length(q_d),1);
q_dd_0 = zeros(length(q_dd),1);
x_0 = [q_0; q_d_0; q_dd_0];
u_0 = [0; 0; 0];

p = conj([q; q_d; q_dd; u]');
j_Q = jacobian(f,u);
j_M = jacobian(f,q_dd);
j_D = jacobian(f,q_d);
 
Q = subs(j_Q, p, [x_0; u_0]');
M = subs(j_M, p, [x_0; u_0]');
D = subs(j_D, p, [x_0; u_0]');

j_K = jacobian(f,q);
K = subs(j_K, p, [x_0; u_0]');
 


Womit sich ergeben soll: M*q_dd + D*q_d + K*q + Q*u = 0.

Die Berechnung der Matrizen j_Q, j_M, j_D dauert nur ein paar Sekunden, wogegen ich immer eine "Out of Memory" Meldung bei der Berechnung von j_K bekomme. Die Zeit für die Substitution für die Matrizen Q, M beträgt nur wenige Minuten, jedoch rechnet eine Workstation an der Uni schon Tage an der Matrix D! Ist dieser subs-Befehl in der Tat so zeitaufwendig?

Gibt es eine andere Möglichkeit um einfacher/schneller an die linearen Systemgleichungen zu kommen? Ist es möglich, da ich um den Nullpunkt linearisiere, schon im Vorfeld linear zu arbeiten?


Vielen Dank schonmal!

Viele Grüße

p.s. Matlab liegt in der Version R2009b vor
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: 08.07.2010, 20:22     Titel:
  Antworten mit Zitat      
ERGÄNZUNG:

Code:

% generalisierte Koordinaten (Winkel)
q = [alpha; beta; gamma; delta_1; delta_2; delta_3];
q_d = [alpha_d; beta_d; gamma_d; delta_1_d; delta_2_d; delta_3_d];
q_dd = [alpha_dd; beta_dd; gamma_dd; delta_1_dd; delta_2_dd; delta_3_dd];

% Eingang (Drehmoment)
u = [M_1; M_2; M_3];
 
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: 12.07.2010, 12:56     Titel:
  Antworten mit Zitat      
Hi,

ich habe versucht, das Problem mit der Symbolic Math Toolbox zu reproduzieren, bin aber daran gescheitert, dass mir zu einigen Parametern (?) Angaben fehlen. So ist mir unklar, was 'f' ist, ebenso 'M_1', 'M_2', 'M_3' sind mir auch unklar. Sind das symbolische Variablen?

Zu der Anwendung selbst kann ich wenig sagen. Jedoch kann die sukzessive symbolische Differentiation im hoch-symbolische Fall schon durchaus zu massivem Expression Swell führen. Eventuell hilft es, zwischendurch Zwischenergebnisse zu normalisieren oder zu simplifizieren. Um das zu verifizieren, bräuchte ich allerdings Code, den ich so abgreifen kann und der dann in sich konsistent ist und fehlerfrei (bis zum eigentlichen Problem) läuft.

Viele Grüße,
-- Kai

---------------------

Dr. Kai Gehrs
Senior Software Engineer

The MathWorks GmbH | Friedlandstr.18 | 52064 Aachen | District Court Aachen | HRB 8082 | Managing Director: Andreas Schindler, Steven D. Barbo
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: 12.07.2010, 14:01     Titel:
  Antworten mit Zitat      
danke schonmal für die antwort!

hab im anhang mal das m-file hinzugefügt... (der "schreibstil" ist mit sicherheit nicht überragend, wenns mal laufen würde, würde ich mich dem nochmal widmen Wink)

bis Zeile 353 läuft alles einwandfrei in ein paar minuten, doch bei dem subs befehl in zeile 354 hatte die workstation in der uni erfolglos (da manueller abbruch) mehrere tage gerechnet...

p.s. die "t..=.." zeilen habe ich eingefügt um den zeitbedarf für gewisse abschnitte zu sehen und um eine rückmeldung zu bekommen wo er gerade steht in der ausführung...

RT_BWGL_3D.m
 Beschreibung:

Download
 Dateiname:  RT_BWGL_3D.m
 Dateigröße:  11.73 KB
 Heruntergeladen:  738 mal
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: 13.07.2010, 09:16     Titel:
  Antworten mit Zitat      
Hi,

zuerst einmal danke für die ausführliche Problembeschreibung. So konnte ich die einzelnen Schritte sehr gut nachvollziehen. Ich habe die Berechnungen einige Zeit laufen lassen, bin jedoch nicht über das Lösen und Simplifizieren des Systems in Zeile 235 hinausgekommen.

Ich habe mich bei unseren Experten für Symbolische Mathematik erkundigt und die allgemeine Einschätzung ist, dass das Problem "out of scope" zu sein scheint. So wie das Problem aktuell gestellt ist, ist es vermutlich auf "normaler Hardware" nicht machbar.

Die Tatsache, dass bei Deiner Berechnung der Fehler "Out of Memory" im Rahmen des genannten 'subs'-Kommandos aufgetreten ist, halte ich für Zufall. Meiner Ansicht nach liegt das nicht daran, dass 'subs' in irgendeiner Form eine teure Operation ist. Es scheint mir eher so zu sein, dass mehr oder weniger zufällig dieses Kommando dann den Speicher zum Überlauf gebracht hat. Wie gesagt: beim Reproduzieren auf einem Windows 32-Bit-System kommt man nicht mal so weit.

Wenn Du Dein Problem entkoppeln und in kleinere Teilprobleme zerlegen könntest, wäre das einen erneuten Versuch wert.

Eine andere Möglichkeit, die man ausprobieren könnte, wäre, dass man die Initialisierungen der Parameter, die ziemlich gegen Ende des .m-Files vorgenommen werden, vorzieht, um die Anzahl an symbolischen Parametern zu verringern.

Auch wenn intern Gleitkommazahlen bei symbolischen Berechnungen rationalisiert werden, ist es immer besser, von vorne herein exakte Eingaben (also Brüche) anstelle von Gleitkommazahlen einzugeben. Ferner sind einige der Bezeichner - wie etwa 'beta' - in MuPAD vorbelegte Namen für Systemfunktionen. Das MATLAB-Interface der Symbolic Math Toolbox sorgt zwar dafür, dass diese intern entsprechend substituiert werden, aber ich würde generell eher dazu raten, derartige vorbelegte Variablennamen zu vermeiden.

Schließlich noch ein letzter Tipp: Beim Lösen solcher nicht-linearen Systeme mit 'sin' und 'cos' kann ein Umschreiben nach 'tan' den Lösungsprozess unter Umständen beschleunigen (ist hier auch nicht der Ausweg, mag aber vielleicht in Zukunft helfen). Dies ist möglich über das "rewrite(...,tan)"-Kommando in MuPAD.

All das ist leider keine schnelle Lösung für das gegebene Problem, aber vielleicht hilft es ja ein wenig - sei es nur in Zukunft bei der Bearbeitung neuer Probleme.

Viele Grüße aus Paderborn,
-- Kai

---------------------

Dr. Kai Gehrs
Senior Software Engineer

The MathWorks GmbH | Friedlandstr.18 | 52064 Aachen | District Court Aachen | HRB 8082 | Managing Director: Andreas Schindler, Steven D. Barbo
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: 15.07.2010, 15:45     Titel:
  Antworten mit Zitat      
vielen dank für ihre ausführliche antwort!

das ich die zahlenwerte erst am ende im skript stehen habe, lag daran, dass ich mit den werten "spielen" wollte und zuerst stur mit symbolischen variablen die gleichungen aufstellen wollte.

nun habe ich bei einigen zeilen den simplify-befehl eingefügt sowie die initialisierung der parameter mit den zahlen an den anfang vom skript gesetzt - und siehe da: nach einer guten stunde habe ich ergebnisse! Smile

bleibt bloß noch die frage nach der validierung offen - aber das ist ein anderes thema... Cool

nochmals danke für ihre anregungen!

viele grüße
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: 15.07.2010, 15:50     Titel:
  Antworten mit Zitat      
Hi,

es freut mich wirklich sehr zu lesen, dass nach den anfänglichen Problemen doch noch ein paar Früchte abgefallen sind Smile Das ist doch prima.

Schön, dass ich ein bißchen helfen konnte.

Viele Grüße aus Paderborn,
-- Kai Gehrs

---------------------

Dr. Kai Gehrs
Senior Software Engineer

The MathWorks GmbH | Friedlandstr.18 | 52064 Aachen | District Court Aachen | HRB 8082 | Managing Director: Andreas Schindler, Steven D. Barbo
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: 26.07.2010, 13:39     Titel:
  Antworten mit Zitat      
@ Kai Gehrs

kostrafo.m
 Beschreibung:

Download
 Dateiname:  kostrafo.m
 Dateigröße:  516 Bytes
 Heruntergeladen:  672 mal
BWGL.m
 Beschreibung:

Download
 Dateiname:  BWGL.m
 Dateigröße:  13.36 KB
 Heruntergeladen:  650 mal
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.