SymPy渐近线怪癖以及如何绕过它

时间:2015-05-18 20:13:30

标签: python sympy

今天我偶然发现了SymPy的一个奇怪的特征。假设我们尝试评估函数的渐近线:

>>from sympy import *
>>
>>x = Symbol("x")
>>N(cot(x),subs={x: 0})
cot(x)

它既不返回NaN,也不返回错误或异常,而是函数本身!
我的问题:
1.我怎样才能自动检测到某个点我偶然发现了一个渐近线(除了在结果上调用type())?
2.这个设计决定背后的动机是什么?

2 个答案:

答案 0 :(得分:2)

对表达式使用subs而不是N的参数:

In [3]: N(cot(x).subs(x,0))
Out[3]: zoo

这可能是同情的错误

答案 1 :(得分:0)

要回答问题1,您可以自动尝试将结果发送到float(),如下所示:

try:
    result=float(N(cot(x),subs={x: 0}))
except Exception as e:
    plus=limit(cot(x), x, 0, '+')
    minus=limit(cot(x), x, 0, '-')
    func=str(inspect.trace()[-1][0].f_locals['result'])
    if plus==minus:
        print("Function %s has a point discontinuity at the point specified. An approximation of the function taking the limit of both sides is %s" % (func,plus))
    else:
        print("Function %s has a jump discontinuity at the point specified" % func)

(感谢this question about inspecting locals