やりたいこと
クラス内の非静的メンバ関数をニュートン法を使って解きたいです。
ニュートン法の部分はC++でニュートン法を美しく書く その1からお借りしていて、これを使おうと思っています。
起こっている問題、エラーコード
practice.cpp: In function ‘int main()’:
practice.cpp:84:57: error: invalid use of non-static member function ‘float A::hoge(float)’
y = solve_by_newton_method(B.hoge, x, 0.00001, 0.00001);
###該当するソースコード
C++
1auto solve_by_newton_method = []( std::function<int(int)> func , double x ,double error , double delta ) { 2 3 double y1; 4 double y2; 5 double x1; 6 double x2; 7 double diff_x; 8 double next_x; 9 10 x1 = x; 11 12 while (1) { 13 14 x2 = x1 + delta; 15 16 y1 = func(x1); 17 y2 = func(x2); 18 19 diff_x = (y2 - y1) / (x2 - x1); 20 next_x = x1 - y1 / diff_x; 21 22 if (fabs(y1 - 0) < error) { 23 break; 24 } 25 x1 = next_x; 26 } 27 return x1; 28}; 29class A 30{ 31private: 32 float _a,_b,_c; 33public: 34 A(float a,float b,float c); 35 float hoge(float x); 36}; 37 38A::A(float a,float b,float c) 39{ 40 _a = a; 41 _b = b; 42 _c = c; 43}; 44 45float A::hoge(float x) 46{ 47 float y; 48 y = _a*x*x + _b*x + _c; 49 return y; 50}; 51int main(){ 52 53 float x,y; 54 x = 0; 55 A B(1,2,1); 56 y = solve_by_newton_method(B.hoge, x, 0.00001, 0.00001); 57 std::cout << y << std::endl; 58 return 1; 59};
###補足
今回例示したB.hogeはあくまで問題を簡単にした例です。
解きたい関数がB.hoge以外にもあり、また二次関数のように単純な関数でもないためこのようなやり方で解きたいと思っています。どなたかお知恵をお貸しください。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/26 08:46