用于查找五次多项式的一个根的代码

时间:2015-04-01 19:15:42

标签: c loops numerical-methods polynomial-math

我试图编写一个代码,要求用户为5度多项式提供5个系数,并且还要求给出一个范围(两个值)程序检查是否存在解决方案在它或不在(我要求只找到一个),解决方案必须是一个整数,而系数可以是浮点数。

我正在考虑编写一个运行在范围内每个整数上的代码,并将其替换为多余的描述,而不是我定义的多项式,并检查它是否等于零,但我仍然坚持决定如何制作循环。

另外一点,如果用户输入的区间中有多个根,那么我们必须打印根的最小值(但我也没有指示如何做到这一点)。

我会告诉你到目前为止我写的内容,我们将不胜感激任何一种帮助:

#include <stdio.h>
#define zero 0.00001

int main()
{
    double a, b, c , d , e , f , y ,  beginning_of_range, end_of_range;

    int x;

    printf("please enter the coefficients of the polynomial:\n");

    scanf("%lf%lf%lf%lf%lf", &a, &b, &c, &d, &e);

    printf("please enter two values to indicate the beginning and end of range:\n");

    scanf("%lf%lf", &beginning_of_range, &end_of_range);

    while (beginning_of_range > end_of_range)
    {
        printf("ERROR: the range you have entered isn't valid, please try again:");

        scanf("%lf%lf", &beginning_of_range, &end_of_range);
    }

    while (beginning_of_range < end_of_range)
    {
        x = beginning_of_range;

        y = a + b*x + c*x*x + d*x*x*x + e*x*x*x*x + f*x*x*x*x*x;

        if (y == zero)
        {
            printf("the root is:%d", x);

        }
        else 
        {
            x = x+1;
        }

        break;

    }

    return 0;
}

2 个答案:

答案 0 :(得分:0)

你的第一个while循环应该是if语句而不是循环。

你的第二个(主要)while循环从不递增范围的开头。这可能会给你带来无限循环。

答案 1 :(得分:0)

你写的任务非常值得怀疑,以至于可能存在误解或误传。

具有浮点系数的随机给定多项式将具有整数根,其概率接近零,几乎不可能。

即使使用整数系数,也需要仔细反向设计系数以获得整数根。只需将一个系数改为一,在大多数情况下,所有根都是不合理的。

您可以在框架中执行的操作是查找符号更改的间隔,以便在区间内至少有一个根可以使用bisection,regula falsi,Illinois,secant或Mullers方法找到。所有这些都是免费衍生的。

如果不识别所有根,也不识别复杂根,则很难保证找到所有真正的根。因此,几乎可以在给定间隔内找到最小的实根。可能存在一个整数区间,其内部有两个实根,因此在边界处符号是相同的。你必须在整数点分析所有导数的符号,以便在这种情况下做出更可靠的猜测,参见Descartes规则和Budan-Fourier定理。