Я пишу функцию для Метод Ньютона в C ++.
Я хочу иметь возможность назначить функцию, которая будет использоваться в алгоритме, но я хочу, чтобы это входные данные.
Например:
double newton(f,df,tolerance,initial_guess,max_iterations)
где е а также Д.Ф. являются функцией и ее производное соответственно.
Но как мне это сделать?
Вы можете сделать это с помощью шаблонов:
#include <math.h>
#include <stdio.h>
template<class F>
void foo(F f, double x) {
printf("f(0) = %f\n", f(x));
}
int main() {
foo(sinf, 0);
foo(cosf, 0);
}
выход:
f(0) = 0.000000
f(0) = 1.000000
Вы бы объявили указатель на функцию в качестве входных данных: вот базовый пример:
void printNumber (int input) {
cout << "number entered: " << input << endl;
}
void test (void (*func)(int), int input) {
func(input);
}
int main (void) {
test (printNumber, 5);
return 0;
}
Первый параметр в тесте говорит: возьмите функцию с именем func, которая имеет int в качестве входных данных и возвращает void. Вы бы сделали то же самое с вашей функцией и ее производной.
В качестве альтернативы, вы можете написать так в C ++ 11.
(Изменено из кода @ Anycom, ^ _ ^)
#include <math.h>
#include <stdio.h>
#include <functional>void foo(std::function<double(double)> fun, double x) {
printf("f(0) = %f\n", fun(x));
}
int main() {
foo(sinf, 0);
foo(cosf, 0);
}