Python 有没有一种简单的方法可以得到某个域中函数的所有不连续性?

Python 有没有一种简单的方法可以得到某个域中函数的所有不连续性?,python,python-3.x,math,sympy,Python,Python 3.x,Math,Sympy,给定一个辛表达式,有没有办法找到给定区间内的所有间断点?例如,给定从-2到2的1/(x^2-1),它将返回-1和1。它不一定是象征性的。对于我来说,一个数值解可能更有效。我认为在Symphy中没有任何具体的方法可以做到这一点;这可能很难做到完全通用性(即对于任何可能的函数,在任何数量的变量中,包括那些具有的变量) 如果你在一个实变量中使用相对简单的表达式,比如你问题中的例子,那么一种方法可能是将表达式计算为两个表达式的比率,然后求解分母表达式 >>> expr 1/(x**2

给定一个辛表达式,有没有办法找到给定区间内的所有间断点?例如,给定从-2到2的1/(x^2-1),它将返回-1和1。它不一定是象征性的。对于我来说,一个数值解可能更有效。

我认为在Symphy中没有任何具体的方法可以做到这一点;这可能很难做到完全通用性(即对于任何可能的函数,在任何数量的变量中,包括那些具有的变量)

如果你在一个实变量中使用相对简单的表达式,比如你问题中的例子,那么一种方法可能是将表达式计算为两个表达式的比率,然后求解分母表达式

>>> expr
1/(x**2 - 1)
>>> n, d = expr.as_numer_denom()
>>> sympy.solve(d)
[-1, 1]
另一个小例子:

>>> expr2 = 1/(sympy.sin(x)) + 4/(x**2 - 3)
>>> expr2
1/sin(x) + 4/(x - 3)
>>> n, d = expr2.as_numer_denom()
>>> sympy.solve(d)
[0, -sqrt(3), sqrt(3), pi]

显然,在这种情况下,Symphy并没有将pi的每一个倍数都列为一个解决方案;您必须处理该列表以生成所需域中的解决方案。

您可以使用
奇点
模块进行此操作

In [ ]: from sympy import *  
In [ ]: init_printing()
In [ ]: x = symbols('x')
In [ ]: singularities(1/(x**2 - 1), x)
Out[ ]: (-1, 1) # A tuple of SymPy objects

参考资料:

这看起来很有希望。。。它似乎被简单地实现为
元组(排序(solve(simplify(1/expr),sym))
,这与我在回答中使用的方法基本相同。但是,它只适用于一类非常有限的函数(例如,它不处理任何像我的
expr2
示例那样的三角函数),因此它看起来是一项正在进行的工作。@ajcr是的。就像你说的,它正在开发中。它目前适用于单变量、实有理函数。