创建一个迭代程序来估计多项式的根

时间:2011-03-24 17:16:29

标签: c numerical-methods polynomial-math

在c中创建程序,假设使用newton raphson方法估计10阶多项式的根。用户输入10个系数,并且假设估计方程的根。绝对相对误差为0.00000001,允许的最大迭代次数为70.示例代码如下。

   n=0;
    while(abserr<=0.00000001){
    yold=y;
    y = y-(poly(y,coefficients,11)/poly_der(y,coefficients,11));
    ynew = y;
    error=ynew-yold;
    abserr=sqrt(error*error);

    printf("iteration x%d = %.2f error =%.2f\n",n+1,y,abserr);
    n++;
    iteration++;

    if(iteration==70){
    printf("you have reached the maximum number of iterations\n");
    break;}
    }

函数poly和poly_der分别计算多项式及其导数的值。下面有定义。

float poly(float 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_der(float x, float coefficients[], int order)
{
    int idx;
    float total;

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

deri是计算多项式中项的导数的函数。 不幸的是,这个程序会产生意外我无法弄清楚哪里出错,因为它编译并运行良好。有没有其他方法可以使用牛顿方法估计根。如何改进程序,以便产生所需的结果。

2 个答案:

答案 0 :(得分:4)

您有几个单元化变量:total(两次)和看似iteration。如果不初始化变量,则其值未定义,甚至可能在同一程序的运行之间有所不同。

total = 0.poly中输入循环之前,请poly_der

答案 1 :(得分:3)

以下是一些可能会有所帮助的事情:

  1. 发布功能。
  2. 发布您对根的期望。
  3. 发布您获得的结果以及您提供的输入。
  4. 了解您选择的起始条件,因为N-R等迭代方法可以根据您的起点给出不同的结果。
  5. 告诉我们为什么你确定这不是N-R给你的当地最低要求。
  6. 那个deri()函数是什么?那是你的吗?