P7: Syntax zur Verwendung von numdiff() ?

TCE
Mausschubser
Mausschubser
Beiträge: 48
Registriert: 11. Nov 2009 11:27

Re: P7: Syntax zur Verwendung von numdiff() ?

Beitrag von TCE »

Kann es sein, dass du f noch nicht als functionhandle deklariert hast?

fun = @ f;

und dann kannst du erst numdiff aufrufen: numdiff(fun,w,x,y,z)

cpunkt
Mausschubser
Mausschubser
Beiträge: 56
Registriert: 12. Okt 2009 20:29

Re: P7: Syntax zur Verwendung von numdiff() ?

Beitrag von cpunkt »

ah, super, danke.. :)

TCE
Mausschubser
Mausschubser
Beiträge: 48
Registriert: 11. Nov 2009 11:27

Re: P7: Syntax zur Verwendung von numdiff() ?

Beitrag von TCE »

läuft denn jetzt die doppelte Ableitung durch?

cpunkt
Mausschubser
Mausschubser
Beiträge: 56
Registriert: 12. Okt 2009 20:29

Re: P7: Syntax zur Verwendung von numdiff() ?

Beitrag von cpunkt »

Leider noch nicht...aber das kann ja auch noch andere Gründe haben.
Ich bin relativ sicher, dass es funktionieren müsste.

cpunkt
Mausschubser
Mausschubser
Beiträge: 56
Registriert: 12. Okt 2009 20:29

Re: P7: Syntax zur Verwendung von numdiff() ?

Beitrag von cpunkt »

Ich bekomme ja als Ergebnisse von numdiff() Jacobimatrizen. Die muss ich ja noch mit irgendetwas multiplizieren um auf ein \(\vec{\tau}\) zu kommen, ich dachte da an \(\vec{q}\).
Wenn ich allerdings die Tests von MisterD123 durchlaufen lasse, gibt numdiff() nur Null-Matrizen zurück, es kommt also immer \(\tau_i = 0\).
Die öffentlichen Tests läuft calcLinkEnergies, etc fehlerfrei durch....

Benutzeravatar
MisterD123
Geek
Geek
Beiträge: 811
Registriert: 31. Okt 2006 20:04
Wohnort: Weiterstadt

Re: P7: Syntax zur Verwendung von numdiff() ?

Beitrag von MisterD123 »

theoretisch gibt dir numdiff ne jakobimatrix zurück. Da du aber die funktion in nur einer dimension q_i bzw qdot_i bzw t ableitest, und nur ne eindimensinonale funktion (rückgabe = ein einziger wert der gesamtenergie) hast ist deine "jakobimatrix" der größe 1x1, und damit einfach die fertige ableitung an der stelle. Brauchst eigentlich nix mehr draufmultiplizieren.
TCE hat geschrieben:Muss ich die numdiff-Aufrufe eigentlich in eine for-Schleife packen und immer nur q(i) oder gdot(i) übergeben. oder kann ich auch den gesamten Vektor q oder qdot an numdiff übergeben.
/edit: Nochmal grade nachgedacht, hatte bisschen blödsinn geschrieben - mit for-schleife funktionierts auf jeden fall, bin mir nicht sicher obs auch in einem gesamtaufruf funktioniert

/edit #2: Habs auch ohne for-schleife hinbekommen. Man muss die Jacobi-Matrizen dL/dq jeweils einmal transponieren, damit sie statt 1xN wieder Nx1 sind, wie tau halt sein soll, aber dann passts :)
Zuletzt geändert von MisterD123 am 26. Jan 2011 15:58, insgesamt 1-mal geändert.

TCE
Mausschubser
Mausschubser
Beiträge: 48
Registriert: 11. Nov 2009 11:27

Re: P7: Syntax zur Verwendung von numdiff() ?

Beitrag von TCE »

numdiff hat ein Problem damit, wenn man ihr eine functionhandle übergibt die einen Vektor produziert und keinen einzelnen Wert.
Die Ableitung dK/dqdot allerdings gibt mir ja einen Vektor mit der Größe der Anzahl der Glieder zurück. Den kann numdiff nicht ableiten. Wie kann ich denn dann einzelne Werte dieses Vektors an numdiff übergeben?

Benutzeravatar
MisterD123
Geek
Geek
Beiträge: 811
Registriert: 31. Okt 2006 20:04
Wohnort: Weiterstadt

Re: P7: Syntax zur Verwendung von numdiff() ?

Beitrag von MisterD123 »

Vektorwertige funktionen funktionieren auch, du musst nur drauf achten, dass dein parameter ein Nx1 vektor ist und die funktion dazu passend parameter in Nx1 nimmt. numdiff leitet nur in positionen in Nx1 ab.

Und wie auch grade oben reineditiert: Habs jetzt auch ohne for-schleife hinbekommen, geht also :)

TCE
Mausschubser
Mausschubser
Beiträge: 48
Registriert: 11. Nov 2009 11:27

Re: P7: Syntax zur Verwendung von numdiff() ?

Beitrag von TCE »

sau geil... vielen vielen Dank

MuldeR
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 131
Registriert: 18. Okt 2005 16:14
Wohnort: (d)armstadt
Kontaktdaten:

Re: P7: Syntax zur Verwendung von numdiff() ?

Beitrag von MuldeR »

MisterD123 hat geschrieben:richtig, die aufgabe ist mehr als nur die formel abzuschreiben :)
Das ist mir schon klar ;)
MisterD123 hat geschrieben:du hast q(t0), qdot(t0) und qdotdot(t0), damit kannst du, wenn du qdotdot mal als konstant annimmst, dir q(t) und qdot(t) hinreichend konstruieren, damit man die formeln numerisch in t=t0 ableiten kann.
Okay. Also analog dazu, wie ich es "analytisch" ableiten würde, müsste es dann doch in etwas so aussehen, oder ???
(numdiff(@foo, q, qdot, dh, g) * qdot) + (numdiff(@foo, qdot, q, dh, g) * qdotdot)

Wobei dann die foo() Funktion "intern" dann nochmal nach qdot ableiten müsste...

Das man die q's und qdot's direkt als Vektor übergibt, klappt mit numdiff(), oder? Das war die Diskussion, ob man eine Schleife brauch, nehm ich an.

Danke!

TCE
Mausschubser
Mausschubser
Beiträge: 48
Registriert: 11. Nov 2009 11:27

Re: P7: Syntax zur Verwendung von numdiff() ?

Beitrag von TCE »

ja, das klappt. beim addieren für tau musst du das ergebnis dann nur wieder transponieren!

Benutzeravatar
MisterD123
Geek
Geek
Beiträge: 811
Registriert: 31. Okt 2006 20:04
Wohnort: Weiterstadt

Re: P7: Syntax zur Verwendung von numdiff() ?

Beitrag von MisterD123 »

MuldeR hat geschrieben:
MisterD123 hat geschrieben:richtig, die aufgabe ist mehr als nur die formel abzuschreiben :)
Das ist mir schon klar ;)
MisterD123 hat geschrieben:du hast q(t0), qdot(t0) und qdotdot(t0), damit kannst du, wenn du qdotdot mal als konstant annimmst, dir q(t) und qdot(t) hinreichend konstruieren, damit man die formeln numerisch in t=t0 ableiten kann.
Okay. Also analog dazu, wie ich es "analytisch" ableiten würde, müsste es dann doch in etwas so aussehen, oder ???
(numdiff(@foo, q, qdot, dh, g) * qdot) + (numdiff(@foo, qdot, q, dh, g) * qdotdot)

Wobei dann die foo() Funktion "intern" dann nochmal nach qdot ableiten müsste...

Das man die q's und qdot's direkt als Vektor übergibt, klappt mit numdiff(), oder? Das war die Diskussion, ob man eine Schleife brauch, nehm ich an.

Danke!
nein nicht ganz. der erste parameter von foo muss t sein und nach dem leitest du in 0 ab!

MuldeR
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 131
Registriert: 18. Okt 2005 16:14
Wohnort: (d)armstadt
Kontaktdaten:

Re: P7: Syntax zur Verwendung von numdiff() ?

Beitrag von MuldeR »

TCE hat geschrieben:ja, das klappt. beim addieren für tau musst du das ergebnis dann nur wieder transponieren!
Du meinst so?
(numdiff(@foo, q, qdot, dh, g) * qdot)' + (numdiff(@foo, qdot, q, dh, g) * qdotdot)'

MisterD123 hat geschrieben:nein nicht ganz. der erste parameter von foo muss t sein und nach dem leitest du in 0 ab!
Naja, aber wie schon diskutiert, tritt 't' ja nicht explizit als Parameter auf. Also leite ich stattdessen nach q bzw. qdot ab, multipliziere die einzelnen Ableitungen mit qdot bzw. qdotdot und bilde schließlich die Summe. Das ist doch Definition vom "totalen Differential", wenn ich nicht irre...
Zuletzt geändert von MuldeR am 26. Jan 2011 18:13, insgesamt 1-mal geändert.

TCE
Mausschubser
Mausschubser
Beiträge: 48
Registriert: 11. Nov 2009 11:27

Re: P7: Syntax zur Verwendung von numdiff() ?

Beitrag von TCE »

Im Endeffekt kannst du es so machen ja. Oder du machst das wenn du alle deine Ableitungen dann addierst um tau zu errechnen. Denn numdiff gibt einen (1xN) Vektor wieder. tau hingegen (zumindest laut Testfall) ist ein (Nx1)-Vektor.

TCE
Mausschubser
Mausschubser
Beiträge: 48
Registriert: 11. Nov 2009 11:27

Re: P7: Syntax zur Verwendung von numdiff() ?

Beitrag von TCE »

MisterD123 hat geschrieben: nein nicht ganz. der erste parameter von foo muss t sein und nach dem leitest du in 0 ab!
Das mit dem t verstehe ich auch nicht? Wie meinst du das?

Antworten

Zurück zu „Archiv“