3

基本上我只想解决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

也欢迎使用其他库的解决方案。

4

2 回答 2

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)的函数。

于 2013-07-20T19:37:56.940 回答
1

这是一个已知问题

你可以试试

solve(Eq(1/k**al + 1/k**bl + 1/k**cl, 1.12), k, rational=False)
于 2013-07-19T20:44:03.650 回答