matlab partiell ableiten

Fachdiskussionen rund um Themen und Veranstaltungen ohne Zuordnung zu einem bestimmten Semester (Allgemeine organisatorische und verwaltungstechnische Themen, die NICHT in unmittelbarem und direktem Zusammenhang mit einer Veranstaltung zu sehen sind, bitte in "Studienverwaltung allgemein" einsortieren!)

Moderator: (M) Mod.-Team Allgemein

Antworten
dero
TalkING. Newbie
TalkING. Newbie
Beiträge: 15
Registriert: Sa, 26. Feb. 11, 15:06

matlab partiell ableiten

Beitrag von dero » Mi, 06. Feb. 13, 18:11

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 !

innersinner
TalkING. Fan
TalkING. Fan
Beiträge: 51
Registriert: Sa, 09. Jul. 11, 14:44

Beitrag von innersinner » Mi, 06. Feb. 13, 19:45

Nein... Ich denke nicht, dass Matlab das kann, da es primär numerisch arbeitet. Was dir Matlab aber berechnen kann, ist an irgendeiner (oder vielen) Stellen x_0 der lokale Differenzquotient eines Vektors/Funktion

jules
TalkING. Fan
TalkING. Fan
Beiträge: 32
Registriert: Fr, 29. Mai. 09, 23:06

Beitrag von jules » Mi, 06. Feb. 13, 20:26

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:

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))
oder aber a als Variable zu verwenden, womit du die partielle ableitung bekommst.

Code: Alles auswählen

>> syms  b
>> L = cos(b)
 
L =
 
cos(b)
 
>> diff(L)
 
ans =
 
-sin(b)
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

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))

innersinner
TalkING. Fan
TalkING. Fan
Beiträge: 51
Registriert: Sa, 09. Jul. 11, 14:44

Beitrag von innersinner » Do, 07. Feb. 13, 11:34

Teufelswerk Symbolic Math Toolbox - ich bin beeindruckt, naja man lernt nie aus...

dero
TalkING. Newbie
TalkING. Newbie
Beiträge: 15
Registriert: Sa, 26. Feb. 11, 15:06

Beitrag von dero » Do, 07. Feb. 13, 13:14

Danke für die Antworten, Leute !
Ich werde denn mal schauen, inwieweit ich die Sache mit dem Substituieren nutzen kann !

dero
TalkING. Newbie
TalkING. Newbie
Beiträge: 15
Registriert: Sa, 26. Feb. 11, 15:06

Beitrag von dero » Do, 07. Feb. 13, 17:51

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]

jules
TalkING. Fan
TalkING. Fan
Beiträge: 32
Registriert: Fr, 29. Mai. 09, 23:06

Beitrag von jules » Mi, 13. Feb. 13, 19:35

sorry, kann deinen Fehler nicht reproduzieren. Bei mir siehts unter MATLAB 2012a so aus:

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))
eventuell mal das diff(a,t) einfach durch nen diff(a) ersetzen? (Ist ja bei Abhängigkeit von nur einer Variablen dasselbe)

Antworten