在 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.8Scipy.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/

10-12 22:50