Я написал функцию в C #, которая выполняет численное дифференцирование. Это выглядит так:
public double Diff(double x)
{
double h = 0.0000001;
return (Function(x + h) - Function(x)) / h;
}
Я хотел бы быть в состоянии передать в любой функции, как в:
public double Diff(double x, function f)
{
double h = 0.0000001;
return (f(x + h) - f(x)) / h;
}
Я думаю, что это возможно с делегатами (возможно?), Но я не уверен, как их использовать.
Любая помощь будет принята с благодарностью.
В .Net есть несколько общих типов (v2 и более поздние), которые очень легко передают функции делегатам.
Для функций с типами возврата есть Func <>, а для функций без типов возврата есть Action <>.
Можно объявить, что Func и Action принимают от 0 до 4 параметров. Например, Func <double, int> принимает один double в качестве параметра и возвращает int. Действие <double, double, double> принимает три типа double в качестве параметров и ничего не возвращает (void).
Таким образом, вы можете объявить свою функцию Diff для получения Func:
И затем вы называете это так, просто давая ему имя функции, которая соответствует сигнатуре вашего Func или Action:
Вы даже можете написать функцию в строке с лямбда-синтаксисом:
источник
Func
иAction
были обновлены, чтобы учесть до 16 параметров.Func<double, double>
, являющееся первой производной функции ввода, вычисленной, конечно, численно.return x => (f(x + h) - f(x)) / h;
Вы могли бы даже написать перегрузку, которая возвращала быn
производную функции ввода.Использование:
источник