Adam
Adam

Reputation: 1

C++ polynomials: indefinite integrals

I am trying to find the indefinite integral of a polynomial, however neither my maths nor my coding is great. My code compiles but I believe I have the wrong formula:

Polynomial  Polynomial :: indefiniteIntegral() const
{
    Polynomial Result;
    Result.fDegree = fDegree + 1;
    for ( int i = fDegree; i > 0 ; i--){
        Result.fCoeffs[i] = pow(fCoeffs[i], (Result.fDegree)) / (Result.fDegree);
    }
    return Result;
}

Upvotes: 0

Views: 2230

Answers (2)

mvw
mvw

Reputation: 5105

Try something like

Polynomial  Polynomial::indefiniteIntegral() const 
{
  Polynomial Result;
  Result.fDegree = fDegree + 1;
  for (int i = fDegree; i > 0 ; i--) {
    Result.fCoeffs[i] = fCoeffs[i-1] / i;
  }
  Result.rCoeffs[0] = 0;
  return Result;
}

Each monomial a x^i is stored as value a in fCoeffs[i], after integration it should be moved to fCoeffs[i+1], multiplied with 1/(i+1). The lowest coefficient is set to 0. And yes, you better make sure there is room for the highest coefficient.

Example: [1 1] is 1 + x and should become C + x + 1/2 x^2 which is represented by [0 1 0.5], keeping in mind that we introduced an arbitrary constant.

Upvotes: 1

Greg Wilbur
Greg Wilbur

Reputation: 633

Looks like what you want is

for ( int i = fDegree; i > 0; --i ) {
  Result.fCoeffs[i]  = fCoeffs[i-1] / static_cast<float>(i);
}

I don't know the underlying implementation of your class, so I don't know how you're implementing fCoeffs (if its doubles or floats) and if you need to worry about i being out of bounds. If its a vector then it definitely needs to be initialized to the right size; if its a map, then you may not need to.

Upvotes: 2

Related Questions