J'ai écrit une fonction en C # qui fait une différenciation numérique. Cela ressemble à ceci:
public double Diff(double x)
{
double h = 0.0000001;
return (Function(x + h) - Function(x)) / h;
}
Je voudrais pouvoir passer dans n'importe quelle fonction, comme dans:
public double Diff(double x, function f)
{
double h = 0.0000001;
return (f(x + h) - f(x)) / h;
}
Je pense que c'est possible avec les délégués (peut-être?) Mais je ne sais pas comment les utiliser.
Toute aide serait grandement appréciée.
Il existe quelques types génériques dans .Net (v2 et versions ultérieures) qui facilitent le passage de fonctions en tant que délégués.
Pour les fonctions avec des types de retour, il existe Func <> et pour les fonctions sans types de retour, il y a Action <>.
Func et Action peuvent être déclarés prendre de 0 à 4 paramètres. Par exemple, Func <double, int> prend un double comme paramètre et renvoie un int. L'action <double, double, double> prend trois doubles comme paramètres et ne renvoie rien (void).
Vous pouvez donc déclarer votre fonction Diff pour prendre un Func:
Et puis vous l'appelez ainsi, en lui donnant simplement le nom de la fonction qui correspond à la signature de votre Func ou Action:
Vous pouvez même écrire la fonction en ligne avec la syntaxe lambda:
la source
Func
etAction
ont été mis à jour pour autoriser jusqu'à 16 paramètres.Func<double, double>
qui est la première dérivée de la fonction d'entrée, calculée numériquement bien sûr.return x => (f(x + h) - f(x)) / h;
Vous pouvez même écrire une surcharge qui renvoie len
ième dérivé de la fonction d'entrée.Usage:
la source