我一直试图解决这个问题,但没有运气。
我想做的就是区分像P(x) = 3x^3 + 2x^2 + 4x + 5
这样的多项式
在代码的最后,程序应该评估这个功能,并给我一个答案。
P(x)
的衍生物是P'(x) = 3*3x^2 + 2*2x + 4*1
。如果x = 1,答案是17。
无论我如何改变循环,我都无法得到答案。
/*
x: value of x in the polynomial
c: array of coefficients
n: number of coefficients
*/
double derivePolynomial(double x, double c[], int n) {
double result = 0;
double p = 1;
int counter = 1;
for(int i=n-1; i>=0; i--) //backward loop
{
result = result + c[i]*p*counter;
counter++; // number of power
p = p*x;
}
return result;
}
//Output in main() looks like this
double x=1.5;
double coeffs[4]={3,2.2,-1,0.5};
int numCoeffs=4;
cout << " = " << derivePolynomial(x,coeffs,numCoeffs) << endl;
答案 0 :(得分:6)
x ^ n
的衍生产品是n * x ^ (n - 1)
,但您正在计算完全不同的东西。
double der(double x, double c[], int n)
{
double d = 0;
for (int i = 0; i < n; i++)
d += pow(x, i) * c[i];
return d;
}
这可行,假设您的polinomial采用c0 + c1x + c2x ^ 2 + ...
Demonstration, with another function that does the derivation as well.
修改:替代解决方案,避免使用pow()
函数,只需简单求和和重复乘法:
double der2(double x, double c[], int n)
{
double d = 0;
for (int i = 0; i < n - 1; i++) {
d *= x;
d += (n - i - 1) * c[i];
}
return d;
}
This works too.请注意,采用迭代方法的函数(那些不使用pow()
的函数)会以相反的顺序期望它们的参数(系数)。
答案 1 :(得分:1)
您需要反转循环的方向。从0开始,然后转到n。
当你计算第n次幂的部分和时,p是1.对于最后一次x ^ 0,你的p将包含x ^ n-1次幂。
double derivePolynomial(double x, double c[], int n) {
double result = 0;
double p = 1;
int counter = 1;
for(int i=1; i<n; i++) //start with 1 because the first element is constant.
{
result = result + c[i]*p*counter;
counter++; // number of power
p = p*x;
}
return result;
}
double x = 1; double coeffs [4] = {5,4,2,3}; int numCoeffs = 4;
cout&lt;&lt; &#34; =&#34; &LT;&LT; derivePolynomial(x,coeffs,numCoeffs)&lt;&lt; ENDL;