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

Königsweg System nichtlinearer DGLs?

 

Martin_HH

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.08.2012, 07:48     Titel: Königsweg System nichtlinearer DGLs?
  Antworten mit Zitat      
Hallo,

Mein Problem ist, dass ich ein System von mehreren sehr komplizierten, nichtlinearen DGL habe. Weil diese Gleichungen dynamisch generiert werden und immer ein klein wenig anders aussehen, würde ich gerne so wenig, wie möglich daran rummanipulieren. D.h. allein das Aufstellen einer Massenmatrix würde mir ziemlich schwer fallen (zumindest wüsste ich keinen einfachen Weg)
Höchstens irgendewelche Tools der sybolic Toolbox, wie solve könnte ich praktisch benutzen.

Ich habe ein bisschen gegoogelt, aber ich habe keinen Weg gefunden, wie man so ein System einfach löst, in dem man Matlab die Gleichungen einfach in expliziter Weise zur Verfügung stellt und sagt "Der Rest ist Dein Problem".
Alle schlagen so gut wie immer eine Reduktion vor (bzw. Reduktion und dann Matrix-Schreibweise)
Aber da mache ich mir einfach Sorgen, dass ich die Gleichungen so nicht "handeln" kann.

Kennt ihr zufällig einen einfacheren Weg? (Simulink wäre auch kein Problem, macht es aber wohl nicht einfacher)

Tut mir Leid, wenn das faul klingt, aber ich habe schon ein wenig gesucht, und habe nur Angst, etwas zu übersehen, bevor ich mir Gedanken machen, wie ich es eventuell doch schaffen könnte, das auf dem komplizierten Wege zu lösen.


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 11.08.2012, 09:29     Titel:
  Antworten mit Zitat      
Hallo,

wenn das System sehr kompliziert ist, wirst dir die Symbolic Math Toolbox nicht helfen. Dann wirst du das System numerisch, d.h. z.B. mit ode45, lösen müssen.

Die einzige Vorarbeit ist dort, dass dein System in ein System von DGLen 1. Ordnung umgewandelt werden muss. Dann musst du das System der DGLen nur noch als Funktion zur Verfügung stellen, siehe
Code:


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 11.08.2012, 12:30     Titel: Re: Königsweg System nichtlinearer DGLs?
  Antworten mit Zitat      
Martin_HH hat Folgendes geschrieben:

Weil diese Gleichungen dynamisch generiert werden und immer ein klein wenig anders aussehen, würde ich gerne so wenig, wie möglich daran rummanipulieren.


Hallo,

was bedeutet das? Du betrachtest immer ein anderes physikalisches System, oder meinst du Parameter der Gleichungen?

Grüße, Marc
Private Nachricht senden Benutzer-Profile anzeigen
 
Martin_HH

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.08.2012, 21:46     Titel:
  Antworten mit Zitat      
Danke für Eure Antworten.

Mit dem Hinweis mit der Symbolic Toolbox meinte ich nur, dass ich mit deren Hilfe irgendwelche Manipulation an der Gleichung durchführen könnte um sie in die Richtige Form zu bringen.

Okay, ich scheine also zumindest um eine Reduktion der Gleichungen nicht herum zu kommen.

Ich mach das mal eben kurz an einem Beispiel mit der DGL eines klassischen Fadenpendels vor und Du sagst mir, ob das richtig ist, okay? Wink

Ausgangs-DGL zweiten Grades, nichtlinear, implizit:

\ddot{x}+\frac{g}{l}*sin(x) = 0

Jetzt führe ich die Variablen y1 und y2 ein, wobei y1 = x (x ist der Auslenkungswinkel) und x2=\dot{x1}

und erhalte damit das Gleichungssystem (in impliziter Form):

\dot{y1}-y2=0
\dot{y2}+\frac{g}{l}*sin(y1) = 0

Und Matlab löst mir das nach y1 und y2 auf. Wobei ersteres mein Winkel ist und zweiteres meine Winkelgeschwindigkeit, seh ich das so richtig?

MaFam hat Folgendes geschrieben:

"[...] Gleichungen dynamisch generiert werden[...]"
was bedeutet das? Du betrachtest immer ein anderes physikalisches System, oder meinst du Parameter der Gleichungen?


Ich möchte eine Kette modellieren. Das mache ich mit Pendeln, die ich aneinander hänge. Da ich herausfinden möchte, wie viele Pendel sich da am Besten eigne, probiere mit den verschiedenen Pendelanzahlen rum und habe deswegen ein Skript geschrieben, dass mir die Bewegunsgleichungen in Abhängikeit der Pendelanzahl generiert.
 
flashpixx
Forum-Guru

Forum-Guru


Beiträge: 355
Anmeldedatum: 19.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.08.2012, 22:26     Titel:
  Antworten mit Zitat      
Martin_HH hat Folgendes geschrieben:

Ich möchte eine Kette modellieren. Das mache ich mit Pendeln, die ich aneinander hänge. Da ich herausfinden möchte, wie viele Pendel sich da am Besten eigne, probiere mit den verschiedenen Pendelanzahlen rum und habe deswegen ein Skript geschrieben, dass mir die Bewegunsgleichungen in Abhängikeit der Pendelanzahl generiert.


Ich stelle einmal die ketzerische Frage: Ist eine DGL überhaupt ein sinnvoller Lösungsansatz?
Ich würde ja vielleicht über so etwas http://en.wikipedia.org/wiki/Skeletal_animation oder http://en.wikipedia.org/wiki/Inverse_kinematics einmal nachdenken.

Rein technisch wirst Du so keine Lösung finden, denn Du bestimmst für ein feste Anzahl an Elementen die DGL. DU kannst aber rein formal (denn die Anzahl ist abzählbar unendlich) unendliche viele DGLs haben. Da der Lösungsraum, in dem Du ja die "optimale Anzahl" bestimmen willst unbeschränkt ist, wirst Du so keine Lösung bestimmen können.
Du brauchst letztendlich entweder eine Beschränkung der möglichen Lösungen, wobei dann das Problem ein kombinatorisches ist, was ebenfalls schwierig sein kann zu lösen oder Du musst einen völlig anderen Ansatz für das Problem wählen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Martin_HH

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.08.2012, 23:26     Titel:
  Antworten mit Zitat      
Danke, dass Du Dir solche Gedanken machst.

Gerade inverse Kinematik ist sicher auch kein ganz schlechter Ansatz, aber mit "normalen" Bewegungs-DGLn für die jeweiligen Massen müsste es auch gehen.

Mit "optimale Anzahl" meine ich lediglich, dass ich das dynamische Verhalten bei Systemen mit verschiedenen Anzahlen anschaue und gucke, wie gut man damit welche Effekte abbilen kann. "Okay, das Verhalten eines Systems mit 40 Massen unterscheidet sich nur geringfügig von dem mit 30, daher reichen auch 30 Massen um Rechenzeit zu sparen" ...Das müsste doch eigentlich gehen, oder?

Das Problem ist aber, dass das leider klappen muss, selbst wenn es eventuell bessere Lösungen gibt, da es um eine Studienarbeit geht und ich keine Zeit mehr hätte, mich komplett in ein anderes Konzept einzuarbeiten Wink
 
flashpixx
Forum-Guru

Forum-Guru


Beiträge: 355
Anmeldedatum: 19.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.08.2012, 00:15     Titel:
  Antworten mit Zitat      
Martin_HH hat Folgendes geschrieben:

Mit "optimale Anzahl" meine ich lediglich, dass ich das dynamische Verhalten bei Systemen mit verschiedenen Anzahlen anschaue und gucke, wie gut man damit welche Effekte abbilen kann. "Okay, das Verhalten eines Systems mit 40 Massen unterscheidet sich nur geringfügig von dem mit 30, daher reichen auch 30 Massen um Rechenzeit zu sparen" ...Das müsste doch eigentlich gehen, oder?


Was ist mit 500, 10.000, 10^1000 ? Verhält sich das System bei 30 noch genauso, wie wenn Du 100 nimmst ? Was ist, wenn bei den 30 Systemen eine minimale Abweichung auftritt und das System stabil bleibt, bei 100 Systemen aber die gleiche Abweichung evtl zu einem großen Fehler führen kann, d.h. wie verhält sich ggf der Fehler bei Veränderung der Systeme allgemein ?

Martin_HH hat Folgendes geschrieben:

Das Problem ist aber, dass das leider klappen muss, selbst wenn es eventuell bessere Lösungen gibt, da es um eine Studienarbeit geht und ich keine Zeit mehr hätte, mich komplett in ein anderes Konzept einzuarbeiten Wink


Ah ha, nur weil man die Arbeit um Biegen und Brechen zu einem Termin fertig bekommen muss, nagelt man sich auf ein bestehendes System fest !?
Gerade weil es sich um eine Studienarbeit handelt, sollte man sich aber zu Beginn der Arbeit die Zeit nehmen verschiedene Lösungsansätze zu überlegen,
davon dann einen aufgrund der fachlichen Punkte real umzusetzen und zum Abschluss das Ergebnis der umgesetzten Lösung zu diskutieren bzw. zu bewerten.
Es geht nicht (!) um die Realisierung, sondern um die Bewertung. Wenn man innerhalb der Diskussion der Bewertung zu dem Schluss kommt, dass die
umgesetzte Lösung schlecht ist, würde man eben in der Realität eine andere Lösung wählen.
Im Sinne der realen Arbeitsmethodik würde man somit den Schluss erhalten, dass man eben mehr Zeit in die Planung und fachliche Auswahl des Projektes
stecken muss.

Damit ich die Brücke zu meinem Ansatzes schlagen kann wäre es einen Gedanken wert, einen anderen Lösungsansatz zu favorisieren
Private Nachricht senden Benutzer-Profile anzeigen
 
Martin_HH

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.08.2012, 08:10     Titel:
  Antworten mit Zitat      
So richtig intensiv habe ich mir noch keine Gedanken um die Frage gemacht, ob das Verhalten vielleicht bei einer gewissen Anzahl von Pendeln "konvergiert", aber bei einer noch höheren Anzahl, wieder ein anderes Verhalten zeigt. Der Punkt ist allerdings, dass man sich mit der Simulation lediglich vor 2-3 Effekten schützen möchte, deren Erscheinungsbild man prinzipiell kennt und ich dann zeigen kann, dass man diese Effekte mit dem Modell abbilden.
Ich würde diesen Punkt allerdings in der Studienarbeit erwähnen bzw. mich mal auf dem Gebiet der Dynamik schlau machen, welche Wege zur Stabilitätsaussage es gibt und inwiefern, man die bei mir anwenden kann.
Ich habe bisher auch in vielen anderen wissenschaftlichen Arbeiten zu dem Thema kein Wort darüber gefunden, aber ich sehe schon, dass man darüber mal ein Wort verlieren sollte, warum ein weiteres Abweichen des Verhalten als nicht wahrscheinlich angenommen wird.



Du beschreibst in Deinem Absatz natürlich das akademische Ideal, welches ich auch durchaus für erstrebenswert erachte. Ich hätte mich durchaus noch wesentlich länger mit dem Vergleich verschiedener Ansätze und Herangehensweisen auseinander gesetzt, mich in diesem Zusammenhang wesentlich tiefer in die numerische Mathematik und die Theorie von Schwingungsproblemen eingearbeitet.
Dazu ist/war aber leider nie die Zeit. Die Aufgabenstellung war auch ohne diese Betrachtungen eng genug gestellt , mein Betreuer hat leider selber nur unwesentlich mehr Ahnung von dem Thema und benötigt lediglich ein Modell der Kette für ein größeres Gesamtsystem. Das einzige, was ich machen kann, ist mir das eine Lehre für die Diplomarbeit sein zu lassen.

Was ich jetzt versuche ist, den gewählten Ansatz zumindest nicht auf Biegen und Brechen durchzukriegen, sondern so, dass er in seiner Ausführung wissenschaftlicher Professionalität entspricht, die Numerik stabil ist und sauber umgesetzt ist.
 
flashpixx
Forum-Guru

Forum-Guru


Beiträge: 355
Anmeldedatum: 19.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.08.2012, 10:27     Titel:
  Antworten mit Zitat      
Damit Du hier vielleicht einer Lösung kommst:

DGLs sind, sofern sie nicht-linear sind, wirklich nicht einfach zu bearbeiten.

Wäre es vielleicht ein Ansatz ein Bonesystem mit einer DGL zu kombinieren?
Im Grunde bezieht sich ja die DGL auf das Schwingungsverhalten der einzelnen Systeme. Ein Bonesystem, wie man es aus der Computergraphik kennt, ist dafür gedacht, dass man Teile, die miteinander verbunden sind, richtig bewegen kann.

Im Sinn Deiner Kette: Jedes Kettenglied ist ja statisch, ich nehme mal nicht an, dass Du plastische Verformung der einzelnen Glieder berücksichtigst. Wenn ich nun zwei einzelne Glieder aneinander hänge, dann können die Glieder sich ja schon mal nicht komplett frei bewegen. Mein Ansatz wäre nun die Idee, dass man die einzelnen Bones des Systems als Glieder ansieht und nur die Übergänge per DGL modelliert. Das Bonesystem ist natürlich eine starke Vereinfachung, aber evtl bekommst Du dadurch die Nicht-Linearität heraus. Evtl kann man das auch rekursiv abbilden z.B. dass man immer 10 Glieder per DGL simuliert und diese dann in einem nächsten Schritt als Bone sieht (Stab), wobei man dann die Übergänge der Bones dann wiederum per DGL beschreibt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Martin_HH

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.08.2012, 13:44     Titel:
  Antworten mit Zitat      
Hm, das ist soweit fast schon etwas zu weit gedacht, denke ich. Ich dachte, ich versuche das System aus nichtlinearen DGL zunächst mal ganz gewöhnlich mit Matlab zu lösen, indem ich da einfach einen seiner Solver nehme.
Falls das irgendwie überhaupt nicht klappt, müsste ich mir ja eigentlich erst Gedanken machen, inwieweit ich das Problem anders angehen könnte.

Die Frage ist jetzt nur, inwieweit es möglich ist, diese DGLs Matlab implizit zu übergeben, also dass die Gleichungen einer Form a la f(xpunkt, x, t) = 0 dastehen. Da die Gleichungen nämlich einerseits sehr lang sind und mir deren Struktur andererseits von vornherein nicht bekannt ist, kann daran nämlich kaum Manipulationen vornehmen.
 
flashpixx
Forum-Guru

Forum-Guru


Beiträge: 355
Anmeldedatum: 19.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.08.2012, 15:24     Titel:
  Antworten mit Zitat      
Die Struktur muss bekannt sein, sonst wirst Du die DGL nicht numerisch lösen können !?

Du hast eine DGL, die mit Matlab numerisch gelöst werden soll, d.h. ich erzeuge für den Solver eine entsprechende Darstellung der DGL und übergebe diese dem Solver mit den passenden Parametern. Wenn man nun mehrere verschiedene DGL hast, dann kann ich diese natürlich auch dynamisch mit Hilfe von anonymen Funktionen halten und eben diese parametrisieren. Der Solver löst letztendlich ein Gleichungssystem iterativ, d.h. ich muss die DGL eben als Gleichung in Matlab angeben, was man eben durch Funktionen macht und Funktionen kann ich natürlich parametrisieren. Für den DGL Solver ist es eben nur Voraussetzung, dass keine freien Variablen existieren und die DGL als DGL der Ordnung 1 vorhanden ist. Freie Variablen sind Parameter, die man belegen kann und die DGL kann ich passend umformulieren. Die Umformulierung muss man aber nur einmal machen. Explizite und implizite Darstellung lassen sich einfach überführen: explizite Form = Darstellung der DGL nach der höchsten Ableitung.
Das ist lediglich eine algebraische Umformulierung der Gleichung und mit ein wenig Matlabcode ist diese Umformulierung mit Hilfe der anonymen Funktionen trivial, da Dir ja die DGL bekannt ist, und die Umformulierung eindeutig ist, lässt sich das einfach machen.

siehe dazu http://www.mathworks.de/support/tech-notes/1500/1510.html#MLeqnts und speziell für implizite bzw. explizite Angabe der DGL ist dort ein Beispiel.

Wo ist nun jetzt das Problem !?
Private Nachricht senden Benutzer-Profile anzeigen
 
Martin_HH

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.08.2012, 09:24     Titel:
  Antworten mit Zitat      
Was ich bisher wusste ist, dass ich dem solver eine Funktion übergeben musste, in der die DGLs stehen. Mein Problem war jetzt, dass ich ja zum Zeitpunkt, in dem ich die Funktion dafür schreibe, noch nicht weiß, wie die DGLs aussehen, die werden ja praktisch erst zur Laufzeit generiert und diese Generierung ist zu zeitaufwendig, als dass ich in der Function in der die DGLs stehen die DGLs als Rückgabewert der Generierungsfunktion schreiben könnte, da ja die Function bei jedem Zeitschritt aufgerufen wird.
Jetzt sagst Du aber, das ließe sich mit anonymen Funktionen machen, da muss ich mich erstmal kurz einlesen. Ich gebe dann Rückmeldung, ob ich das Problem damit lösen konnte.

Mit "Struktur unbekannt" meinte ich lediglich, dass ich in der DGL nicht viel rummanipulieren könnte. Es wäre z.b. schwer, irgendwie eine Massenmatrix aufzustellen, oder sowas (Wäre prinzipiell möglich, aber dafür müsste ich wohl ein aufwendiges Skript schreiben, dass mit die Gleichung als String betrachtet und darin herumsucht). Auflösen nach der höchsten Ableitung sollte eigentlich möglich sein mit solve(Gleichung, höchsteAbleitung).
 
flashpixx
Forum-Guru

Forum-Guru


Beiträge: 355
Anmeldedatum: 19.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.08.2012, 10:36     Titel:
  Antworten mit Zitat      
siehe http://www.mathworks.de/help/techdoc/ref/function_handle.html

Code:

foo = @(x,y) x*y;
ode45(@foo,tspan,y0), rather than ode45('xdot',tspan,y0)
 


Martin_HH hat Folgendes geschrieben:
Was ich bisher wusste ist, dass ich dem solver eine Funktion übergeben musste, in der die DGLs stehen.


Was übergibst Du dem Solver sonst !?

Martin_HH hat Folgendes geschrieben:

Mit "Struktur unbekannt" meinte ich lediglich, dass ich in der DGL nicht viel rummanipulieren könnte.


Wieso, eine DGL ist auch "nur" eine Funktion und der kann ich Parameter übergeben

Martin_HH hat Folgendes geschrieben:

Es wäre z.b. schwer, irgendwie eine Massenmatrix aufzustellen, oder sowas (Wäre prinzipiell möglich, aber dafür müsste ich wohl ein aufwendiges Skript schreiben, dass mit die Gleichung als String betrachtet und darin herumsucht).


Wo ist da der Sinn!?

Code:

f = @(M,x,y) = M.*x + y

f( [1 2; 3 4], 5, 7)
 


Matrix und zwei Skalare als Parameter und so kann man die DGL angeben. Die Parameter müssen dann nur vorab einmal berechnet werden.

Martin_HH hat Folgendes geschrieben:
Auflösen nach der höchsten Ableitung sollte eigentlich möglich sein mit solve(Gleichung, höchsteAbleitung).

Nein, solve wird Dir nichts bringen, denn das ist eine rein algebraische Umformung. Solve führt keine Umformung durch, sondern es berechnet eine Lösung. Bei der expliziten Darstellung steht auf der einen Seite eben nicht = 0, sondern = f^{n}, d.h. die Gleichung wird nach der höchsten Ableitung umgestellt. Die ode-Solver sind eben die Löser für eine DGL, d.h. ein http://www.mathworks.de/help/toolbox/symbolic/solve.html hilft nicht weiter

Du musst die DGLs eben so wie sie gebraucht werden einmal in der expliziten und einmal in der impliziten Darstellung parametrisieren.
Private Nachricht senden Benutzer-Profile anzeigen
 
Martin_HH

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.08.2012, 13:04     Titel:
  Antworten mit Zitat      
Ich muss mal eben ein bisschen rumprobieren und rumlesen, bevor ich auf die ersten Absätze eingehen kann bzw. Rückfragen stellen kann.


Aber zum letzten Absatz: Ich denke, solve könnte mir an dieser Stelle helfen, da die Höchste Ableitung in rein mechanischen Systemen immer in erster Potenz steht, müsste solve darauf hinauslaufen, dass danach umgestellt wird.
Zum Beispiel:

Code:
solve(ddphi*g+l*dphi^2+phi, ddphi)
ans =
 
-(l*dphi^2 + phi)/g
 
 
flashpixx
Forum-Guru

Forum-Guru


Beiträge: 355
Anmeldedatum: 19.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.08.2012, 13:59     Titel:
  Antworten mit Zitat      
Warum willst Du mit solve lösen, ich meine die Umstellung explizit und implizit ist immer identisch, d.h. ich kann beide Darstellung einmalig hinterlegen und muss dann nur die Parameter passend setzen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.