今天我偶然发现了SymPy的一个奇怪的特征。假设我们尝试评估函数的渐近线:
>>from sympy import *
>>
>>x = Symbol("x")
>>N(cot(x),subs={x: 0})
cot(x)
它既不返回NaN,也不返回错误或异常,而是函数本身!
我的问题:
1.我怎样才能自动检测到某个点我偶然发现了一个渐近线(除了在结果上调用type())?
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)