Search code examples
c++boostintegral

C++: Using boost to calculate simple definite integrals


Anyone know how to use Boost to solve simple definite integrals?

E.g. -x^2 + 1 from -1 to 1?

I have tried reading the boost documentation, but I can't seem to figure out how to properly pass the function.

Thanks

Edit: My attempt so far

using namespace boost::math;

typename function_type; // this is probably wrong

function_type f     // and this
{
    return -x*x+1;
};

int main(int, char**)
{
    const double val  =
    integral(0.0,
    1,  
    0.001,
    f);        // my question is, what do I put in here? How do I format f.
}

Solution

  • The first thing to observe is that the Boost library you've shown doesn't actually have a function to calculate integrals. That might have set you on the wrong track.

    The library is used for multi-precision floating point operations, and one of the examples happens to be a simple approximation of integrals, per Riemann. The point of the example is that Riemann integrals are so simple that you can use them to demonstrate a fancy library.

    In your case, you wouldn't even need to bother with passing a function. You can just write out the Riemann method substituting -x^2 + 1 directly.

    That said, the typical C++ way to pass it as an argument would be [](double x) { return -x*x+1.0;}. That's an unnamed function or lambda. It doesn't need a name of its own, since the parameter already has a name.