1 回答

TA貢獻(xiàn)1155條經(jīng)驗(yàn) 獲得超0個(gè)贊
前提:以下解決方案找到整數(shù)(近似)系數(shù)。
使代碼更高效的一種簡(jiǎn)單方法是使用向量化(使用numpy
庫(kù))計(jì)算所有索引組合的多項(xiàng)式,然后返回多項(xiàng)式值更接近 的值的索引組合n
。
下面的代碼創(chuàng)建一個(gè)包含所有整數(shù)a
和b
組合的網(wǎng)格,使用np.meshgrid
,然后計(jì)算所有組合的多項(xiàng)式,并計(jì)算組合的位置,使多項(xiàng)式更接近于n
使用np.argmin
。最后,它返回組合的a
和值。b
import numpy as np
def find_approximate_integer_coefficients(n, x, amin=-10, amax=10, bmin=-10, bmax=10):
? ? a_range = np.arange(amin, amax+1)
? ? b_range = np.arange(bmin, bmax+1)
? ? a_coefficients, b_coefficients = np.meshgrid(a_range, b_range)
? ? polynomial_value = (a_coefficients * (x ** 2) + b_coefficients * x)
? ? argmin = np.abs(polynomial_value - n).argmin()
? ? return a_coefficients.flatten()[argmin], b_coefficients.flatten()[argmin]
例如,在我的筆記本電腦上大約 75 微秒后find_approximate_integer_coefficients(7.3890, np.e)返回。(1, 0)
您可以輕松地將上面的代碼擴(kuò)展到高階多項(xiàng)式的情況,因?yàn)樵搉p.meshgrid方法接受任意數(shù)量的范圍來(lái)創(chuàng)建網(wǎng)格。
添加回答
舉報(bào)