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

sybolic toolbox: Ableitung (cos(x(t))*l) nach x

 

jackomo
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 25.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.04.2013, 08:16     Titel: sybolic toolbox: Ableitung (cos(x(t))*l) nach x
  Antworten mit Zitat      
Der Titel verrät schon ziemlich alles:

Ich habe Pobiert:
Code:

D(cos(x(t))*l)(x)
Output:
D(cos(x(t)))(x)*l(x) + cos(x(t))(x)*D(l)(x)
//Problem: l nicht als Konstante erkannt, cos(x(t)) nicht richtig abgeleitet

D(cos(x(t))*l)(x(t))
Output:
D(cos(x(t)))(x(t))*l(x(t)) + cos(x(t))(x(t))*D(l)(x(t))
//Problem: s. oben nur mit (t) angehängt

//Obwohl diff ja eigentlich hier fehl am Platz da es sich um eine Funktion handelt
diff(cos(x(t))*l, x)
Output: 0 (verständlich, diff erkennt nicht dass x(t) eine funktion ist)

diff(cos(x(t))*l, x(t))
Output: Error: The variable is invalid. [stdlib::diff]
//das (t) hinten macht Schwierigkeiten


//selbst wenn ich alle Zeitabhängigkeiten aus dem Spiel lasse gibt es noch Problem
D(cos(x)*l)(x)
Output:
D(cos(x))(x)*l(x) + cos(x)(x)*D(l)(x)
 


Wie macht man es richtig Smile?

Liebe Grüße
Jack
Private Nachricht senden Benutzer-Profile anzeigen


MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 02.04.2013, 09:11     Titel:
  Antworten mit Zitat      
Guten Morgen Jack,

mich würde ja mal grundsätzlich interessieren, wie du auf dieses Problem kommst. Welche Fragestellung steckt dahinter, dass du diese Funktion, welche übrigens abhängig von t ist, nach x ableiten willst?

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

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 25.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.04.2013, 10:26     Titel:
  Antworten mit Zitat      
Guten Morgen Marc,

es geht darum Bewegungsdifferentialgleichungen mit dem Lagrange 2. Art- Formalismus zu erstellen.
Eigentlich habe ich statt x auch `ϕ`[i] (Drehwinkel der generalisierten Koordinate, i=1..n) dort stehen, aber das macht das ganze nur unübersichtlicher und ist nicht Teil des Problems.

Zu deiner Frage: Beim aufstellen der Jacobi-Matrizen und der Lagrange-Gleichung muss nach `ϕ`[i] ableiten (mit i= 1..n).
Für Jacobimatrizen muss ich Ortsvektoren ableiten, die enthalten in meinem Fall sin bzw. cos(phi),
Lagrangegleichung enthält aus Kinetischer-Energie auch phi und Ableitungen von phi.

Liebe Grüße
Jack
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 02.04.2013, 14:55     Titel:
  Antworten mit Zitat      
Hallo,

ich habe das jetzt mal recherchiert. Um eine Funktion (ich denke, es handelt sich hier eher um ein Funktional) nach einer Funktion ableiten zu können, muss man einiges an zusätzlicher Theorie schaffen. Physiker neigen ja dazu, Dinge zu benutzen, weil es "offenbar" funktioniert. Aber lassen wird das. Konkret bringt dich das nicht weiter. Ich habe herausgefunden, dass unter Maple zusätzliche Pakete geladen werden müssen, um eine derartige Ableitung berechnen zu können. Das Paket heißt wenig erstaunlich "physics". Jetzt liegt es an dir zu recherchieren, ob es für Matlab ein "Pendant" gibt.

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

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 25.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.04.2013, 15:04     Titel:
  Antworten mit Zitat      
Danke dir schonmal so weit. Mich wundert, dass noch nicht schon mehr Leute ähnliche Probleme hatten.

http://www.mathworks.de/de/help/symbolic/mupad_ref/d.html#repcom
Ganz unten bei Example 10, glaubst du, dass könnte mir weiter helfen? Ich verstehe ehrlich gesagt nicht genau den Nutzen, vielleicht sagt es dir was?

Liebe Grüße
Jack
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.04.2013, 15:16     Titel:
  Antworten mit Zitat      
Hallo,

es gab hier schon mal einen ähnlichen Thread. Du kannst da mal danach suchen.

Ich halte es in der Mathematik auch für unüblich, Funktionen nach Funktionen abzuleiten.

Was du in MuPAD verwenden kannst:
Code:
diff(cos(x[t])*l,x[t])

oder natürlich auch das [t] weglassen. Das ist doch das erwartete Ergebnis, oder?

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: 02.04.2013, 15:17     Titel:
  Antworten mit Zitat      
Ohne nähere Begründung. Ich hatte gerade den Gedanken, dass du Mathworks direkt anschreiben solltest wegen dieses Problems. Zumal Maple diese Funktionalität ja bietet... Was meinst du?
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 02.04.2013, 15:21     Titel:
  Antworten mit Zitat      
Hallo Harald,

den Thread hatte ich auch noch im Hinterkopf. Irgendwie ist das aber im Vergleich mit der Maple-Lösung "halbgar". Ich weiß es nicht...

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

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.04.2013, 16:11     Titel:
  Antworten mit Zitat      
Hallo,

es kann sicher nicht schaden, sich mal an den Technischen Support von MathWorks zu wenden, um zu sehen, ob es eine bessere Lösung gibt.

Und wenn einem Funktionalitäten abgehen, natürlich auch MathWorks kontaktieren. Woher sollen die denn sonst wissen, dass jemand die Funktionalität abgeht?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
jackomo
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 25.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.04.2013, 19:15     Titel:
  Antworten mit Zitat      
Weißt du zufällig noch ein paar Schlagworte aus dem Thread? Mit MuPad Ableitung funktion diff findet man immer alles und nichts (deshalb habe ich ja auch einen neuen probiert).

Ok, jetzt muss ich wohl noch ein bisschen plaudern was ich schon alles ausgedacht habe:

Das mit der Idee das (t) einfach weg zu lassen hatte ich auch schon (habe es damals einfach in strings umgewandelt und (t) weggelöscht, es später dann wieder eingefügt.
Ok, ist nicht schön aber quick-and-dirty.
Funktionierte auch ganz gut bei den Jacobi-Matritzen.
Allerdings nicht bei der Ableitung der Kinetischen Energie nach den generalisierten Koordinaten. In der Kinetischen Energie steckt noch phi_punkt, also die erste Abeitung nach der Zeit. Wenn wenn am Schluss noch eine Ableitung von phi stehen bleibt also (mit weggelöschtem (t) ):

Code:
diff( .....diff(`ϕ`[1], t)..... ,`ϕ`[1])


das innere diff(..) wird dann allerdings zu null, da ja wahrheitsgemäß es momentan keine Funktion mehr von t ist, und das macht blöderweise die ganze restliche Rechnung kaputt.

Bei MathWorks werde ich auf jeden Fall nachfragen!

Könnte mir funcenv() helfen? Bzw. wie kann man denn Konstanten definieren die automatisch nicht mit abgeleitet werden? Weil wenn man die Funktion D()() verwendet wird immer einfach alles abgeleitet, ohne Rücksicht auf Verluste.

Danke euch für eure Mitarbeit und Bemühung!
Liebe Grüße
Jack
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.04.2013, 20:39     Titel:
  Antworten mit Zitat      
Hallo,

bitte ein konkretes Beispiel, damit man das nachvollziehen kann. Die Darstellung `ϕ`[1] ist auch etwas verwirrend.

Den anderen Beitrag habe ich übrigens gefunden. Leider sind wir dort auch zu keinem Ergebnis gekommen:
http://www.gomatlab.de/partielle-ableitung-t27458.html

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
jackomo
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 25.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.04.2013, 22:59     Titel:
  Antworten mit Zitat      
Ok, hier eine kurze Beschreibung.
Im Prinzip ist es Multipendel (http://de.wikipedia.org/wiki/Multipendel), aber
-Masse ist verteilt über die Körper/Stäbe --> Massenträgheitsmomente
-Zwischen 2 Pendeln sind eine Drehfeder,( ein Drehdämpfer, aber ersteinmal weggelassen,s. unten )angebracht, und man kann jeweils ein Moment aufbringen
-die generalisierten Koordinaten sind die Verdrehung relativ zwischen den Stäben (anders als auf Wikipedia).
-das System soll am Ende auf n Elemente erweiterbar sein.

für n = 3 lautet die Lagrange-Gleichung so (bereits mit simplify() von MuPad vereinfacht):
L = T - V = kin. Energie - pot. Energie(=Feder + Schwerkraft)
Code:
L := (I_z_z[1]*diff(`ϕ`[1](t), t)^2)/2 + (I_z_z[2]*diff(`ϕ`[2](t), t)^2)/2 + (I_z_z[3]*diff(`ϕ`[3](t), t)^2)/2 + (m[3]*(cos(`ϕ`[1](t) + `ϕ`[2](t))*l[2]*(D(`ϕ`[1])(t) + D(`ϕ`[2])(t)) + D(`ϕ`[1])(t)*cos(`ϕ`[1](t))*l[1] + cos(`ϕ`[1](t) + `ϕ`[2](t) + `ϕ`[3](t))*n[3]*(D(`ϕ`[1])(t) + D(`ϕ`[2])(t) + D(`ϕ`[3])(t)))^2)/2 + (m[2]*(cos(`ϕ`[1](t) + `ϕ`[2](t))*n[2]*(D(`ϕ`[1])(t) + D(`ϕ`[2])(t)) + D(`ϕ`[1])(t)*cos(`ϕ`[1](t))*l[1])^2)/2 - (`ϕ`[1](t)^2*k[1])/2 - (`ϕ`[2](t)^2*k[2])/2 - (`ϕ`[3](t)^2*k[3])/2 + ((sin(`ϕ`[1](t) + `ϕ`[2](t))*n[2]*(D(`ϕ`[1])(t) + D(`ϕ`[2])(t)) + D(`ϕ`[1])(t)*sin(`ϕ`[1](t))*l[1])^2*m[2])/2 + (m[3]*(sin(`ϕ`[1](t) + `ϕ`[2](t) + `ϕ`[3](t))*n[3]*(D(`ϕ`[1])(t) + D(`ϕ`[2])(t) + D(`ϕ`[3])(t)) + sin(`ϕ`[1](t) + `ϕ`[2](t))*l[2]*(D(`ϕ`[1])(t) + D(`ϕ`[2])(t)) + D(`ϕ`[1])(t)*sin(`ϕ`[1](t))*l[1])^2)/2 + g*m_2*((cos(`ϕ`[1](t) + `ϕ`[2](t)) - 1)*n[2] + (cos(`ϕ`[1](t)) - 1)*l[1]) + g*m_3*((cos(`ϕ`[1](t) + `ϕ`[2](t) + `ϕ`[3](t)) - 1)*n[3] + (cos(`ϕ`[1](t) + `ϕ`[2](t)) - 1)*l[2] + (cos(`ϕ`[1](t)) - 1)*l[1]) + (D(`ϕ`[1])(t)^2*cos(`ϕ`[1](t))^2*m[1]*n[1]^2)/2 + g*m_1*(cos(`ϕ`[1](t)) - 1)*n[1] + (D(`ϕ`[1])(t)^2*sin(`ϕ`[1](t))^2*m[1]*n[1]^2)/2


Generalisierte Koordinate sind für n = 3:
Code:
q := matrix([[`ϕ`[1](t)], [`ϕ`[2](t)], [`ϕ`[3](t)]])


Und jetzt die Lagrange-Gleichung:
d/dt (dL/dq') - dL/dq = 0
Hier kommt es eben zu den Problemen beim Ableiten.

(Anmerkung: Es gibt noch von außen wirkende Kräfte und Momente am Ende des Multipendels, aber die spiegeln sich ja, ebenso wie die Dämpfer, nur in den nicht-konservativen Kräften wieder, aber das würde hier jetzt zu weit führen, und ein bisschen Arbeit muss ich ja auch selbst machen Smile ).

Ich werde leider erst in 2 Wochen wieder an der Lösung weiter arbeiten können, aber da ich es lösen muss wird es von meiner Seite nicht einschlafen! Ich freue mich aber trotzdem über jeden Beitrag oder Vorschlag und werde bestimmt zwischendurch kurz rein lesen.
Für interessierte habe ich im Anhang eine Textdatei mit der Originalform von Kinetischer- und Potentieller-Energie sowie einer kleiner Erläuterung zur Zeichererklärung angehängt, das würde hier den Platz sprengen.

Liebe Grüße
Jack

V_T_Multipendel.txt
 Beschreibung:

Download
 Dateiname:  V_T_Multipendel.txt
 Dateigröße:  2.93 KB
 Heruntergeladen:  635 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas84
Forum-Meister

Forum-Meister


Beiträge: 546
Anmeldedatum: 10.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.04.2013, 06:30     Titel:
  Antworten mit Zitat      
Hast du schon mal daran gedacht Simscape: http://blogs.mathworks.com/seth/200.....tems-the-double-pendulum/ oder ähnliche Software zu verwenden? Sieht mir nach einem passenden Anwendungsfall aus.

viele Grüße
Thomas
Private Nachricht senden Benutzer-Profile anzeigen
 
jackomo
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 25.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.04.2013, 17:14     Titel:
  Antworten mit Zitat      
Hier nach längerer Pause nun die Antwort. Kleine Anmerkung, das Thema wurde gelöst Smile

Hier noch einmal eine kurze Zusammenfassung der Übersicht halber:

gegeben
Code:

f := diff(x(t),t)*x(t)*const



Code:
diff( f, x(t) )
output: Error: The variable is invalid. [stdlib::diff]

(t) macht Probleme


x(t) ist das Problem. Erste Idee (t) zu umschreiben als _a (als
Index) ist gescheitert (mit stringlib::subs(), expr2text(), text2expr() )
da nun diff(x_a , t) = 0 --> ganzer Ausdruck zu null...

Lösung:
Code:
subs(diff(subs(f,[diff(x(t),t)=z1, x(t)=z0]),z0), [z1=diff(x(t),t),
z0=x(t)])

output:
const*diff(x(t), t)
 

wunderbar Smile

In Worten: Man muss x(t) und die Zeitableitungen durch Variable ersetzen (Achtung, Reihenfolge hier wichtig!), dann nach der entsprechenden Variable ableiten (geht also auch einfach nach einer der Zeitableitungen z.B. z1) und am Ende wieder resubstituieren.
Hat man mehr als die erste Zeitableitung einfach die zweite oder dritte (sofern diese noch Sinn macht) als neue Variablen substituieren. Bsp:
[diff(diff(x(t),t),t)=z2, diff(x(t),t)=z1, x(t)=z0]

Vielen Dank an dieser Stelle für den Mathworks-Support.

D( x(t) )(t) verwende ich nicht mehr, da es nur ein Operator und keine Funktion ist.

Zum anderen: SimMechanics ist ein tolles Tool(box)! Kannte ich zuvor nicht aber werde ich auf jeden Fall verwenden!

Liebe Grüße und danke allen für die Mitarbeit!
Jack
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.