掌握了数列的极限,函数的极限就很容易理解。数列是一类特殊的函数,数列的自变量n只能取正整数,自变量变化的过程为趋向于无穷大,如果把数列函数的特殊性抛开,就可以引出函数极限的一般概念。
在函数自变量某个变化过程中,如果对应的函数值无限接近于某个确定的数,那么这个确定的数就叫做这一变化过程中函数的极限。
理解函数自变量的某个变化过程是非常重要的,因为函数自变量的变化过程不同,函数的极限就表现为不同的形式。例如:数列极限看作函数f(n)当n趋向于无穷大的极限,这里自变量的变化过程是n—>∞的极限。
函数的极限主要研究自变量变化过程的两种情形:
(1)自变量x任意地接近于有限值x0或者说趋于有限值x0(记作x->x0)时,对应的函数值f(x)的变化情形;
(2)自变量x的绝对值|x|无限增大,即趋于无穷大(记作x->∞)时,对应的函数值f(x)的变化情形。
先考虑自变量x->x0的变化过程,如果在x->x0的变化过程中,对应的函数值f(x)无限接近于确定的数值A,可以说数值A是函数f(x)当x->x0时的极限。在x趋向于x0的过程中,主要研究x趋向于x0,因此f(x)在x0处是否有定义,与f(x)趋向于x0的极限无关。
可以设想一下,在x->x0的过程中,对应的函数值f(x)无限接近于A,也就是说f(x)与A的差值可以任意小,f(x)与A的差值可以任意小可以用下面的公式表示:
|f(x)-A|<ε
其中ε是任意给定的正数,在x->x0的过程中,总能找到一些充分接近x0的x对应的函数值f(x)满足不等式|f(x)-A|<ε,这些变量x的范围可表示为:
0<|x-x0|<δ
其中δ是某个正数,该数体现了x与x0的接近程度,当x的取值范围落在0<|x-x0|<δ区域内时,对应的函数值f(x)都会满足不等式:
|f(x)-A|<ε
0<|x-x0|<δ也可以表示为ù(x0,δ),即x0去心的δ领域。由此,可以给出函数极限的定义:
设函数f(x)在点x0的某一去心领域内有定义,对于任意给定的正数ε(不论它多么小),总存在正数δ,使得对于适合不等式0<|x-x0|<δ的一切x,对应的函数值f(x)都满足不等式
|f(x)-A|<ε
那么,常数A就叫做函数f(x)当x->x0时的极限。
例1 函数f(x)=1/x,当x->x0(x0=0.4)时极限为2.5(A=2.5,若函数是连续函数,x->0.4时极限就是x为0.4的函数值),取ε=0.8,找到x0=0.4的去心δ领域ù(x0,δ),在x->x0(x0=0.4)变化过程中,若x∈ù(x0,δ),对应的函数值f(x)都满足不等式:
|f(x)-2.5|<0.8
案例代码见课程资源(unit1/case19.py)
import numpy as np
import matplotlib.pyplot as plt
import math
# 导入ticker类,设置轴刻度值
import matplotlib.ticker as mtick
from matplotlib.ticker import MultipleLocator, FormatStrFormatter
# 返回函数1/x数据
def get_data():
# 创建20个函数数据点
x = np.linspace(0.1,1.0,50)
# 计算y数据
y = 1/x
# 返回x,y数据
return (x,y)
# 返回x->x0时,以极限值A为y坐标的直线数据
def get_limit_data(x0):
x = np.linspace(0.1,1.0,50)
limit = 1/x0
y = [limit for x in range(50)]
return (x,y)
# 返回曲线与直线的交点坐标
def intersection(a1,a2,ax):
for i,y1 in enumerate(a1):
for y2 in a2:
if math.fabs(y1 - y2) < 0.1:
return (ax[i],a2[i])
return 0
# 程序入口
if __name__ == '__main__':
# 获取曲线数据
x,y = get_data()
# 设置Y轴刻度显示格式
fig, ax = plt.subplots()
yticks = mtick.FormatStrFormatter('%.2f')
ax.yaxis.set_major_formatter(yticks)
yticks_value = MultipleLocator(0.5)
xticks_value = MultipleLocator(0.08)
ax.yaxis.set_major_locator(yticks_value)
ax.xaxis.set_major_locator(xticks_value)
# 绘制曲线
plt.plot(x,y,color='b',linestyle='-')
# 获取x->0.4时,以极限值A为y坐标的直线数据
# 若函数连续,极限值就是极限x对应的函数值
x1,y1 = get_limit_data(0.4)
# 绘制以极限值A为y坐标的直线
plt.plot(x1,y1,color='r',linestyle='-',label='A')
# 设置为ε为0.8,用k表示ε
k = 0.8
# A+ε
up = np.array(y1)+k
# A-ε
bottom = np.array(y1)- k
# 绘制A+ε直线
plt.plot(x1,up,color='y',linestyle='--',label='A+ε')
# 绘制A-ε直线
plt.plot(x1,bottom,color='m',linestyle='--',label='A-ε')
'''
绘制x=0.4的去心领域
在x->0.4变化过程中,若x进入该领域
所有的函数都满足不等式
|f(x)-2.5|<0.8
'''
# 计算曲线与A+ε直线的交点
ax1,ay1 = intersection(y,up,x1)
# 计算曲线与A-ε直线的交点
ax2,ay2 = intersection(y,bottom,x1)
# 计算曲线与A直线的交点
iax1,iay1 = intersection(y,y1,x1)
# 在ax1和iax1之间均匀创建30个数据点
ax_data = np.linspace(ax1,iax1,30)
# 填充由ax_data、ay1,ay2构成的矩形区域
plt.fill_between(ax_data,ay1,ay2,color='blue', alpha=0.5)
# 在iax1和ax2之间均匀创建30个数据点
print(math.fabs(iax1-ax1))
ax_data = np.linspace(iax1,iax1+math.fabs(iax1-ax1),30)
# 填充由ax_data、ay1,ay2构成的矩形区域
plt.fill_between(ax_data,ay1,ay2,color='m', alpha=0.5)
# 绘制曲线与A直线的交点
plt.scatter(iax1,iay1,c='w',marker='o')
plt.legend()
plt.show()
程序绘制的图形如下:

图中蓝色曲线是f(x)=1/x函数图像,红色直线是x—>0.4时以极限值A(A =2.5)为Y坐标的直线,A直线上方的虚直线为A+ε(ε=0.8),A直线下方的虚直线为A-ε。
观察图像发现,δ约为0.1,x0=0.4的去心δ领域为ù(0.4,0.1),即x进入区间[0.3,0.4)和区间(0.4,0.5]时,x对应的函数值满足不等式:
|f(x)-2.5|<0.8
此时函数的图像在A+ε和A-ε之间,数值2.5即为f(x)=1/x,当x->0.4时的极限。
从图中还可以观察到,只要x进入区间[0.3,0.4)和区间(0.4,0.56]时,x对应的函数值就满足不等式:
|f(x)-2.5|<0.8
实际上,只要x进入曲线与A+ε和A-ε交点之间的区间(x=x0)除外,x对应的函数值都满足不等式:
|f(x)-2.5|<0.8
x趋向于x0的极限研究的是x0的去心领域,我们只关注进入x0去心领域的x值和函数值就可以了。
从图中还可以观察到,当x趋向于x0时,x有两个方向趋向于x0:一个方向是x从x0的左侧趋向于x0,当x进入蓝色填充区域时,x对应的所有函数值都满足上面的不等式,x0称为函数x->x0时的左极限;一个方向是x从x0的右侧趋向于x0,当x进入粉紫色填充区域时,x对应的所有函数值都满足上面的不等式,x0称为函数x->x0时的右极限,只有左右极限相等时,x->x0时的极限值才会存在。
再考虑自变量x的绝对值|x|无限增大,即趋于无穷大(记作x->∞)时,对应的函数值f(x)的变化情形。自变量x的绝对值|x|趋于无穷大时,同数列的极限类似,但有两个重要的不同之处:(1)数列的自变量n只能取正整数,函数的自变量x可以取任意实数;(2)数列的自变量n只能趋向于正无穷大,函数的自变量x可以趋向正无穷大,也可以趋向负无穷大。