📐 第 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.0x² + 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️⃣一課,也是最有創意的一課!
繼續學習 →