2016-12-28 20 views
0

我遇到了一個算法,它會將多項式從因子形式((x-1)(x+5)(x-9))轉換爲一般形式(x^3 -5x^2 -41x +45)。一開始我只有一個根如何將多項式轉換爲一般形式

例如列表:[1, -5, 9]

輸出應該係數的名單:[1, -5, -41, 45]

任何想法如何,我可以工作了這一點?

def przeksztalc(wielomian): 
    pierwiastki = [] 
    for i in wielomian: 
     lista_pomocniacza = [] 
     lista_pomocniacza.append(i * (-1)) 
     lista_pomocniacza.append(1) 
     pierwiastki.append(lista_pomocniacza) 
    rezultat = dzielenie_na_pary(pierwiastki) 
    return rezultat 


def dzielenie_na_pary(lista_z_pierwiastkami): 
    dlugosc = len(lista_z_pierwiastkami) 
    wynik = [] 
    for i in range(dlugosc-1): 
     wynik = mnozenie_nawiasow(lista_z_pierwiastkami[i], lista_z_pierwiastkami[i+1]) 
     lista_z_pierwiastkami[i+1] = wynik 
    return wynik[::-1] 


def mnozenie_nawiasow(nawias1, nawias2): 
    wynik_mnozenia = [0] * (len(nawias1 + nawias2) - 1) 
    for i in range(len(nawias1)): 
     for j in range(len(nawias2)): 
      wynik_mnozenia[i+j] += nawias1[i] * nawias2[j] 
    return wynik_mnozenia 

wielomian = [1, -5, 9] 
print(przeksztalc(wielomian)) 
+2

Stackoverflow是用來幫助你*認真地嘗試編寫程序並遇到問題。 –

+0

但我沒有想法如何開始。我需要一些建議。 – xarix

+1

從手工做幾個例子開始。你是做什麼?嘗試將您的手動算法變成軟件算法。 我會解決這個問題的方法是通過觀察每個單個係數如何來自根目錄。 (每個可以獨立計算) –

回答

0

當然可以。您需要編寫一個函數,該函數需要兩個列表,即多項式的係數。對於一般用途,我建議你從最低到最高。這將使你知根出現

[-1,1] [5,1] [-9,1]

的日常工作只是通過一個嵌套的循環,一個索引每個列表。係數i(在一個列表中)和j(在另一箇中)的乘積被加到係數i + j中。

重複使用此功能來構建正在運行的產品。用([-1,1],[5,1])調用一次得到結果[-5,4,1]。再次調用它和最後一個根來得到最終答案。

這讓你感動嗎?

+0

感謝Prune與你建議我做到了。 – xarix

+0

很高興聽到!你可以將你的解決方案添加到我的發佈?這真的有助於完成答案。 – Prune

+0

我如何添加解決方案,您的帖子?變量的名字在波蘭語裏,它的好名字是你的嗎? – xarix