matlab partiell ableiten
Moderator: (M) Mod.-Team Allgemein
matlab partiell ableiten
Hallo zusammen, ich möchte in Matlab partiell nach einer zeitabhängigen Variablen ableiten ( wenn man so will nach einer funktion ableiten).
Geht sowas mit Matlab ?
am einfachsten sieht man es wahrschienlich am Code:
syms t a(t)
>> L=cos(a)
L(t) =
cos(a(t))
>> diff(L,a)
Error using mupadmex
Error in MuPAD command: Invalid variable. [stdlib::diff]
Error in sym/diff (line 44)
R = mupadmex('symobj::diff', S.s, x.s, int2str(n))
Als Ergebnis will ich " -sin(a(t)) " haben, doch es scheint nicht zu funktioniern.
Ich benötige diese Ableitung für den lagrange-Formalismus( dürfte evtl. den Maschbauern bekannt sein )
Vielen Dank !
Geht sowas mit Matlab ?
am einfachsten sieht man es wahrschienlich am Code:
syms t a(t)
>> L=cos(a)
L(t) =
cos(a(t))
>> diff(L,a)
Error using mupadmex
Error in MuPAD command: Invalid variable. [stdlib::diff]
Error in sym/diff (line 44)
R = mupadmex('symobj::diff', S.s, x.s, int2str(n))
Als Ergebnis will ich " -sin(a(t)) " haben, doch es scheint nicht zu funktioniern.
Ich benötige diese Ableitung für den lagrange-Formalismus( dürfte evtl. den Maschbauern bekannt sein )
Vielen Dank !
-
- TalkING. Fan
- Beiträge: 51
- Registriert: Sa, 09. Jul. 11, 14:44
So richtig klappt das glaube ich nicht, da Matlab zwischen "sym" und "symfun" als Klassen für die Variablen unterscheidet. Der "diff" Befehl braucht nen "sym" zum ableiten. Daher die Fehlermeldung.
Was funktioniert ist entweder die totale Ableitung zu bekommen, die in deinem Fall ja auch nicht [tex]-\sin(a(t))[/tex] sondern [tex]-\dot{a}(t)\,\sin(a(t))[/tex] lautet:
oder aber a als Variable zu verwenden, womit du die partielle ableitung bekommst.
Ein Workaround (sehr praktisch für Newton-Euler Formalismus in TSL)
ist die Verwendung des "sub" Befehls. Für obiges Beispiel wäre das dann
Was funktioniert ist entweder die totale Ableitung zu bekommen, die in deinem Fall ja auch nicht [tex]-\sin(a(t))[/tex] sondern [tex]-\dot{a}(t)\,\sin(a(t))[/tex] lautet:
Code: Alles auswählen
>> syms t a(t)
>> L = cos(a)
L(t) =
cos(a(t))
>> diff(L)
ans(t) =
-D(a)(t)*sin(a(t))
Code: Alles auswählen
>> syms b
>> L = cos(b)
L =
cos(b)
>> diff(L)
ans =
-sin(b)
ist die Verwendung des "sub" Befehls. Für obiges Beispiel wäre das dann
Code: Alles auswählen
>> syms t a(t) b
>> L = cos(a)
L(t) =
cos(a(t))
>> diff(subs(L,a,b),b)
ans(t) =
-sin(b)
>> subs(ans,b,a)
ans(t) =
-sin(a(t))
-
- TalkING. Fan
- Beiträge: 51
- Registriert: Sa, 09. Jul. 11, 14:44
Nochmal danke, das mit dem Substituieren klappt bisher !
So habe ich folgende Frage, hier der Code dazu:
[ syms t a(t) b
>> L=cos(a)*diff(a,t);
>> L=subs(L,diff(a,t),b)
L(t) =
b*cos(a(t))
>> diff(L,b)
ans =
diff(b*cos(a(t)), b)]
Weiß jemand, warum die Ausgabe nicht einfach "cos(a(t))" lautet ?
Bzw, was ich beachten muss, damit dies geschieht ?
Es wäre halt echt für die Übersicht interessant....
danke ![/code]
So habe ich folgende Frage, hier der Code dazu:
[ syms t a(t) b
>> L=cos(a)*diff(a,t);
>> L=subs(L,diff(a,t),b)
L(t) =
b*cos(a(t))
>> diff(L,b)
ans =
diff(b*cos(a(t)), b)]
Weiß jemand, warum die Ausgabe nicht einfach "cos(a(t))" lautet ?
Bzw, was ich beachten muss, damit dies geschieht ?
Es wäre halt echt für die Übersicht interessant....
danke ![/code]
sorry, kann deinen Fehler nicht reproduzieren. Bei mir siehts unter MATLAB 2012a so aus:
eventuell mal das diff(a,t) einfach durch nen diff(a) ersetzen? (Ist ja bei Abhängigkeit von nur einer Variablen dasselbe)
Code: Alles auswählen
>> syms t a(t) b
>> L = cos(a)*diff(a,t)
L(t) =
D(a)(t)*cos(a(t))
>> L = subs(L,diff(a,t),b)
L(t) =
b*cos(a(t))
>> diff(L,b)
ans(t) =
cos(a(t))