Python 辛渐近线怪癖及其克服方法

Python 辛渐近线怪癖及其克服方法,python,sympy,Python,Sympy,今天我偶然发现了一个奇怪的同情的特征。假设我们尝试在函数的渐近线处求值: >>from sympy import * >> >>x = Symbol("x") >>N(cot(x),subs={x: 0}) cot(x) 它既不返回NaN,也不返回错误或异常,而是返回函数本身 我的问题: 1.我如何能够自动检测到,在某一点上,我偶然发现了一条渐近线(除了对结果调用type()之外) 2.此设计决策背后的动机是什么?要回答问题1,您可以自动尝试将结

今天我偶然发现了一个奇怪的同情的特征。假设我们尝试在函数的渐近线处求值:

>>from sympy import *
>>
>>x = Symbol("x")
>>N(cot(x),subs={x: 0})
cot(x)
它既不返回NaN,也不返回错误或异常,而是返回函数本身
我的问题:
1.我如何能够自动检测到,在某一点上,我偶然发现了一条渐近线(除了对结果调用type()之外)

2.此设计决策背后的动机是什么?

要回答问题1,您可以自动尝试将结果设置为
浮点()
,如下所示:

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)

(由于)

在表达式上使用
subs
,而不是作为
N
的参数:

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

这很可能是Symphy中的一个错误

您是否应该使用
极限(cot(x),x,0,“+”)
极限(cot(x),x,0,“-”)
来测试渐近线?事实上,我想要的值和生成点的方式让我遇到了这个问题。当然,从两个方面测试极限是我可以避免这种情况的一种选择。我将添加一些东西,给出出现不连续的值。这看起来是
evalf
中的一个错误。已将此报告给问题跟踪者。感谢您的报告。你介意发布一个关于github问题的链接吗?我在一篇关于evalf/subs的文章中添加了一条评论。