我目前正在研究一個通過 n 階 python 計算多項式移位的專案。用戶可以輸入 n 個輸入,這些輸入存盤在一個陣列中,然后通過移位轉換并回傳一個新的多項式。問題是,n 的次數越高,將移位值轉換為其多項式系數所需的計算就越多:
程式應該做的是將所有值唯一地相加和相乘,并將結果保存在一個新陣列中:
例如,對于 4 次多項式,它將有輸入 [a,b,c,d]
shiftedPCL[0] = a b c d
shiftedPCL[1] = a*b b*c c*d a*c b*d a*d
shiftedPCL[2] = a*b*c b*c*d a*b*d a*c*d
shiftedPCL[3] = a*b*c*d
方程的第一行和最后一行可以簡單地通過分別對串列中的所有值求和和相乘來求解,我創建了一個簡單的遞回代碼來使用遞回計算方程的倒數第二行,但對于 n 大于 3它沒有用,因為它無法計算任何不是第一行、最后一行或倒數第二行的行。
這就是為什么我想知道是否有一種方法可以添加和相乘串列中的所有元素,如上所示(對于任何長度的串列)。
uj5u.com熱心網友回復:
您要做的是擴展一元二項式的乘積,例如
(x a)(x b)(x c)(x d) = x^4 Ax^3 Bx^2 Cx D.
不要通過(修改后的)維埃塔公式來做到這一點。相反,一次應用一個二項式。
例如,在三個因素已經擴大后,
(x^3 Px^2 Qx R)(x d) = x^4 (P d) x^3 (Q Pd) x^2 (R Qd) x Rd.
uj5u.com熱心網友回復:
結果陣列中索引處的元素是元素i組合的所有乘積之和i。
i在python中,串列中元素組合的所有乘積之和l可以寫成:
sum(map(prod, combinations(l,i)))
其中sum和map是內置函式,prod和combinations分別從標準庫模塊math和itertools匯入。
from itertools import combinations
from math import prod
def sums_of_products(l):
return [sum(map(prod, combinations(l,i))) for i in range(1, len(l) 1)]
我們可以用數字或符號使用 sympy 來測驗這個函式:
from sympy import symbols
a,b,c,d = symbols('a b c d')
print( sums_of_products([a,b,c,d]) )
# [a b c d,
# a*b a*c a*d b*c b*d c*d,
# a*b*c a*b*d a*c*d b*c*d,
# a*b*c*d]
print( sums_of_products([2,3,5,7]) )
# [17, 101, 247, 210]
uj5u.com熱心網友回復:
在我看來,最簡單的方法是使用 python itertool。Python itertool 是一個模塊,它提供了在迭代器上作業以生成復雜迭代器的各種函式。該函式是itertools排列。這可能是最簡單但最慢的程式:
from itertools import permutations
list1 = [1,2,3,4] #replace with a, b, c and d
shiftedPCL = []
for i in range(1,len(list1) 1):
comb = permutations(list1, i)
sum1 = 0
for j in comb:
print(j)
result = 1
for x in j:
result = result * x
sum1 = result
shiftedPCL.append(sum1)
print(shiftedPCL)
根據@Stef 的建議更改了變數名稱
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/424839.html
