跳至内容

极小值与极大值:如何寻找并解读极值点

了解极小值与极大值的含义、局部与全局极值的差异,以及如何利用临界点、一阶与二阶导数检验和闭区间法来找到它们。
更新 2026年8月13日  · 11分钟

用 AI 探索

ChatGPTClaudePerplexity

每当一家公司通过定价追求最佳利润率,或一个模型通过调整权重来降低预测误差,其背后运行的都是同一道微积分题:找到函数的最大或最小值。这正是极小值与极大值的核心——那些告诉您函数达到极端取值的峰与谷。

本文将从极值的真正含义讲起,区分局部行为与全局行为,讲解如何用导数来寻找极值,并回到为何这些内容对优化与数据科学至关重要。如果您想在此基础上进行动手实践,我们的Python 优化入门课程涵盖了计算实现部分。

什么是极小值与极大值?

一个极小值是函数能够达到的最低取值;一个极大值是最高取值。二者合称为极值(单数:extremum)。在图像上,它们正如您所想:山谷的最低点与山峰的最高点。

从一开始就值得分清的一点是:极值是函数值(y 坐标),而其出现的位置是x 值。例如,“最大值在 x = 3 处”和“最大函数值为 f(3) = 10”并不相同。这个区别比您想的更容易让人犯错,它经常出现在考试题与面试题中。

并非每个函数都有极小值和极大值。直线二者皆无;开口向上的抛物线有极小值但没有极大值;定义在开区间上的函数可能逼近极值却永远达不到。极值并非必然存在;它取决于函数的形状以及您所考虑的定义域。

局部与全局的极小值和极大值

在寻找极值之前,有一个贯穿后文的区分值得先说清:哪些极值在局部上重要,哪些在全局上重要。这是优化中最具实践意义的概念之一,也是在此最容易让人困惑的地方。

差别归根结底在于“范围”。局部极值只关注某点附近的小邻域;全局极值则考虑整个定义域。

局部极小与局部极大

一个局部极小值是在该点处函数值小于周围所有值。您处于一个山谷的底部,即便图上别处还有更深的谷。同理,局部极大值是比其周围更高的峰,即使远处可能有更高的峰。

想象一条起伏的徒步小径。每个山头都是一个局部极大值,每个山头之间的低洼都是一个局部极小值。识别它们无需看见整条路线;只要与眼前附近比较即可。

全局极小与全局极大

一个全局极小值(也称绝对极小值)是函数在整个定义域上取得的单一最小取值。全局极大值(或绝对极大值)是全域内的单一最大取值。全局极值总是局部极值,但反之不然。

在同一条徒步路线中,全局极大值是整段路线的最高点,而非附近最高的山头。一个函数可以有许多局部极值,但至多只有一个全局最小值与一个全局最大值(尽管这些取值可能在多个点处取得)。

这种局部与全局的区分并非只存在于理论中。它直接体现在机器学习里——当寻找全局极小值时,梯度下降可能会困在局部极小值处。后文还会提到。

如何寻找极小值与极大值

寻找极值遵循一套一致的流程。您实质上在问:函数在哪些地方由增转减,或由减转增?导数正是精确回答这一问题的工具。

一般步骤如下:

  1. 计算一阶导数 f'(x)。
  2. 求出临界点,即 f'(x) = 0 或 f'(x) 不存在的点。
  3. 将每个临界点分类为局部极小、局部极大或都不是。
  4. 若在闭区间上求解,也要检查端点。
  5. 比较所有候选取值,找出绝对极值。

为具体起见,我们将始终使用同一函数:f(x) = 2x³ − 9x² + 12x − 4,定义在区间 [0, 4] 上。

临界点与极值

函数 f(x) 的一个临界点,是定义域内满足 f'(x) = 0 或 f'(x) 不存在的 x 值。这些点是极值的候选处,即函数可能改变方向的位置。

为何极值会出现在临界点?在一个光滑的峰或谷处,切线是水平的,因而导数为零。但并非每个临界点都是极值,这一点很重要。经典反例是 f(x) = x³ 在 x = 0:导数为零,但函数并未改变方向,只是短暂停平后继续上升。导数不存在的点也需关注。像 f(x) = |x| 在 x = 0 的尖点没有导数,但那正是极小值所在。

在我们的示例中,f'(x) = 6x² − 18x + 12 = 6(x² − 3x + 2) = 6(x − 1)(x − 2)。令其为零得到临界点 x = 1 与 x = 2。接下来要判断各自的性质。

如何使用一阶导数检验

一阶导数检验通过考察 f'(x) 是否变号来给临界点分类。若函数由增转减,则处于峰顶;若由减转增,则处于谷底。

由正到负

当 f'(x) 穿过某个临界点时由正变负,该点为局部极大值。函数先上升至此后又下降。

由负到正

当 f'(x) 由负变正,说明函数先下降后开始上升。该临界点为局部极小值

不变号

若 f'(x) 在两侧都保持同号(始终为正或始终为负),该临界点既不是极小也不是极大。函数只是短暂停顿而未反向,例如 f(x) = x³ 在 x = 0。

对我们的函数,来测试 x = 1 与 x = 2 附近的区间。取测试点:f'(0.5) = 6(0.5 − 1)(0.5 − 2) = 6(−0.5)(−1.5) = 4.5 > 0,f'(1.5) = 6(0.5)(−0.5) = −1.5 < 0,f'(3) = 6(2)(1) = 12 > 0。在 x = 1 处,导数由正变负:局部极大;在 x = 2 处,由负变正:局部极小。相应函数值为 f(1) = 1,f(2) = 0。

一阶导数检验总是有效,但需要在各区间选取测试点,操作起来很快会变得繁琐。在满足特定条件时有更快的方法。

如何使用二阶导数检验

当在临界点处 f''(x) ≠ 0 时,二阶导数检验适用。无需跨区间检查变号,只需在临界点直接计算二阶导数。

其思想与凹凸性相关:若 f''(c) > 0,函数在 c 处上凸,形如碗口向上,临界点位于底部:为局部极小值;若 f''(c) < 0,函数下凸,形如山丘,临界点位于顶部:为局部极大值。若 f''(c) = 0,则检验无结论,需要回到一阶导数检验。

对于我们的函数,f''(x) = 12x − 18。在 x = 1:f''(1) = 12 − 18 = −6 < 0,确认为局部极大;在 x = 2:f''(2) = 24 − 18 = 6 > 0,确认为局部极小。与先前结论一致,但更为迅速。二阶导数检验并非总能奏效(在拐点及某些退化临界点会失效),但能用时可节省时间。

如何在区间上寻找绝对极小值与极大值

当您在闭区间 [a, b] 上处理连续函数时,极值定理保证绝对极大值与绝对极小值都存在。您的搜索不会徒劳。

该方法称为闭区间法

  1. 找出区间 (a, b) 内的所有临界点。
  2. 在每个临界点处计算 f(x)。
  3. 在两个端点 a 与 b 处计算 f(x)。
  4. 最大者为绝对极大值;最小者为绝对极小值。

对 f(x) = 2x³ − 9x² + 12x − 4 于 [0, 4],我们已知临界点为 x = 1 与 x = 2。对所有关键位置求值:

f(0) = -4

f(1) = 2 - 9 + 12 - 4 = 1

f(2) = 16 - 36 + 24 - 4 = 0

f(4) = 128 - 144 + 48 - 4 = 28

绝对极小值为 f(0) = −4,绝对极大值为 f(4) = 28。注意绝对极大值出现在端点而非临界点。这正是为何不能忽略端点检查,也是人们最常犯的错误之一。我们将在错误小结中谈到这一点。

截至目前的内容适用于单变量函数。大多数现实问题涉及多变量,因此也值得看看如何推广。

多元函数的极小值与极大值

对于函数 f(x, y),通过令两个偏导数同时为零来寻找临界点:∂f/∂x = 0 与 ∂f/∂y = 0。此时临界点是一个二元组 (x, y),而非单一数值。分类更棘手,因为出现了新的可能性:鞍点,即函数在一个方向上向上弯,在另一个方向上向下弯。想象品客薯片中央的形状。

要对多元临界点进行分类,需要使用海森矩阵(Hessian),即由二阶偏导数组成的方阵。其行列式以及元素的符号能告诉您当前处于局部极小、局部极大还是鞍点。我们的海森矩阵教程将更深入讲解其机制,并展示其与高维曲率的关联。

优化与机器学习中的极小值与极大值

如果您接触过机器学习,其实已经在解决极小化问题了。训练模型意味着最小化一个损失函数,而损失函数本质上也是具有极小值与极大值的函数。

梯度下降是这里的主力方法。它在当前参数处计算损失函数的导数(或在多维情形下的梯度),然后沿着能使损失减少的方向迈进一步。即在损失曲面上“下山”,寻找极小值。我们的机器学习中的梯度下降教程涵盖了完整算法。

这时,局部与全局的区别就变成了工程上的现实问题。对于非凸损失函数(大多数神经网络如此),梯度下降可能会陷入局部极小值而非找到全局极小值。学习率调度、动量、随机梯度下降等技术有助于算法摆脱浅层局部极小值,尽管在非凸问题中保证找到全局极小值仍是一个未解难题。我们的成本函数教程解释了这些目标函数如何构建,以及其形状为何重要。

寻找极值的常见错误

认为每个临界点都是极值

并非每个临界点都会产生极小或极大。像 f(x) = x³ 在 x = 0 这样的拐点,虽然 f'(x) = 0,却没有方向改变。务必使用导数检验进行验证。

混淆局部与全局极值

局部极小仅是某一邻域内的最低点。全局极小可能完全在别处,或在端点。找出一个局部极值后不要就此停下。

忽略端点

在闭区间上,绝对极值可能出现在边界。我们示例中的绝对极大值在 x = 4,而非任一临界点。忽略端点是优化题中最常见的错误之一,我敢说它造成的丢分比任何概念性误解都多。

认为二阶导为零就一定没有极值

当 f''(c) = 0 时,二阶导数检验是无结论的。这并不意味着该点不是极值。考虑 f(x) = x⁴ 在 x = 0:f''(0) = 0,但 x = 0 显然是极小值。二阶导失效时请使用一阶导数检验。

混淆极值点与极值取值

极值的取值是 f(c),而非 c 本身。把“极小值是 x = 2”当成“极小函数值是 f(2) = 0”会把输入和输出混为一谈。报告与试卷答案需要的是函数值,而不仅是位置。

结语

关于这一主题,常见的教学版本止步于“找到导数为零的点”。许多入门课程确实如此,这让学生对实践中真正重要的部分准备不足:区分您找到的是局部极小值还是全局极小值,并理解在不同任务下这两者有天壤之别。

这里的微积分很精炼:临界点、导数检验、端点检查。更花时间去内化的是背后的几何直觉:为何凹凸性决定极小值的形状,为什么端点可能胜过临界点,为什么在神经网络中进行的梯度下降,确实是在一个可能拥有成千上万局部极小值的曲面上寻找极小值。

在实现层面,我们的Python 优化入门课程将使用 SciPy 与 SymPy 从计算角度解决这些问题。在那里,微积分与代码的连接将变得具体可感。


Vinod Chugani's photo
Author
Vinod Chugani
LinkedIn

Vinod Chugani 的职业生涯始于东京,曾任摩根大通最年轻的对冲基金销售台负责人,随后在雷曼兄弟创下个人销售纪录,之后又打造了覆盖 30 个国家的电子分销业务,营收突破 1 亿新元,随后转向数据领域。他毕业于杜克大学经济学专业,亦为 NYC Data Science Academy 校友,并在 100 多名申请者中成为Hugo Bowne-Anderson 在 Maven 开设的 “Building AI Applications” 课程的三位奖学金获得者之一。目前,他为 DataCamp、KDnuggets、Machine Learning Mastery 和 Statology 撰稿,内容涵盖从统计学到代理式 AI 等主题,并在 NYC Data Science Academy 指导数据从业者,已完成超过 1,000 场一对一辅导。

 

FAQs

极小值与极大值有什么区别?

极小值是函数在某一点处达到的最低取值,极大值是最高取值。它们合称为极值。函数可以有多个局部极小与局部极大,但全局(绝对)极小值是在整个定义域上的单一最低取值,而全局极大值是单一最高取值。

如何求一个函数的极小值与极大值?

先求一阶导数,将其设为零并解出 x,得到临界点。随后使用一阶导数检验(检查变号)或二阶导数检验(在每个临界点计算 f''(x))将其分类为极小、极大或都不是。若在闭区间上,还需在端点处计算函数值。

局部极值与全局极值有何不同?

局部极值是在某点附近小邻域内的最高或最低取值;全局(绝对)极值是在函数整个定义域上的最高或最低取值。每个全局极值也都是局部极值,但多数局部极值并非全局极值。

一个函数会有多个全局最小值吗?

一个函数只能有唯一的全局最小取值,但该取值可能在多个点处取得。例如,f(x) = cos(x) 的全局最小值为 −1,它在 x = π、x = 3π、x = −π 等处取得。最小取值是唯一的;其出现的位置未必唯一。

什么是临界点?它总是极值吗?

临界点是指 f'(x) = 0 或 f'(x) 不存在的点。它是极值候选点,但不一定是极值。例如,f(x) = x³ 在 x = 0 处有临界点(因 f'(0) = 0),但这是拐点而非极值——函数在此并未改变方向。

二阶导数检验何时会失效?

当在临界点 c 处 f''(c) = 0 时,二阶导数检验无结论。此时需要使用一阶导数检验或考察高阶导数。经典示例是 f(x) = x⁴,虽然 f'(0) = 0 且 f''(0) = 0,但 x = 0 是极小值。

寻找绝对极值时为何端点很重要?

在闭区间 [a, b] 上,极值定理保证连续函数具有绝对极大值与极小值。它们可能出现在临界点端点。忽略端点可能导致错过真正的绝对极值——这是这类问题中最常见的错误之一。

极小值与极大值在机器学习中如何应用?

训练机器学习模型就是一个优化问题:您要最小化损失函数(或等价地最大化某个性能指标)。梯度下降及其变体通过迭代地沿负梯度方向前进来寻找损失函数的极小值。局部与全局极小值的挑战与此直接相关——非凸损失函数可能让优化算法陷入次优的局部极小值。

主题

与 DataCamp 一起学习

Courses

数据科学概览

2小时
866K
无需编程的数据科学入门。
查看详情Right Arrow
开始课程
查看更多Right Arrow