第 1 章 SageMath 基本用法入門¶
(適用:台灣高中~大一;目標:能在 notebook 裡熟練做符號、數值、畫圖與基本資料結構)
1.1 你在 SageMath 裡「在做什麼」?¶
在 SageMath / Jupyter notebook 你會反覆做四件事:
- 宣告與建立物件:變數、函數、向量、矩陣、清單
- 對物件做運算:化簡、代入、求值、解方程、微積分
- 用圖形與表格觀察:畫函數圖、掃參數、做數值實驗
- 把步驟留下來:讓你或同學以後能重跑、能改、能擴充
這一章的重點不是「記指令」,而是建立「工作流程」:
- 先用小例子試
- 再把指令整理成可重用的模板
- 最後用它來輔助你原本就會的數學推導
1.2 Notebook 基本操作:Markdown 與 Code cell¶
- Markdown cell:寫文字、公式、條列、解題步驟
- Code cell:寫 SageMath 程式碼,按 Shift+Enter 執行
下方先示範一個「你以後會常用的筆記格式」。
# 宣告符號變數
var('x')
# 定義函數(其實就是一個式子)
f = (x + 1)^3
# 展開
expand(f)
# 代入求值
f(x=2)
1.3 變數與基本運算:整數、分數、根號、π¶
SageMath 很常做兩種不同的「數字」:
- 精準值(exact):分數、根號、符號 π 都保留精準
- 近似值(numeric):小數近似,常用於估算、畫圖、比較大小
下面用幾個例子建立習慣。
# 精準分數
a = 1/3
a
# 根號與 π 也會保留符號
b = sqrt(2) + pi/6
b
# 需要小數近似時:N(...) 或 .n()
N(b), b.n()
常見坑:Python 的 ^ 與 Sage 的 ^¶
在 純 Python 裡,^ 是位元 XOR;但在 SageMath 的 notebook kernel 中,^ 通常被當成次方。
為了跨環境安全(尤其你把筆記拿去別的 Python 環境跑),建議你養成習慣:
- 次方用
^或**都可以(在 Sage 內兩者都常見) - 如果你不確定環境,改用
**更保險
下面示範兩者等價(在 Sage kernel 下)。
var('x')
expand((x+1)^5), expand((x+1)**5)
var('x')
expr = (x^2 - 1)/(x - 1)
expr
# 直接化簡(注意:x=1 仍不在原式定義域內)
simplify(expr)
# 更保險的做法:先因式分解,再約分,再提醒自己定義域
factor(x^2 - 1)
重點觀念:Sage 幫你化簡成 $x+1$,但原式在 $x=1$ 沒有定義。
所以你在寫答案時要自己補上「定義域限制」:$x\neq 1$。
1.5 常用指令速查:展開、因式分解、通分、展開分母¶
expand(expr):展開factor(expr):因式分解together(expr):通分合併成單一分式partial_fraction(expr, x):部分分式分解(之後積分會用到)
先來一個通分合併的例子。
var('x')
expr = 1/(x-1) + 2/(x+1)
expr
# 利用 sympy 的函數
from sympy import together
together(expr)
1.6 解方程的最小入門:solve¶
後面第 3 章會完整談「一元方程與聯立方程」,這裡先學最小用法:
solve(方程, 變數)回傳解的列表- 方程用
==表示(不是=)
例:解 $x^2-5x+6=0$。
var('x')
solve(x^2 - 5*x + 6 == 0, x)
你通常會想把解抽出來做後續運算:
sol = solve(...)sol[0].rhs()取第一個解的右邊(rhs = right-hand side)
示範如下。
var('x')
sol = solve(x^2 - 5*x + 6 == 0, x)
sol
# 取出兩個解
r1 = sol[0].rhs()
r2 = sol[1].rhs()
r1, r2, r1 + r2, r1*r2
var('x')
q = x^2 - 4*x + 3
plot(q, (x, -1, 5))
(B) 疊兩條曲線:看交點 = 解方程¶
例:解方程 $x^2-4x+3=0$
等同於找 $y=x^2-4x+3$ 與 $y=0$ 的交點。
var('x')
plot(q, (x, -1, 5)) + plot(0, (x, -1, 5))
# list comprehension(串列生成式)
vals = [n^2 for n in range(1, 11)]
vals
(B) 同時存成表格(方便閱讀)¶
Sage 的 table 會把資料排成表格。
table([[n, n^2] for n in range(1, 11)], header_row=['n', 'n^2'])
| n | n^2 |
|---|---|
(C) 掃描參數並畫出一族函數(預告第 7 章)¶
例:畫出 $y=(x-a)^2$ 在不同 a 下的圖形,觀察平移。
var('x a')
plots = sum([plot((x-k)^2, (x, -3, 3)) for k in [-2, -1, 0, 1, 2]])
plots
1.9 自訂函數與小工具:讓筆記更乾淨¶
當你一再重複某段操作,就把它寫成「小函數」。 例如:輸入一個多項式,輸出「展開」與「因式分解」的對照。
(這裡的函數用 Python 語法寫,但可以處理 Sage 的物件)
var('x')
def show_expand_factor(expr):
return expand(expr), factor(expr)
show_expand_factor((x+2)*(x-3)*(x+1))
1.10 本章小結:你應該帶走的能力¶
看完並跑過這章,你應該能:
- 宣告變數、建立式子、代入求值
- 用
expand / factor / simplify / together做基本符號操作 - 用
solve解簡單方程並抽出解 - 用
plot畫基本函數圖並做疊圖 - 用 list 做值表與簡單參數掃描
- 把重複操作寫成小函數,讓 notebook 可維護
練習題(附提示)¶
- 展開並因式分解:
(a) $(x-2)^4$
(b) $x^4-16$
提示:用 expand 與 factor 互相驗算。
- 通分化簡:
$\frac{1}{x} - \frac{1}{x+1}$
提示:先算 together(...),再用 factor(...) 看能不能約分。
- 画圖並猜根:
畫 $y=x^3-3x$ 在 $[-3,3]$ 的圖形,猜它的根有幾個、在哪裡?
提示:根就是圖形與 x 軸交點。
- 參數掃描(挑戰):
對 $a=-2,-1,0,1,2$,列出二次方程 $x^2+ax+1=0$ 的兩根(精準形式)。
提示:用 solve(..., x),再用 list comprehension 把 a 掃過去。
下一章(第 2 章)我們會更系統化地練「式子變形與因式分解」:
包含多項式、分式、根式、代換與常見技巧,並且強調「用 Sage 驗算你的手算」。