2015-04-01 69 views
0

我試圖編寫一個代碼,要求用戶給出五次多項式的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; 
} 
+0

繼續,完成您的代碼。這似乎是正確的。考慮一下,如果你找到解決方案,你只需要跳出循環。你知道SO的政策,提供直接作業解決方案... – XapaJIaMnu 2015-04-01 19:22:28

+0

即時通訊不要求解決方案,只有方向 – 2015-04-01 19:24:36

+0

'if(y == zero)'這是錯誤的。你應該檢查'y'的絕對值是否小於'zero'。順便說一下,在你的代碼中,「零」不是0,所以你最好重命名它。這種常量/變量的常見名稱是「epsilon」。你應該記住,一個(幾乎)從不使用'=='與浮游物。 – fjardon 2015-04-02 08:33:09

回答

0

你所寫的任務非常可疑,以至於可能存在誤解或錯誤的溝通。

具有浮點係數的隨機給定多項式將具有整數根,其概率非常接近零,以至於實際上不可能。

即使使用整數係數,它也需要仔細的反向工程系數才能得到一個整數根。只要改變一個係數,在大多數情況下,所有的根都是非理性的。

你可以在你的框架中做的是找到帶有符號變化的區間,以便在區間內至少有一個可以使用二分法,regula falsi,伊利諾伊,割線或Mullers方法找到的根。所有這些都是免費衍生的。

沒有確定所有根,也是複雜的根,很難保證找到所有的真正的根。因此,只能在給定的時間間隔內找到最小的實根。可能會有一個整數區間,裏面有兩個實根,所以在邊界處符號是相同的。在這種情況下,您將不得不分析整數點處的所有導數的符號,以便進行更可靠的猜測,參見笛卡爾法則和Budan-Fourier定理。

0

你的第一while循環也許應該是一個if語句,而不是一個循環。

你的第二個(主)while循環不會增加範圍的開始。這可能會導致你無盡的循環。

+0

那我該如何糾正? – 2015-04-01 19:45:02

+0

在while循環的末尾添加一個增加beginning_of_range的語句。 – 2015-04-01 19:45:51

+0

beginning_of_range ++ – 2015-04-01 19:45:58