C++でニュートン法用の関数を作成しています。
アルゴリズムで使用する関数を指定できるようにしたいのですが、入力として欲しいです。
例えば:
double newton(f,df,tolerance,initial_guess,max_iterations)
ここで、fとdfはそれぞれ関数とその導関数です。
しかし、どうすればこれを行うことができますか?
C++でニュートン法用の関数を作成しています。
アルゴリズムで使用する関数を指定できるようにしたいのですが、入力として欲しいです。
例えば:
double newton(f,df,tolerance,initial_guess,max_iterations)
ここで、fとdfはそれぞれ関数とその導関数です。
しかし、どうすればこれを行うことができますか?
テンプレートを使用してこれを行うことができます。
#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;
}
test の最初のパラメーターは次のように述べています。入力として int を持ち、void を返す func という名前の関数を取得します。関数とその導関数についても同じことを行います。