C ++:如何用区间界限计算积分?

时间:2015-06-05 00:47:12

标签: c++ algorithm integral polynomials

我既厌倦了,也不熟悉C ++并且在处理多项式时非常糟糕。这对我的任务来说是一个糟糕的组合。不过我试图解决它。请注意,我可能在数学和语言方面误解了某些部分。甚至可能是术语。

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

class Polynomial {

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

...

该类应该有一个方法,用于在下限和上限内找到多项式的积分。但我真的不知道如何使用它。

由于不显示我所做的事情是不好的做法,这就是我现在所拥有的,这可能没有多大意义,但是,如果可以的话,请指出我正确的方向?

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)我非常确定每个赋值描述我应该得到一个值而不是一个新的多项式。

谷歌告诉我有一些算法来处理寻找积分(例如梯形),但我无法用我的多项式表示来匹配它。

1 个答案:

答案 0 :(得分:3)

一些指示:

  1. 使用std::vector代替指针和new。 (如果您不熟悉C ++,那么实际需要使用new的情况非常少。)
  2. ComputeIntegral(double, double)将需要返回一个double,因为它显然是计算一个定积分。 (你现在的函数就像GetPrimitive(),因为它返回多项式的基元,这是另一个多边形。
  3. 定积分是在边界处评估的原始差异(微积分的第一基本定理)。
  4. 您可以通过多种方式将多项式表示为数据结构,但我建议使用单个std::vector<double> coeffs来表示直到poly的度数的所有系数,然后可以计算度数在coeffs.size()。在某些情况下,coeffs可能会有零。