最值问题与最优化

闭区间上的连续函数必有最大最小值,且只可能出现在临界点或端点。应用题真正的难点是把实际约束翻译成定义域。

11 分钟思维方法: 极端原理

先看最大的、最小的、边界上的那一个

这一片为什么存在

求导、解方程、比大小——这套流程你已经会了。可应用题一到手就翻车,通常不是算错导数,而是搜索范围划错了:端点漏了,或者默认了「边长可以是任意实数」。这一片专门练这件事——先确定你在哪个集合上找最值,再动笔求导。

内容

先不管公式,想象你沿一条山路走,路的两头各有一道栅栏,你不能越过。走完全程,你到过的最高点在哪?

只有两种可能。要么在某个地方,路先上后下,你在那儿踩到了一个局部的顶——脚下是平的,或者是个尖顶、一个折角。要么你根本没遇到这种地方,路一路往上,那最高点就是你停下的那道栅栏。

这就是最值问题的全部结构。最大值只可能出现在「路面平了或者拐了」的地方,或者「路走到头了」的地方。前者叫临界点,后者叫端点。列出这两类候选点,把函数值全算一遍,最大的就是最大值,最小的就是最小值。不需要逐个判断它是极大还是极小——比数就行。

这里最容易漏的是端点。因为求导给你的信息是纯局部的:导数只告诉你在这一点附近往哪走会升高。端点处只有一侧有邻域,路在那儿被硬生生截断,导数为零根本没有理由发生。所以端点不会出现在解 f'(x)=0 的结果里,你必须手动把它加进名单。一个最省事的检查习惯:写完候选点,数一下区间的两个端点在不在上面。

第二件容易混的事:极值不等于最值。极大值是「比它周围高」,最大值是「比整条路上所有点都高」。山路上可以有一个小土包,你站上去环顾四周确实是顶,但翻过它前面还有主峰。导数只认得出小土包,认不出主峰——因为它看不到远处。所以求出临界点之后,比大小这一步不能省。

第三件事最关键,也是应用题真正的难点:栅栏在哪,是你自己定的。

题目给你的往往是一段文字:一张边长 30 厘米的正方形纸板,四角各剪去边长 x 的小正方形,折成一个无盖盒子,问体积最大是多少。写出 V(x)=x(30−2x)² 只是把话翻译成式子,几乎不会错。会错的是接下来那句没人明说的话——x 能取哪些值?

x 是剪掉的边长,所以 x>0。剪掉两个角之后还得留下底面,所以 30−2x>0,即 x<15。于是 x 的活动范围是开区间 (0,15)。端点确实取不到:x=0 等于没剪,x=15 底面为零,都折不成盒子。

很多人在这里把定义域写成全体实数,然后解出一个负数也一本正经地代进去。也有人凭直觉断定「开区间上照样有最大值」。后者并不总成立:f(x)=x 在 (0,1) 上就取不到最大值,越靠近 1 越大,可 1 本身不在范围里,没有哪个点能称冠。所以定义域是开区间时必须额外说理,不能默认最值存在。

所以顺序应该反过来。别一拿到题就求导。先问:变量是什么,它必须满足哪些不等式(长度为正、材料有限、时间非负、比例不超过 1),把这些不等式的交集写下来。这个集合就是你的栅栏。栅栏立好了,剩下的求导、列候选、比大小才是机械活。

把上面的话写成能用的形式。

记号先交代:a、b 是两个实数且 a<b;[a,b] 指所有满足 a≤x≤b 的实数 x,两端都算在内;(a,b) 指 a<x<b,两端不算。f 是定义在 [a,b] 上的函数,f(x) 是它在点 x 的值。说「f 在 [a,b] 上连续」,直观地讲就是图像一笔画得出来,没有断点、没有跳跃、也没有竖直飞出去。

极值定理:若 f 在闭区间 [a,b] 上连续,则存在 c、d ∈ [a,b],使得对一切 x ∈ [a,b] 都有 f(c) ≤ f(x) ≤ f(d)。f(d) 就是最大值,f(c) 是最小值。定理只保证它们存在,不告诉你在哪。

两个前提都不能省。去掉「闭」:f(x)=x 在 (0,1) 上连续,却没有最大值。去掉「连续」:在 [0,1] 上定义 f(x)=1/x(x>0)、f(0)=0,函数无上界,也没有最大值。

临界点:称内点 x₀ ∈ (a,b) 是 f 的临界点,如果 f'(x₀)=0,或者 f'(x₀) 不存在。这里 f' 是 f 的导函数,f'(x₀)=0 意思是图像在该点的切线水平。

费马引理给出关键限制:若 f 在内点 x₀ 处取到 [a,b] 上的最大值或最小值,且 f'(x₀) 存在,则必有 f'(x₀)=0。把它和端点这唯一的例外合起来,搜索范围就锁定了:最值只能出现在临界点或 a、b 处。

于是有算法。取候选集 S = {a, b} ∪ {(a,b) 内的全部临界点},在 S 的每个点上算出 f 的值。其中最大的数是最大值,最小的数是最小值。S 有限时用不上一阶或二阶判别法——那是判断局部性质的工具,这里直接比数更可靠。

若定义域是开区间或无界区间,极值定理失效,必须另作论证。常用做法是考察 x 趋于边界时 f 的极限。若这些极限值都小于某个临界点处的函数值,则该临界点给出最大值。

跟着做一遍

求 f(x)=x³−3x 在闭区间 [−2,3] 上的最大值和最小值。做完再回答一个追问:如果区间换成开区间 (−2,3),最大值还存在吗?纸笔大约五分钟,先自己算完,再对下面的步骤。

  1. 检查前提:f 是多项式,在 [−2,3] 上连续,而区间是闭的。极值定理适用,最大值和最小值一定存在。
  2. 求导:f'(x)=3x²−3=3(x−1)(x+1)。导数处处存在,所以临界点只能来自 f'(x)=0。
  3. 解 f'(x)=0 得 x=−1 和 x=1。两者都落在 (−2,3) 内部,都保留。
  4. 把端点加进名单:x=−2 与 x=3。候选集共四个点:−2、−1、1、3。漏掉这一步是最常见的错误。
  5. 逐点求值:f(−2)=−8+6=−2;f(−1)=−1+3=2;f(1)=1−3=−2;f(3)=27−9=18。
  6. 比大小:最大值是 18,在 x=3 取得;最小值是 −2,在 x=−2 和 x=1 两处同时取得。最值本身唯一,取到它的位置可以不唯一。
  7. 回头看 x=−1:导数在此由正变负,它是一个局部极大点,函数值 2。但 2 远小于 18。若只比较临界点,你会把答案写成 2——这就是「极值不是最值」的代价。
  8. 开区间追问:在 (−2,3) 上,x=3 已不属于定义域。x 从左边趋于 3 时 f(x) 趋于 18,却永远取不到;每个点的值都严格小于 18,也就没有最大者。所以最大值不存在,而最小值 −2 仍在 x=1 取得。

结果

最大值 f(3)=18,在右端点取得;最小值 −2,在 x=−2 和 x=1 两处取得。局部极大值 f(−1)=2 不是最大值。换成开区间 (−2,3) 后最大值不存在,最小值仍是 −2。一句话带走:候选 = 临界点 ∪ 端点,然后只比大小;而这份名单由定义域决定,所以定义域要先于求导写下来。

它在树上的位置

概念不是一篇一篇平铺的。下面两组是这一片真实的上下游:它靠着什么,又撑起了什么。

它靠着

它撑起

图上还没有概念把它列为先修。

读完之后

这一页是产品里的一天。产品是那棵树:你学到哪、哪块在衰减、明天该学什么。一篇读物回答不了这三个问题,树才回答。

看看那是什么意思