1 回答
TA贡献1155条经验 获得超0个赞
前提:以下解决方案找到整数(近似)系数。
使代码更高效的一种简单方法是使用向量化(使用numpy
库)计算所有索引组合的多项式,然后返回多项式值更接近 的值的索引组合n
。
下面的代码创建一个包含所有整数a
和b
组合的网格,使用np.meshgrid
,然后计算所有组合的多项式,并计算组合的位置,使多项式更接近于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)
您可以轻松地将上面的代码扩展到高阶多项式的情况,因为该np.meshgrid方法接受任意数量的范围来创建网格。
添加回答
举报