Python符号计算:分析函数的连续性和单调性

文章目录

Python符号计算入门

值域

一般来讲,在一个函数中,表达式、自变量以及定义域都是已知的,而值域则受到表达式和定义域的制约。以函数 x 2 − 3 x 1 ​ x2−3x1​ x23x1​为例,如下图所示

在这里插入图片描述

其绘图代码如下。

import sympy
from sympy.abc import x, y
expr = 1/(x**2 - 3*x)
sympy.plot(expr, xlim=(-5,5), ylim=(-10,10))

 
 

这个函数的定义域被分为三段,而值域被分为两个部分。sympy中提供了值域的求解函数,示例如下

from sympy.calculus.util import function_range
rg = function_range(expr, x, domain=sympy.Reals)
print(rg)
# Union(Interval(-oo, -4/9), Interval.open(0, oo))

 
 

【function_range】即用于求值域的函数,其输入的三个参数分别为表达式、自变量以及定义域。

【sympy.Reals】表示所有实数。

其返回值是两个区间的并集,即 ( − ∞ , − 94 ​ ] ∪ ( 0 , ∞ ) (−∞,−94​]∪(0,∞) (,94​](0,)

【Union】即表示并集,其内部为求并的集合或者区间。

【Interval】正常情况下表示一段闭区间,当然 − ∞ −∞ 本身是开的,所以在返回值中是一个左开右闭的区间。【Interval.open】则是一个开区间。除此之外,Interval还可以进一步定义左右边界,例如【Lopen】生成左侧边界加上开区间,即左闭右开区间;【Ropen】生成左开右闭区间。

连续性和奇点

连续性的严格定义,需要通过极限的语言来描述,对函数 f ( x ) f(x) f(x)而言,若 x = a x=a x=a处连续,则有 l i m x → a ​ f ( x ) = f ( a ) limx→a​f(x)=f(a) limxaf(x)=f(a)

但值得注意的是, x → a x→a xa包含了是从左和从右趋近于 a a a的过程,即要求二者相等。所以,若KaTeX parse error: Unexpected character: '' at position 15: limx→a+​f(x)̲=limx→a−​f(x),则说明此点不连续。

另外一种情况,则是 a a a点根本不存在,此即奇点,即函数没有定义时的点,

仍以函数 f ( x ) = x 2 − 3 x 1 ​ f(x)=x2−3x1​ f(x)=x23x1​为例,其连续区间则被分成三个部分,分别在 x = 0 , x = 3 x=0,x=3 x=0,x=3处中断,而这两点也是奇点。

from sympy import singularities
from sympy.calculus.util import continuous_domain
singularities(expr, x) # 返回 {0, 3}
singularities(expr, x, Interval.Lopen(3,5)) # 返回EmptySet
continuous_domain(expr, x, domain=sympy.Reals)
# Union(Interval.open(-oo, 0), Interval.open(0, 3), Interval.open(3, oo))

 
 

【singularities】即用于查找函数的奇点。

【continuous_domain】则用于获取连续区间。

单调性

单调性是一个非常简单、非常基础的概念,即函数在其定义域内的增减特性。仍以上述函数为例,在 ( ∞ , 0 ) (∞,0) (,0)区间单调递增;在 ( 3 , ∞ ) (3,∞) (3,)内单调递减,在 ( 0 , 3 ) (0,3) (0,3)区间内先增后减。

接下来,分析其在某个区间是否单调递减,代码如下

from sympy import is_decreasing
from sympy import Interval, oo
is_decreasing(expr)  # False
is_decreasing(expr, Interval.open(1.5, 3))    # True
is_decreasing(expr, Interval.Lopen(3, oo), x) # True
is_decreasing(expr, Interval.Ropen(-oo, 1.5)) # False

 
 

【is_decreasing】显然就是单调递减的判定函数,其返回值为True或者False。输入参数有三,分别是目标函数的表达式;定义域范围,默认为全体实数;表达式中的自变量。

sympy.calculus.singularities中,一共定义了4个关于单调性判定的函数,除了is_decreasing外,还有

  • is_increasing
  • is_strictly_decreasing
  • is_strictly_increasing

最值和驻点

如果一段函数,在某个区间内并不单调,那么一定有一个先增后减或者先减后增的过程,从而也就自然产生了极大值、极小值点。而且在极值点处,其导数也为0,即为驻点。sympy可以方便地查找这些点。

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

 
 

【maximum, minimum】可以查找函数的最值。

【stationary_points】用于查找驻点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值