Python问题:“ OverflowError:Python int太大,无法转换为C long”

时间:2019-11-13 04:48:58

标签: python sympy

import sympy as sy
x = sy.symbols('x')
def f2(x,t,l):
    return 5*sy.log(x)+14388/((273+t)*x)-sy.log((1.1910*10**8)/l+1)
print(sy.solve(f2(x,35,80),x))

结果是:

  

OverflowError:Python int太大,无法转换为C long

如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

请检查您的方程式。似乎没有解决办法:

>>> eq=f2(x,35,80);eq
5*log(x) - 14.2134480713559 + 327/(7*x)

该函数中有一个最小值,在该点处凸出并为正:

>>> solve(eq.diff(x))
[327/35]
>>> eq.subs(x,_[0]).n()
1.95961247568333
>>> eq.diff(x,2).subs(x,Rational(327,35))
6125/106929

因此,如果常量多一点负数,一切都会起作用:

>>> eq.subs(eq.atoms(Float).pop(),-20)
5*log(x) - 20 + 327/(7*x)
>>> ans=solve(_)
>>> [i.n(2) for i in ans]
[44., 3.3]