在 Scypy/numpy 中,是否有一种快速扩展和求解二项式提升到分数幂的方法?
例如,我想解以下方程
y * (1 + x)^4.8 = x^4.5
其中 y 是已知的(例如 1.03)。
这需要 (1 + x)^4.8 的二项式展开。
我希望为数百万个 y 值执行此操作,因此我正在寻找一种很好且快速的方法来解决此问题。
我试过 sympy expand(和简化),但它似乎不喜欢分数指数。我也在努力使用 scipy fsolve 模块。
任何指向正确方向的指针将不胜感激。
编辑:
到目前为止,我发现的最简单的解决方案是为 x(和已知 y)的假定值生成真值表 (https://en.wikipedia.org/wiki/Truth_table)。这允许对“真实”x 值进行快速插值。
y_true = np.linspace(7,12, 1e6)
x = np.linspace(10,15, 1e6)
a = 4.5
b = 4.8
y = x**(a+b) / (1 + x)**b
x_true = np.interp(y_true, y, x)
最佳答案
编辑:在将输出与 y=1.03 的 Woldfram alpha 的输出进行比较时,看起来 fsolve 不会返回复杂的根。 https://stackoverflow.com/a/15213699/3456127 是一个类似的问题,可能会有更多帮助。
重新排列你的方程: y = x^4.5 / (1+x)^4.8
。Scipy.optimize.fsolve()
需要一个函数作为它的第一个参数。
任何一个:
from scipy.optimize import fsolve
import math
def theFunction(x):
return math.pow(x, 4.5) / math.pow( (1+x) , 4.8)
for y in millions_of_values:
fsolve(theFunction, y)
或者使用
lambda
(匿名函数构造):from scipy.optimize import fsolve
import math
for y in millions_of_values:
fsolve((lambda x: (math.pow(x, 4.5) / math.pow((1+x), 4.8))), y)
关于python - Python中带分数幂的二项式展开,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31661212/