2

我一直试图解决这个问题,但没有运气。我要做的就是区分一个多项式,例如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;
4

2 回答 2

6

的导数x ^ nn * 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;
}

假设您的多项式采用以下形式,这将起作用c0 + c1x + c2x ^ 2 + ...

演示,另一个函数也可以进行推导。

编辑:避免使用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;
}

这也有效。请注意,采用迭代方法的函数(不使用pow()的函数)期望它们的参数(系数)以相反的顺序排列。

于 2013-05-22T22:06:13.693 回答
1

您需要反转循环的方向。从 0 开始,到 n。

在您计算 n 次幂 p 的部分总和时,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;
        }

双 x=1; 双系数[4]={5,4,2,3}; int numCoeffs=4;

cout << " = " << 派生多项式(x,coeffs,numCoeffs) << endl;

于 2013-05-22T22:17:57.263 回答