salut, en dimension 1 c'est tres facile, maintenant si ta fonction est a valeur dans R^n, c'est un peu plus complexe...
a la base newton trouve un 0 de ta fonction, tu appliques ca a ta dérivée pour trouver le min (ou le max).
a priori la convergence n'est garantie que quand ta fonction est convexe
ex: trouver un 0 de x²-2
#include <math.h>
#include <stdio.h>
...
// la fonction dont on cherche un zero
double f(double x)
{
return x*x - 2.0;
}
// la derivee de f
double fprime(double x)
{
return 2.0*x;
}
// x0 point initial : essayer de le prendre proche du zero supposé
double Newton(double x0, double (*fnc)(double), double (*fncprime)(double))
{
double Epsilon = 0.000001;
double xcourant = x0;
double xsuivant;
unsigned int i = 0;
for (i = 0; i < 2000; i++)
{
xsuivant = xcourant - fnc(xcourant) / fncprime(xcourant);
if (fabs(xcourant-xsuivant)<Epsilon)
break;
xcourant = xsuivant;
}
return xsuivant;
}
int main(int argc, char** argv)
{
printf("racine de 2 vaut: %f\n", Newton(5,f, fprime));
getc();
}
a++