порождающее значение многочлена 10-го порядка и его производную в C - PullRequest
1 голос
/ 22 марта 2011

Пытаюсь сгенерировать значение многочлена 10 порядка с 11 коэффициентами.Также пытаюсь сгенерировать его производную.я написал три функции, показанные ниже.этот код генерирует значение полинома. a1 до a10 - коэффициенты.

float polynm( float a0,float a1,float a2,float a3,float a4,float a5,float a6,float a7,float a8,float a9,float a10,float x)
     {
          float poly = a0 + a1*x + a2*pow(x,2)+a3*pow(x,3)+a4*pow(x,4)+a5*pow(x,5)+a6*pow(x,6)+a7*pow(x,7)+a8*pow(x,8)+a9*pow(x,9)+a10*pow(x,10);
             return poly;
             }

этот код генерирует значение производной от полинома, который он вызывает функцией производной

 float polynm_der(float a0,float a1,float a2,float a3,float a4,float a5,float a6,float a7,float a8,float a9,float a10,float x)
    {  float der = a1 + a2*deri(x,2)+a3*deri(x,3)+a4*deri(x,4)+a5*deri(x,5)+a6*deri(x,6)+a7*deri(x,7)+a8*deri(x,8)+a9*deri(x,9)+a10*deri(x,10);
       return der;
       }
deri is below
float deri(float x,int n)
   {   
         float term_der = n*pow(x,n-1);
           return term_der;
           }

код для полинома неэффективен. Если бы я хотел сгенерировать полином 100 порядка, это стало бы невозможно.Есть ли способ, которым я могу сгенерировать полином и его производную, может быть, рекурсивно, чтобы избежать громоздкого кода.

Ответы [ 2 ]

6 голосов
/ 22 марта 2011

Одним из решений является принятие массива коэффициентов и его длины:

float poly(int x, float coefficients[], int order)
{
    int idx;
    float total;

    for (idx = 0; idx < order; idx++)
        total += coefficients[idx] * pow(x, idx);
    return total;
}

Рекурсивное решение было бы прекрасно, но это не Лисп. В любом случае, аналогичный подход может быть использован для производных. Просто помните о том, что в C параметры массива для функций превращаются в указатели, поэтому вы не можете использовать классные вещи, такие как sizeof, чтобы получить их длины.

Редактировать: В ответ на комментарий вы можете применить свои требования при создании массива coefficients. В качестве альтернативы, если вы не отвечаете за этот код, вы можете вставить его в функцию (хакерски) следующим образом:

if (coefficients[0] == 0 || coefficients[1] == 0 || coefficients[order-1] == 0)
    assert(0);
0 голосов
/ 22 марта 2011

Вы можете переписать функции для получения значения x, массива коэффициентов, а затем длины.

...