用于区分C ++中的多项式的函数

时间:2013-05-22 21:59:20

标签: c++ function

我一直试图解决这个问题,但没有运气。 我想做的就是区分像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;

2 个答案:

答案 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;