📐 第 9 课 · 函数的应用

最优布雷策略

在网格上放置炸弹,如何用最少的炸弹覆盖最多的区域?🤔 这是函数优化问题

🎮 互动教学 ⏱ 约 15 分钟 📐 人教版必修第一册 · 第三章

🎯 本课学习目标

1
🎮 找到最佳布雷位置
👆 点击「开始放置」体验 →
1
2
3
4
5

🎮 找到最佳布雷位置

在 8×8 的网格上放置炸弹,炸弹会覆盖自身和上下左右相邻的格子。目标:用最少的炸弹覆盖所有格子。

炸弹数: 0 覆盖率: 0%
💡 小提示

先点「▶ 开始放置」,再切换策略。⚠️ 注意看覆盖率曲线的变化——是不是越来越平缓?

炸弹数量
0
覆盖格子
0
覆盖率
0%
效率

📊 放置记录

步骤位置新增覆盖

📈 覆盖率曲线

🎯 观察要点:每放一个炸弹,新增的覆盖格子数会越来越少(边际递减)。这就是函数的单调性和最优化问题!
2
📖 函数的应用——优化问题

🔍 从游戏中「抽象」

刚才的布雷游戏中,我们试图用最少的炸弹覆盖最多的格子。你发现了什么?

游戏中的事实
放第 1 个炸弹覆盖 5 格,放第 2 个可能只新增 3 格
↓ 抽象
边际收益递减
关键特征
存在一个「最优」的放置数量
↓ 抽象
求函数的最大值/最小值
数学表达
覆盖率 = f(炸弹数)
↓ 抽象
y = f(x),求最值

📖 函数最值的定义

人教版必修第一册(P77):

📘 最大值

设函数 f(x) 的输入的范围(x的取值范围)为 I,如果存在实数 M 满足:

① ∀x ∈ I,都有 f(x) ≤ M

② ∃x₀ ∈ I,使得 f(x₀) = M

那么 M 叫做函数 f(x) 的最大值

📘 最小值

类似地,满足 f(x) ≥ m 且 f(x₀) = m 的 m 叫做函数 f(x) 的最小值

💡 一句话理解

最大值 = 函数图象的「最高点」

最小值 = 函数图象的「最低点」

🧩 二次函数的最值

在函数应用中,二次函数的最值是最经典的问题:

y = ax² + bx + c (a ≠ 0)
顶点: x = -b/(2a)
最值: y = (4ac - b²)/(4a)
a > 0 时有最小值;a < 0 时有最大值

在布雷问题中,覆盖率函数可以近似为二次函数: 开始时快速增长,后来增速放缓,最终趋于 100%。

用导数求最值(拓展)

对于更复杂的函数,我们可以用导数来求最值:

步骤: ① 求导 f'(x) ← 导数表示变化率
   ② 令 f'(x) = 0,解出 x ← 变化率为 0 处可能是最值
   ③ 比较端点和临界点的函数值

在炸弹人游戏中,导数 = 0 的点就是「再多放一个炸弹,新增覆盖几乎为 0」的位置——这就是最优解!

3
🔬 调节 a、b、c,观察最值变化
拖动滑块 →

在二次函数 y = ax² + bx + c 中,调节参数 a、b、c,观察图象的开口方向、对称轴和最值位置。

-1.0
2.0
3.0
y = -1.0 + 2.0x + 3.0
💡 a=-1, b=2, c=3:开口向下,对称轴 x=1,最大值 y=4。
🎮 游戏对照

把 a 调到 -1、b 调到 0,得到 y = -x² + c,这是一个关于 x=0 对称的抛物线,最大值在顶点处——就像炸弹放在正中心覆盖最多!

4
🎯 挑战关卡:检验你的掌握程度
共 4 题 · 👆 点击选项作答
1 二次函数 y = -x² + 4x + 1 的最大值是(  )
用顶点公式求解
2 函数 y = x² - 6x + 5 在区间 [0, 4] 上的最小值是(  )
先求顶点,再比较端点
3 用一根 20 米长的铁丝围成一个矩形,面积最大是(  )
设矩形一边为 x,建立面积函数
4 在布雷问题中,覆盖率函数 f(x) = 1 - e^(-0.3x)(x 为炸弹数),当 x→∞ 时覆盖率趋向于(  )
用极限思想分析
💻
Python 核心代码:用代码求解优化问题
讲干货 · 核心 10 行
🐍 二次函数最值 👆 点击展开代码 →
lesson9_optimization.py📋 复制
def quadratic_extreme(a, b, c):
 """求二次函数 y=ax²+bx+c 的最值"""
 x_vertex = -b / (2 * a)
 y_vertex = a * x_vertex**2 + b * x_vertex + c
 if a > 0:
 return f'最小值: y={y_vertex:.2f} (x={x_vertex:.2f})'
 return f'最大值: y={y_vertex:.2f} (x={x_vertex:.2f})'
# 例:y = -x² + 4x + 1
print(quadratic_extreme(-1, 4, 1)) # 最大值: y=5.00 (x=2.00)
# 例:y = x² - 6x + 5
print(quadratic_extreme(1, -6, 5)) # 最小值: y=-4.00 (x=3.00)
▶ 运行输出
最大值: y=5.00 (x=2.00)
最小值: y=-4.00 (x=3.00)
📈 用 scipy 求函数最值 数值优化 →
lesson9_scipy_optimize.py📋 复制
from scipy.optimize import minimize_scalar
# 覆盖率函数 f(x) = 1 - e^(-0.3x)
def coverage(x):
 return -(1 - 2.71828**(-0.3*x)) # 负号因为求最小
result = minimize_scalar(coverage, bounds=(0, 20), method='bounded')
print(f'最优炸弹数: {result.x:.1f}')
print(f'最大覆盖率: {-result.fun*100:.1f}%')
5
📝 本课小结:回顾你的收获

🎉 今天你学到了什么?

🎮 从游戏中来
布雷策略 → 用最少的炸弹覆盖最多区域 → 优化问题
📖 函数最值
最大值 = 图象最高点;最小值 = 图象最低点
🧩 二次函数最值
顶点 x=-b/(2a),最值 y=(4ac-b²)/(4a)
📐 求最值方法
配方法、顶点公式、导数法、数值优化
⭐ 实际应用
面积最大、成本最低、覆盖率最高等
🔗 游戏↔数学
炸弹数 = x;覆盖率 = f(x);最优解 = 函数最值
🎁 下节预告:第 10 课 —— 设计你的教学关卡(数学建模)
用函数知识设计自己的关卡,体验数学建模的完整过程。这是3️⃣一课,也是最有创意的一课!
继续学习 →