TCE hat geschrieben:Hallo,
die Syntax ist eigentlich nicht weiter schwer:
Du musst nur eine Funktion als functionhandle deklarieren: f=@myfun. Hierbei ist myfun z.B. function g = myfun(x,y,z).
Dann kann man schon numdiff wie folgt aufrufen. numdiff(f,x,y,z). Dabei ist die zweite Stelle die Variable nach der Du ableiten willst. Die restlichen Variablen werden von einer varargin-Funktion in numdiff gecatched. D.h. sämtliche Variablen die hinter der zweiten Stelle an numdiff übergeben werden, werden in numdiff verarbeitet und an die function übergeben.
Ah okay. Danke! Ich gebe nach dem Funktions-Handle also einfach nacheinander alle Parameter an, die meine Funktion erwartet. Quasi wie man es von printf(...) kennt. Und zwar genau in der Reihenfolge, in der sie bei meiner Funktion deklariert sind, wobei das erste Parameter (nach dem Funktions-Handle) implizit die Variable ist, nach der Abgeleitet werden soll. Das heißt also auch, dass meine Funktion so geschrieben sein muss, dass sie die Variable, nach der ich ableiten möchte, als erstes Parameter erwartet...
TCE hat geschrieben:Jetzt hat sich bei mir aber eine Frage ergeben:
Wenn ich nun nicht nach x sondern nach y ableiten will: Wie kann ich die Variablen in richtiger Reihenfolge an die function übergeben? In numdiff steht:
y0 = f(x, varargin{:});
f ist die function "calcManipulatorEnergy". x=q, denn danach will man ja ableiten. q steht bei einem Aufruf von "calcManipulatorEnergy" aber nicht an erster Stelle sondern an zweiter!? Können wir numdiff abändern oder muss man da eine Art Umsortierungsfunktion schreiben??
Wenn numdiff() so funktioniert, wie ich es verstanden habe, wird man sich wohl eine "Wrapper" Funktion um die eigentliche Funktion herumbasteln müsse, die die Parameter so "umsortiert", dass das Parameter, nach dem wir ableiten möchten, an erster Stelle steht. Intern wird die eigentliche Funktion dann mit der "richtigen" (vorgegebenen) Parameter-Reihenfolge aufgerufen.
Ich denke numdiff() abändern ist keine gute Idee, da diese Funktion ja vorgegeben ist und nicht mit hochgeladen werden soll...
numdiff leitet nach dem ersten Parameter in der Liste ab. Falls das ein Vektor ist, werden alle Ableitungen gebildet und als Array zurückgegeben:
x = numdiff(list(funktionX, param1, param2), param1) mit param1 aus R3 liefert in x(1) die x-Komponente.
In dem Original-Beitrag war scheinbar von Scilab die Rede. Geht das mit dem Vektor in Matlab auch so? Und brauch ich diese list(..) ebenfalls?
Danke!