用電腦和 AI 輔助數學學習
人類使用工具或機器協助計算的歷史,從幾千年前的算盤,到今日的電腦,計算工具隨著科技文明而進步。
計算機或是電腦,在今日社會,已經是很普遍且不可或缺的工具。善用電腦輔助數學學習或計算,可以更方便也更有效率。然而,在台灣目前的中學數學升學考試裡,仍然不能使用計算機或電腦,數學考試限制只能用手算,於是,許多同學在學習的過程中較缺乏用電腦來計算的學習經驗。
徒手計算與用大腦做原始思考,在初學數學時,具有培養觀念,建立對數學的內觀的作用。然而,適度地引入電腦來輔助學習與計算,應是很務實的學習方法。若能善用電腦來處理單純「計算」的部份,也可把時間和腦力留給學習數學的其它概念和應用上,在解決真實問題時,也更有效率。
TED 演講:Teaching kids real math with computers
Conrad Wolfram 在這個主題為 "Teaching kids real math with computers" 的 TED 演講裡,介紹了如何善用數學軟體來幫助數學的教學。
在演講中,他提到了學習數學的四個步驟:
-
提出正確的問題:確定需要解決的問題。
-
將現實世界的問題轉換為數學問題。
-
計算:解決數學問題。
-
解釋結果並將其應用回現實世界。
講者認為當代的學校數學教學,花了很多時間在教學生做「計算」,也就是第 3 個步驟,有些學生因為複雜的計算而對數學感到卻步。然而,計算正是電腦的強項,若能使用電腦來輔助計算,學習者可以花更多時間思考如何提出適當問題,如何形成數學問題,以及如何應用數學來解決現實世界中的問題。這個影片的講者 Conrad Wolfram 是 Stephen Wolfram 的弟弟。Stephen 是英國數學家,也是數學符號運算軟體 Mathematica 的發明人,Mathematica 是商業軟體,需要付費購買才能使用。
在免費的自由軟體世界,也有功能強大的符號運算軟體,例如 Maxima,或它的圖形化界面版本 wxMaxima,這個軟體可以免費下載安裝,在微軟的 Windows 電腦,蘋果的 Mac 電腦,或是 Linux 系統的電腦,都可以安裝使用。其實,在中學或大學階段,使用這個免費軟體,就可以做許多數學計算了。
用 Python 程式做數學符號計算:以解一元 3 次方程式為例
如果要學習用電腦程式做數學運算,Python 程式語言裡也提供了科學運算的函式庫,例如做數值計算的 NumPy,做符號計算的 SymPy,和做高階科學計算的 SciPy。直接學習用 Python 的函式庫來做數學計算,也是不錯的入門方法,因為 Python 是目前很多人使用的程式語言,直接學習用 Python 語法來算數學,有利於讓程式與其它 Python 程式整合在一起。
這裡我們舉個實例,看如何用 Python 的 SymPy 來解一元 3 次方程式。
from sympy import *
# 定義變數
x = symbols('x')
# 一元三次方程式範例: x^3 + 2x^2 + 5x - 6 = 0
equation = Eq(x**3 + 2*x**2 + 5*x - 6, 0)
# 使用 sympy 解方程式
solveset(equation, x)
我們看得到,電腦在不到一秒鐘的時間內,就計算出了這個方程式的 3 個公式解。其中 1 個解是實數,另外 2 個解是虛數。如果這個題目要用徒手計算,是非常花費時間且複雜的。由此可見電腦的計算能力。
如果要顯示上述方程式的數值解,可以用以下的指令:
solveset(equation, x).n()
利用 ChatGPT 畫出函數圖形,並取得程式碼
接下來我們想畫出這個函數的圖形,當然用 Python 裡也可以畫出函數圖形,但是使用者必需輸入正確的程式碼,對初學的人來說,還是有一點門檻的。
所幸在 AI 時代,我們只要在 ChatGPT 下一行白話文指令:
請畫出 x^3 + 2x^2 + 5x - 6 的函數圖形。
就可以得到函數圖形:
由上圖可以看到,這個函數圖形跟 x 軸只有 1 個交點,在 0.8 附近,故這個方程式只有一個實數解 0.82037...。
其實 ChatGPT 就是用 Python 語言畫出這個函數圖形的,我們只要點開 ChatGPT 的回應行尾的 [>_]
(View analysis),就可以看到它用來繪製上面函數圖形的程式碼內容。這裡我們把程式碼複製如下:
import numpy as np
import matplotlib.pyplot as plt
# Define the function
def f(x):
return x**3 + 2*x**2 + 5*x - 6
# Generate x values
x = np.linspace(-4, 3, 400)
# Generate y values
y = f(x)
# Create the plot
plt.figure(figsize=(8, 6))
plt.plot(x, y, label=r'$f(x) = x^3 + 2x^2 + 5x - 6$', color='blue')
plt.title('Graph of $f(x) = x^3 + 2x^2 + 5x - 6$')
plt.xlabel('x')
plt.ylabel('f(x)')
plt.axhline(0, color='black',linewidth=0.5)
plt.axvline(0, color='black',linewidth=0.5)
plt.grid(True)
plt.legend()
# Show the plot
plt.show()
上面的例子,示範了如何用一行文字指令讓 ChatGPT 畫出函數圖形,並且取得 AI 自動生成的程式碼。我們若把這個程式碼複製並儲存下來,日後可以略做修改應用在類似的問題上,同時也可以模仿 AI 生成的程式碼的架構和寫法。
數學家陶哲軒演講:AI and Mathematics
著名的數學家陶哲軒 (Terence Tao) 教授在 2024 年高中生國際數學奧林匹亞競賽 (IMO) 大會演講,講題是 "AI and Mathematics"。
在這個演講裡,陶教授介紹了數學發展史上,人類使用工具計算的歷史,以及在電腦和 AI 時代,各種計算工具對數學發展的可能影響,其中他有提到如何用一個叫做 Lean 的程式,來輔助做數學的證明題。
陶哲軒博士是加州大學洛杉磯分校數學系教授,31歲時就獲得數學界的榮譽 -- 菲爾茲獎。他有一個專門分享數學文章的部落格。對於不是專門從事數學研究的一般讀者來說,這些文章應該不容易看得懂,但仍可以點閱看看,欣賞大師的風采。