有没有一种简单的方法可以通过 sympy 获取某个域中函数的所有不连续性?

Is there a simple way to get all discontinuities of a function in a certain domain with sympy?

给定一个 sympy 表达式,有没有办法找到给定区间内的所有不连续点?例如,给定 1/(x^2-1) 从 -2 到 2,它将 return -1 和 1。它不一定是符号。数值解实际上可能更适合我的目的。

我不认为 SymPy 中有任何特定的方法可以做到这一点;可能很难做到完全通用(即对于任何可能的功能,在任何变量的数量,包括带有 infinite discontinuities).

的变量

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

>>> 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]

显然,在这种情况下,SymPy 不会将 pi 的每个倍数都列为解决方案;您必须处理该列表以生成位于您所需域中的解决方案。

您可以为此使用 singularities 模块。

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

参考:http://docs.sympy.org/latest/modules/calculus/index.html#sympy.calculus.singularities.singularities