基本上我只想解决k
。请注意,等式等于1.12
import math
from sympy import *
a = 1.45
b = 4.1
c = 14.0
al = math.log(a, 2)
bl = math.log(b, 2)
cl = math.log(c, 2)
k = symbols('k')
print solve(Eq(1/k**al + 1/k**bl + 1/k**cl, 1.12), k)
这会引发OverflowError: Python int too large to convert to C long
也欢迎使用其他图书馆的解决方案。
答案 0 :(得分:4)
由于您使用的是数值,我假设您正在寻找数值解法。在这种情况下,您不应该使用solve,因为它试图找到符号解决方案。这里的问题是它将这些浮点指数转换为有理指数,它们具有非常大的分子和分母,然后它在某个时刻试图使度数的多项式对应于那些大数,这是它失败的地方。
要以数字方式解决,您可以使用nsolve
。
>>> print nsolve(Eq(1/k**al + 1/k**bl + 1/k**cl, 1.12), 2)
1.82427203413783
如果您对数字解决方案感兴趣,最好使用像SciPy这样的数字库。您可以使用lambdify
将SymPy表达式转换为更适合使用NumPy数组的SciPy等库的函数。
答案 1 :(得分:1)