我试图找到多项式的不定积分,但是我的数学和编码都不是很好。我的代码编译但我相信我有错误的公式:
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;
}
答案 0 :(得分:2)
看起来像你想要的是
for ( int i = fDegree; i > 0; --i ) {
Result.fCoeffs[i] = fCoeffs[i-1] / static_cast<float>(i);
}
我不知道你班级的基本实施,所以我不知道你是如何实施fCoeffs(如果它的双打或浮动),如果你需要担心{{1超出范围。如果它是一个向量,那么它肯定需要初始化为正确的大小;如果是地图,那么你可能不需要。
答案 1 :(得分:1)
尝试类似
的内容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;
}
每个单项式 ax ^ i 在 fCoeffs [i] 中存储为值 a ,集成后应将其移至 fCoeffs [i + 1] ,乘以 1 /(i + 1)。最低系数设置为 0 。 是的,你最好确保有最高系数的空间。
示例: [1 1] 是 1 + x ,应该成为 C + x + 1/2 x ^ 2 通过 [0 1 0.5] ,请记住我们引入了一个任意常量。