Gradient numerisch berechnen in C++?
Hallo,
meine Aufgabe sieht wie folgt aus: Zuerst soll man eine Klasse CMyVektor schreiben, was kein Problem war. Nun soll man eine Funktion schreiben, die an einer beliebigen Stelle einer beliebigen Funktion den Gradienten ausrechnet.
https://i.imgur.com/OdCG0CO.png
Das ich hier den Differenzenquotienten nutzen kann, verstehe ich, nur nicht, was es mit dem Funktionspointer auf sich hat und wie ich an die Funktionswerte von f komme.
Danke im Voraus für Eure Antworten!
1 Antwort
Die Funktion gradient() benötigt die Koordinate (x) und eine C-Funktion, die für eine Koordinate x den Wert f(x) berechnet. Letztere hat den Prototypen
double foo (CMyVector x) ;
diese Funktion wird als Pointer an "gradient" übergeben. So kannst Du den Gradienten jeder beliebigen Funktion "foo" berechnen. Ist ziemlich straightforward.
In der Funktion rufst du dann auf
my_f = (*function)(my_x)
für einen Vektor my_x deiner Wahl und bekommst den skalaren Wert my_y = f(my_x)
Vielen Dank für die schnelle Antwort! Das macht die Sache schon verständlicher. Jedoch verstehe ich leider noch nicht diesen Teil: https://i.imgur.com/wYmeBSY.png
Wie würde der Funktionspointer aussehen, wenn ich als Beispiel die erste Beispielsfunktion nehmen würde?
double myFunc(CMyVector v)
{
double x = v.getX(); /* wie immer das in der Klasse aussieht */
double y = v.getY();
return sin(x+y*y)+y*y*y-6*y*y+9y;
}
/* Aufruf */
vec = gradient(x, myFunc);
Ich hoffe es war klar...
Funktionspointer sind anfangs etwas ungewohnt.