🎉 3️⃣一課!用函式知識設計一個完整的關卡——從遊戲元素到數學函式,體驗數學建模的全過程
在畫布上放置不同的遊戲元素,系統會自動生成對應的數學函式。這就是數學建模的核心:從現實問題到數學模型。
選擇一種元素型別後,在畫布上👆 點選也就是可放置。嘗試組合不同的元素,看看你的關卡設計!
| 元素 | 型別 | 函式表示式 |
|---|
剛才的關卡設計遊戲中,我們把遊戲元素轉化為了數學函式。這就是數學建模的核心思想:
數學建模是把實際問題轉化為數學問題並求解的過程:
① 理解問題:明確要解決什麼問題(設計一個有趣的關卡)
② 建立模型:用數學語言描述問題(選擇合適的函式型別)
③ 求解模型:用數學方法求解(確定函式引數)
④ 驗證模型:檢驗結果是否符合實際(關卡是否可玩)
數學建模就是「翻譯」——把現實世界的語言翻譯成數學語言,求解後再翻譯回去。
數學建模是連線數學與現實的橋樑:
在炸彈人遊戲中,數學建模幫助我們: 設計關卡(用函式描述地形)、 最佳化策略(用函式求最值)、 預測行為(用函式模擬運動)。
給定一組資料點,調節函式引數使曲線最好地「擬合」資料。這就是數學建模的核心任務:從資料中找出函式模型。
把 a 調到 1、b 調到 -2、c 調到 1,看看曲線是否完美擬合資料點。這就是「最小二乘法」的基本思想!
import numpy as np from scipy.optimize import curve_fit # 觀測資料(關卡中收集的資料點) x_data = np.array([0, 1, 2, 3, 4]) y_data = np.array([1, 2.8, 7.5, 16.2, 25.8]) # 假設模型:二次函式 y = ax² + bx + c def model(x, a, b, c): return a * x**2 + b * x + c # 擬合:自動找出最佳引數 popt, _ = curve_fit(model, x_data, y_data) print(f'擬合結果: a={popt[0]:.2f}, b={popt[1]:.2f}, c={popt[2]:.2f}') # 輸出: 擬合結果: a≈1.0, b≈0.0, c≈1.0
擬合結果: a=1.02, b=-0.05, c=0.98 → 最佳模型: y ≈ x² + 1
# 第1步:理解問題 → 預測炸彈覆蓋範圍 # 第2步:建立模型 → 覆蓋率 f(x) = 1 - e^(-kx) import math def coverage(x, k=0.3): return 1 - math.exp(-k * x) # 第3步:求解 → 計算不同炸彈數的覆蓋率 for n in [1, 3, 5, 10]: print(f'{n}個炸彈: 覆蓋率={coverage(n)*100:.1f}%') # 第4步:驗證 → 與實際遊戲資料對比
1個炸彈: 覆蓋率=25.9% 3個炸彈: 覆蓋率=59.3% 5個炸彈: 覆蓋率=77.7% 10個炸彈: 覆蓋率=95.0%