を求めます。
まず被積分関数fとして double f(double t) を定義します。 DefQuadクラスのコンストラクタの第1引数に非積分関数f、続いて第2、第3引数に 積分区間の下限と上限を渡します。 do_integrate(int& ier, int& neval, double& abserr)メソッド によって積分を実行します。 このメソッドの引数は参照渡しで、積分の実行後、ierにはエラーコード(ier=0はエラーなし)、nevalには積分計算中でのf(t)の評価回数、abserrには計算誤差の評価が返ってきます。
#include <iostream> #include <octave/config.h> #include <octave/Quad.h> using namespace std; double f(double x) { return x*x; } int main() { DefQuad defQuad(f, 1.0, 2.0); int ier, neval; double abserr; cout << "f(x) = x^2" << endl; cout << "int_1^2 f(x) dx = " << defQuad.do_integrate(ier, neval, abserr) << endl; cout << "ier = " << ier << endl; cout << "neval = " << neval << endl; cout << "abserr = " << abserr << endl; }
f(x) = x^2 int_1^2 f(x) dx = 2.33333 ier = 0 neval = 21 abserr = 2.59052e-14
IndefQuadクラスのコンストラクタの引数は計算したい積分区間に応じて次の様になります。
#include <iostream> #include <octave/config.h> #include <octave/Quad.h> #include <cmath> using namespace std; double f(double x) { return exp(-x*x); } int main() { IndefQuad indefQuad(f, 0.0, IndefQuad::bound_to_inf); // IndefQuad::neg_inf_to_bound, IndefQuad::doubly_infinite int ier, neval; double abserr; cout << "f(x) = exp(-x^2)" << endl; cout << "int_0^{infty} f(x) dx = " << indefQuad.do_integrate(ier, neval, abserr) << endl; cout << "ier = " << ier << endl; cout << "neval = " << neval << endl; cout << "abserr = " << abserr << endl; }
f(x) = exp(-x^2) int_0^{infty} f(x) dx = 0.886227 ier = 0 neval = 135 abserr = 7.10132e-09
管理人? (2005-01-05 (水) 17:37:08)
どうすればよいのか?
&ref(): File not found: "wikilogo1.png" at page "数値積分を行いたい"; |