文章目录
- 单调性和奇异性
- 连续性、极值、周期、不动点
单调性和奇异性
sympy.calculus.singularities
提供了4个关于单调性判定的函数,分别是
is_decreasing(expr, interval, symbol=None)
is_increasing(expr, interval, symbol=None)
is_strictly_decreasing(expr, interval, symbol=None)
is_strictly_increasing(expr, interval, symbol=None)
expr
为目标函数的表达式;interval
为判定的定义域范围,默认是全
体实数;symbol
为表达式中的自变量,默认为None
。
下面以is_decreasing
为例,查看一下
1
x
2
−
3
x
\frac{1}{x^2-3x}
x2−3x1的单调性
import sympy
from sympy import is_decreasing
from sympy import Interval, oo
from sympy.abc import x, y
expr = 1/(x**2 - 3*x)
is_decreasing(expr) # False
is_decreasing(expr, Interval.open(1.5, 3)) # True
is_decreasing(expr, Interval.Lopen(3, oo)) # True
is_decreasing(expr, Interval.Ropen(-oo, 1.5)) # False
# 绘制函数图像
sympy.plot(expr, xlim=(-5,5), ylim=(-10,10))
图像如下
从图像中可以看到,当
x
∈
{
0
,
3
}
x\in\{0,3\}
x∈{0,3}时存在奇点。sympy
中,通过函数singularities
可以查找函数的奇点
from sympy import singularities
singularities(expr, x) # 返回 {0, 3}
singularities(expr, x, Interval.Lopen(3,5)) # 返回EmptySet
函数monotonicity_helper
可以判定单调性,而不管其递增或递减。
monotonicity_helper(expr, predicate, interval=Reals, symbol=None)
连续性、极值、周期、不动点
sympy.calculus.util
中提供了一系列关于连续性、极值、周期性、不动点的判定函数
continuous_domain
用于获取连续区间,function_range
返回函数值域,示例如下
>>> from sympy.calculus.util import function_range, continuous_domain
>>> function_range(expr, x, domain=sympy.Reals)
Union(Interval(-oo, -4/9), Interval.open(0, oo))
>>> continuous_domain(expr, x, domain=sympy.Reals)
Union(Interval.open(-oo, 0), Interval.open(0, 3), Interval.open(3, oo))
结合图像以及表达式可知,函数
f
(
x
)
=
1
x
2
−
3
x
f(x)=\frac{1}{x^2-3x}
f(x)=x2−3x1值域的确被分为两个部分,正式function_range
返回的
(
−
∞
,
−
9
4
)
∪
(
0
,
+
∞
)
(-\infty,-\frac{9}{4})\cup(0,+\infty)
(−∞,−49)∪(0,+∞);而其连续区间则被分成三个部分,分别在
x
=
0
,
x
=
3
x=0, x=3
x=0,x=3处中断。
函数maximum, minimum
可以查找函数的最值,stationary_points
可查找驻点,就是导数为0的店,这三个函数的domain
均默认为Reals
。
>>> from sympy.calculus.util import maximum, minimum, stationary_points
>>> maximum(expr, x)
oo
>>> minimum(expr, x)
-oo
>>> stationary_points(expr, x)
{3/2}
>>> minimum(x**2+2*x, x)
-1