我试图找到一个多项式的不定积分,但是我的数学和我的编码都不是很好。我的代码可以编译,但我相信我的公式是错误的:
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;
}
发布于 2014-03-24 20:32:45
看起来你想要的是
for ( int i = fDegree; i > 0; --i ) {
Result.fCoeffs[i] = fCoeffs[i-1] / static_cast<float>(i);
}
我不知道你的类的底层实现,所以我不知道你是如何实现fCoeffs的(如果它是双精度的还是浮点型的),也不知道你是否需要担心i
越界。如果它是一个向量,那么它肯定需要初始化为正确的大小;如果它是一个地图,那么你可能不需要这样做。
发布于 2014-03-24 20:38:58
试试像这样的东西
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;
}
每个单项式a x^i都存储为fCoeffsi中的值a,积分后应将其移动到fCoeffsi+1,再乘以1/(i+1)。最低系数设置为。是的,你最好确保有最高系数的空间。
例如:1 1是1+x,应该变成C+x+ 1/2 x^2,它由0 1 0.5表示,记住我们引入了一个任意常数。
https://stackoverflow.com/questions/22619803
复制相似问题