📑 查看全课大纲(第 5 / 93 节)
- 1.概论和集合的定义
- 2.逼疯康托的实数集理论
- 3.常用不等式与映射
- 4.函数及特殊函数
- 5.序列极限的定义
- 6.序列极限的性质与夹逼定理
- 7.重要极限
- 8.无穷小量,无穷大量和一组重要的阶的比较关系
- 9.聚点原理
- 10.函数极限及其性质
- 11.重要极限与等价无穷小
- 12.连续函数
- 13.导数的概念(那些年,扛起牛顿的胡克)
- 14.定义法求导
- 15.函数四则运算的导数与反函数求导法则
- 16.复合函数,隐函数,参数式求导
- 17.不定式求导之“洛必达与伯努利的师生情”
- 18.一阶微分
- 19.高阶导数
- 20.高阶微分
- 21.罗尔中值定理与拉格朗日中值定理
- 22.柯西空降科学院遭排挤
- 23.泰勒公式与泰勒的克妻属性
- 24.利用泰勒展开唯一性定理计算泰勒展开
- 25.泰勒公式的余项估计
- 26.极值问题与导数
- 27.函数凹凸性
- 28.无卵用的渐近线与函数作图
- 29.不定积分的定义
- 30.第一换元法
- 31.第二换元法
- 32.分部积分法
- 33.有理式积分
- 34.三角替换
- 35.定积分的概念
- 36.定积分的性质与积分中值定理
- 37.变上限定积分
- 38.微积分基本定理之“高斯教你如何优雅地装逼”
- 39.定积分的换元法
- 40.奇偶函数与周期函数的定积分
- 41.曲线求长与不可求长曲线(海岸线居然算不出长度?)
- 42.旋转体体积
- 43.旋转体侧面积
- 44.极坐标下图形的面积(数学系常用表白曲线)
- 45.欧式空间
- 46.点列极限,开集与闭集
- 47.多元函数的定义
- 48.多元函数的极限
- 49.多元连续函数
- 50.一阶偏导数
- 51.高阶偏导数
- 52.全微分
- 53.方向导数与梯度
- 54.链式法则
- 55.一阶全微分形式的不变性与高阶微分
- 56.多元函数的泰勒公式
- 57.隐函数存在定理与逆映射存在定理
- 58.多元函数的极值
- 59.矩阵基础知识
- 60.行列式的定义与特殊矩阵的行列式
- 61.行列式的性质
- 62.行列式按k行展开
- 63.线性方程组初步与高斯消元法
- 64.齐次线性方程组与Cramer法则
- 65.线性空间
- 66.线性相关与线性无关
- 67.向量组的秩
- 68.矩阵的秩与线性方程组有解的充要条件
- 69.齐次线性方程组的解集结构
- 70.非齐次线性方程组解集结构
- 71.基与维数
- 72.矩阵的乘法
- 73.特殊矩阵
- 74.矩阵乘积的秩与行列式
- 75.矩阵的逆
- 76.正交矩阵
- 77.矩阵对角化与特征值特征向量
- 78.实对称矩阵对角化
- 79.二次型与正定矩阵
- 80.LU分解
- 81.Cholesky分解
- 82.SVD分解
- 83.线搜索
- 84.步长
- 85.最速下降法和牛顿法
- 86.共轭梯度法
- 87.拟牛顿法
- 88.无约束优化
- 89.若干知识点补充(一)
- 90.若干知识点补充(二)
- 91.凸优化问题
- 92.对偶问题(一)
- 93.对偶问题(二)
序列极限的定义
约 26 分钟
序列极限的定义
小象实战讲义 · 人工智能数学基础
在人工智能的数学世界中,我们常常需要分析数据序列的长期行为,例如梯度下降法中迭代点的变化趋势、递归神经网络中隐藏状态的演化,或是蒙特卡洛模拟中样本均值的收敛性。本节将引入微积分中最基础、最核心的概念之一——序列的极限。掌握其精确定义(ε-N语言)是理解后续连续性、导数、积分乃至整个分析学大厦的基石。学完本节,你将能够严格判断一个序列是否收敛,并运用定义进行简单的极限证明。
💡 核心导读
本节将为你构建以下知识地图:
- 序列的两种视角:理解序列既可以看作按顺序排列的一列数,也可以视为定义在自然数集上的特殊函数。
- 极限的直观描述:通过几何图形,直观感受“当项数无限增大时,序列项无限接近某个常数”这一核心思想。
- 极限的严格定义(ε-N语言):学习用精确的数学语言(任意性、存在性)来刻画“无限接近”与“无限增大”,这是本节的重中之重。
- 收敛与发散的逻辑关系:掌握如何用ε-N语言描述序列收敛,并推导出其对立面——发散的定义。
- 定义的应用与证明技巧:通过典型例题,学习如何利用ε-N定义证明极限,并掌握“放大法”等实用技巧。
从直观到严格:极限思想的演进
序列,或称数列,是我们从高中就熟悉的概念。它是一列按照一定顺序排列的数: 现在我们学习了函数,可以从更高视角看待它:序列是定义域为自然数集 ,值域为实数集 的函数。即 ,其中 。因此,序列可以看作是函数在离散点(自然数)上的取值。
描述序列通常有两种方法:
- 通项公式法:能显式写出第 项与 的关系,如 。
- 描述法:对于无法写出简洁通项的序列,直接描述其构成规律,如 的近似值序列:3, 3.1, 3.14, 3.141, …
我们来考察几个序列的长期行为:
- 。从函数 的图像上看, 是其在 处的取值。当 无限增大时, 无限接近于0。因此,直观上,当 无限增大(记作 )时, 无限接近于0。
- 。这是一个交错序列,其奇数项为负,偶数项为正。但其绝对值 ,因此当 时,它同样“无限接近”于0。
- 。由于对于所有 ,都有 ,且 ,因此 也被“挤压”着趋向于0。
上述例子中,我们反复使用了“无限增大”和“无限接近”这两个描述性的语言。然而,什么是“无限”?如何精确刻画“任意接近”?早期微积分的创立者(如牛顿)也未能给出严格定义,这曾引发诸多争议。直到19世纪,数学家柯西(Cauchy)和魏尔斯特拉斯(Weierstrass)等人建立了一套严谨的数学语言,才彻底解决了这个问题。
ε-N语言:极限的严格定义
序列极限的严格定义,是微积分乃至整个分析学最重要的定义之一。它用精确的量化语言,取代了模糊的“无限”。
定义(序列的极限):设 是一个实数序列。如果存在一个常数 ,使得对于任意给定的正数 (无论它多么小),总存在一个正整数 ,使得当 时,不等式 恒成立,则称常数 是序列 的极限,或称序列 收敛于 。记作 如果不存在这样的常数 ,则称序列 是发散的。
这套表述被称为 “ε-N 语言”。让我们拆解其中的逻辑:
- “任意 ”:这刻画了“无限接近”或“任意接近”。 可以想象为目标 周围的一个误差容忍范围。要求对于任意小的误差范围,序列项最终都能落进去。
- “存在 ”:这刻画了“从某项开始”或“最终”。 通常依赖于 的选择( 越小,所需的 通常越大)。
- “当 时,有 ”:这意味着从第 项开始,序列所有的项 都落在区间 之内。
几何解释:在数轴上,区间 称为点 的 -邻域。定义表明:无论这个邻域半径 多小,序列中从某一项(第 项)之后的所有项,都密密麻麻地分布在这个邻域内。换言之,在 的任意小邻域之外,序列最多只有有限项(前 项)。
发散的定义:根据逻辑否定的规则,收敛定义的否定即为发散。
序列 发散,当且仅当:对于任意的常数 ,都存在某个 ,使得对于任意的正整数 ,总存在一个 ,满足 。 这意味着,找不到任何一个点 ,能让序列“最终”无限接近它。
运用定义证明极限
用 ε-N 定义证明极限的核心步骤是:对于任意给定的 ,构造出符合条件的正整数 (通常表示为 )。
例1:证明 。
证明:对于任意 ,我们要使 解此不等式:,即 。 取 (这里 表示向下取整),则当 时,必有 ,从而 成立。 因此,由极限定义,。
例2:证明当 时,。
证明:若 ,则 恒成立,结论显然。以下设 。
对于任意 (不妨设 ),要使 两边取自然对数(因函数 单调递增):。 由于 ,故 ,不等式方向不变,解得: 取 ,则当 时,有 。 因此,。
当直接解不等式 比较困难时,一个常用的技巧是放大法。
例3:证明 。
证明:对于任意 ,考察 当 时,(这里进行了放大)。 同时,分母 (这里进行了缩小,使得整个分式放大)。 因此, 现在,令 ,解得 。 取 ,则当 时,有 ,从而原绝对值小于 。 故极限成立。
放大法的逻辑:我们证明了 。由于 是任意的,这足以说明 可以任意小。关键在于放大后的式子要易于求解 ,且放大的过程不能改变其趋于0的本质。
例4:证明当 时,。
证明:。对于任意 ,要使 因为 ,所以 ,绝对值可去掉:,即 。 两边取对数:,故 。 取 ,则当 时,有 。 因此,。
import numpy as np
import matplotlib.pyplot as plt
# 示例:验证极限 lim_{n->∞} (n/(n+1)) = 1 和 lim_{n->∞} (0.5^n) = 0
n = np.arange(1, 101) # 生成1到100的序列
seq1 = n / (n + 1) # 序列 x_n = n/(n+1)
seq2 = 0.5 ** n # 序列 x_n = 0.5^n
# 计算它们与极限值的距离
dist_to_limit1 = np.abs(seq1 - 1)
dist_to_limit2 = np.abs(seq2 - 0)
# 可视化
fig, axes = plt.subplots(1, 2, figsize=(12, 4))
# 子图1:序列本身及其极限
axes[0].plot(n, seq1, 'b-', label=r'<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>x</mi><mi>n</mi></msub><mo>=</mo><mi>n</mi><mi mathvariant="normal">/</mi><mo stretchy="false">(</mo><mi>n</mi><mo>+</mo><mn>1</mn><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">x_n = n/(n+1)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal">n</span><span class="mord">/</span><span class="mopen">(</span><span class="mord mathnormal">n</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">1</span><span class="mclose">)</span></span></span></span>', alpha=0.7)
axes[0].axhline(y=1, color='r', linestyle='--', label='极限 l=1')
axes[0].set_xlabel('n')
axes[0].set_ylabel('<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>x</mi><mi>n</mi></msub></mrow><annotation encoding="application/x-tex">x_n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.5806em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>')
axes[0].set_title('序列收敛过程示例 (1)')
axes[0].legend()
axes[0].grid(True, alpha=0.3)
# 子图2:距离随n的变化,体现ε-N思想
axes[1].semilogy(n, dist_to_limit2, 'g-', label=r'<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">∣</mi><msup><mn>0.5</mn><mi>n</mi></msup><mo>−</mo><mn>0</mn><mi mathvariant="normal">∣</mi></mrow><annotation encoding="application/x-tex">|0.5^n - 0|</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣0.</span><span class="mord"><span class="mord">5</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.6644em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">0∣</span></span></span></span>', alpha=0.7) # 对数坐标更清晰
axes[1].axhline(y=0.01, color='orange', linestyle=':', label=r'<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>ε</mi><mo>=</mo><mn>0.01</mn></mrow><annotation encoding="application/x-tex">\varepsilon = 0.01</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.4306em;"></span><span class="mord mathnormal">ε</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.6444em;"></span><span class="mord">0.01</span></span></span></span>')
# 找出第一个使距离小于0.01的N
N_index = np.where(dist_to_limit2 < 0.01)[0]
if len(N_index) > 0:
N_val = N_index[0] + 1 # 因为n从1开始
axes[1].axvline(x=N_val, color='orange', linestyle=':', alpha=0.5, label=f'N ≈ {N_val}')
axes[1].set_xlabel('n')
axes[1].set_ylabel('<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">∣</mi><msub><mi>x</mi><mi>n</mi></msub><mo>−</mo><mi>l</mi><mi mathvariant="normal">∣</mi></mrow><annotation encoding="application/x-tex">|x_n - l|</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord">∣</span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.0197em;">l</span><span class="mord">∣</span></span></span></span> (对数尺度)')
axes[1].set_title('ε-N 语言的直观演示 (2)')
axes[1].legend()
axes[1].grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
# 打印数值验证
print(f"当 n=100 时, n/(n+1) = {seq1[-1]:.6f}, 与1的距离为 {dist_to_limit1[-1]:.6e}")
print(f"当 n=100 时, 0.5^n = {seq2[-1]:.6e}, 与0的距离为 {dist_to_limit2[-1]:.6e}")
print(f"对于 ε=0.01, 使 |0.5^n - 0| < ε 成立的最小 N 是 {N_val}")📝 动手练一练
基础题:使用 ε-N 语言证明 。 参考答案: 对于任意 , 。 当 时,,故原式 。 令 ,得 。取 即可。
进阶题:设 。直观判断其极限,并尝试说明为什么直接使用定义证明 时,放大法(利用 )是一个非常有效的策略。 参考答案: 直观判断极限为0。因为分子 有界,而分母 。 证明时,。对于任意 ,令 ,解得 。取 ,则当 时,有 。这里的关键放大是 ,将问题简化为熟悉的 序列。
本章小结
本节我们建立了序列极限的严格数学框架:
- 核心定义:掌握了用 ε-N 语言 精确表述 ,其精髓在于用“任意-存在”逻辑链量化“无限接近”。
- 几何意义:收敛意味着序列的项最终会落入极限点 的任意小邻域内,且在该邻域外只有有限项。
- 证明方法:学习了用定义证明极限的标准流程:① 对任意 ;② 分析 ;③ 通过解不等式或放大法,找到对应的 ;④ 下结论。
- 逻辑关系:明确了收敛与发散是互斥的,并了解了发散定义的逻辑否定形式。
行动清单:
- 口头复述:尝试不看书,用自己的话复述一遍“序列收敛于 的 ε-N 定义”,确保理解“任意 ”、“存在 ”、“当 时”三者之间的逻辑关系。
- 动笔证明:独立完成动手练一练中的基础题,并对照答案检查 的构造过程。
- 代码验证:运行讲义中的 Python 代码,改变序列(例如将
0.5改为0.9或2),观察图形变化,直观感受收敛与发散的区别,以及 与 的关系。
— 小象教研组
- 第2章讲义:序列极限(PDF · 3.2MB)下载
领取《小象 11GB VIP 课件资料包与大厂真题手册》
包含全套实战 Jupyter 源码、清洗后数据集、大厂高频面试真题与专属学员答疑交流群。
- ✔完整 Python / 数据分析 Jupyter 实战源码
- ✔大厂真实业务数据集与练习题
- ✔微信扫码添加课程顾问,免费获取网盘下载链接
微信扫码添加顾问