Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用C语言生成一个10阶多项式及其导数的值_C_Polynomial Math - Fatal编程技术网

用C语言生成一个10阶多项式及其导数的值

用C语言生成一个10阶多项式及其导数的值,c,polynomial-math,C,Polynomial Math,我正在尝试生成一个具有11个系数的10阶多项式的值。我也在尝试生成它的导数。我已经编写了三个函数,如下所示。 此代码生成多项式的值。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,

我正在尝试生成一个具有11个系数的10阶多项式的值。我也在尝试生成它的导数。我已经编写了三个函数,如下所示。 此代码生成多项式的值。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;
             }
此代码生成它调用函数deri的多项式的导数的值

 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阶多项式,那就不可能了。有没有一种方法可以递归地生成多项式及其导数,以避免使用笨拙的代码

一种解决方案是接受系数数组及其长度:

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;
}

一种解决方案是接受系数数组及其长度:

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;
}

您可以重写函数以获取x值、系数数组和长度。

您可以重写函数以获取x值、系数数组和长度。

+1。顺便说一句,最好在for循环中使用或至少使用powx,n==powx,n-1*x。第一个、第二个和最后一个系数不能为0。我如何在数组中强制执行该操作,以便不允许用户输入0.Ouch。不要使用pow,使用霍纳法则。你将自己暴露在野外发现的最典型的10度多项式的灾难性抵消中,例如插值多项式。哇,我已经很久没有看到霍纳或合成除法被提及了;完全忘记了。不过,我不会编辑这个问题来使用它,因为这让人觉得不诚实。上面的代码是问题的直译。如果有人想写一个更好的答案,我很乐意投票。用户将输入系数的a值,我将用for循环读取它们。我的用户对c一无所知。因此,当他们试图输入0并提示他们输入另一个值时,我想给他们一条警告消息。我该怎么做+1。顺便说一句,最好在for循环中使用或至少使用powx,n==powx,n-1*x。第一个、第二个和最后一个系数不能为0。我如何在数组中强制执行该操作,以便不允许用户输入0.Ouch。不要使用pow,使用霍纳法则。你将自己暴露在野外发现的最典型的10度多项式的灾难性抵消中,例如插值多项式。哇,我已经很久没有看到霍纳或合成除法被提及了;完全忘记了。不过,我不会编辑这个问题来使用它,因为这让人觉得不诚实。上面的代码是问题的直译。如果有人想写一个更好的答案,我很乐意投票。用户将输入系数的a值,我将用for循环读取它们。我的用户对c一无所知。因此,当他们试图输入0并提示他们输入另一个值时,我想给他们一条警告消息。我该怎么做呢我喜欢你使用10个参数的方式,但是函数名的缩写我喜欢你使用10个参数的方式,但是函数名的缩写