基本上我只想解决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
也欢迎使用其他库的解决方案。
最佳答案
由于您使用的是数值,我假设您正在寻找数值解。在这种情况下,您不应使用 solve,因为它会尝试找到符号解。这里的问题是它将这些浮点指数转换为有理指数,它们具有非常大的分子和分母,然后在某个时候尝试生成与这些大数对应的阶多项式,这就是它失败的地方。
要进行数值求解,您可以使用 nsolve
。
>>> print nsolve(Eq(1/k**al + 1/k**bl + 1/k**cl, 1.12), 2)
1.82427203413783
不过,如果您对数值解感兴趣,最好使用 SciPy 等数值库。您可以使用 lambdify
将 SymPy 表达式转换为更适合使用 NumPy 数组的库(如 SciPy)的函数。
关于equation - 解方程 - 溢出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17754966/