Gradient numerisch berechnen in C++?

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)


michiwien22  14.05.2018, 20:38

Ich hoffe es war klar...

Funktionspointer sind anfangs etwas ungewohnt.

1
begongoy 
Beitragsersteller
 14.05.2018, 20:41
@michiwien22

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?

0
michiwien22  14.05.2018, 20:49
@begongoy
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);
1