C++:如何计算具有区间边界的积分?

C++: How to compute an integral with interval bounds?

我既累又不熟悉 C++,而且非常不擅长处理多项式。这对我的任务来说是一个糟糕的组合。尽管如此,我正在努力解决它。请注意,我可能在数学和语言方面误解了某些部分。甚至术语。

我的第一个任务是创建一个 class 来存储多项式。我认为重要的部分是系数和多项式的次数。因此,我有一个多项式 class ,(部分)看起来像这样:

class Polynomial {

private:
    double* Coefficients;  //Array of coefficients in order of ascending power
    int Degree; //The degree of the polynomial

...

class 应该有一种方法可以在下限和上限内找到多项式的积分。但是我真的不知道怎么用。

因为不展示我所做的是不好的做法,这就是我目前拥有的,它可能没有多大意义,但是如果可以的话,请给我指明正确的方向?

Polynomial Polynomial::ComputeIntegral(double lower, double upper) {
    //Values needed to create new polynomial
    //degree will be one more than the original polynomial
    int degree = Degree + 1;
    double* coefficients = new double[degree + 1];

    coefficients[0] = 0;

    for (int i = 0; i < degree +1; i++) {
        coefficients[i + 1] = Coefficients[i] / (double)(i + 1);
    }

    Polynomial integral(degree, coefficients);
    return integral;
}

我能看到我自己,它被搞砸了,因为 a) 我不使用边界,并且 b) 我很确定根据赋值描述我应该得到一个值而不是一个新的多项式。

Google 告诉我有一些算法可以处理求积分(例如梯形),但我无法将其与我的多项式表示相匹配。

一些提示:

  1. 使用std::vector代替指针和new。 (如果您是 C++ 新手,实际需要使用 new 的情况非常少。)
  2. ComputeIntegral(double, double) 需要 return 一个双精度数,因为它显然是在计算定积分。 (您现在拥有的函数类似于 GetPrimitive(),因为它 return 是多项式的原语,它是另一个多项式。
  3. 定积分是原语在边界处的差值(微积分第一基本定理)。
  4. 有多种方法可以将多项式表示为数据结构,但我建议使用一个 std::vector<double> coeffs 来表示所有系数,直至多项式的阶数,然后阶数可以在 coeffs.size() 计算。但在某些情况下,coeffs 中可能有零。

在一般情况下,可以使用 boost 库来计算积分:https://www.boost.org/doc/libs/1_77_0/libs/math/doc/html/quadrature.html

还有我用来计算积分的库 ALGLIB。下面是使用 ALGLIB 计算积分的示例: