第 1 章 SageMath 基本用法入門¶

(適用:台灣高中~大一;目標:能在 notebook 裡熟練做符號、數值、畫圖與基本資料結構)

1.1 你在 SageMath 裡「在做什麼」?¶

在 SageMath / Jupyter notebook 你會反覆做四件事:

  1. 宣告與建立物件:變數、函數、向量、矩陣、清單
  2. 對物件做運算:化簡、代入、求值、解方程、微積分
  3. 用圖形與表格觀察:畫函數圖、掃參數、做數值實驗
  4. 把步驟留下來:讓你或同學以後能重跑、能改、能擴充

這一章的重點不是「記指令」,而是建立「工作流程」:

  • 先用小例子試
  • 再把指令整理成可重用的模板
  • 最後用它來輔助你原本就會的數學推導

1.2 Notebook 基本操作:Markdown 與 Code cell¶

  • Markdown cell:寫文字、公式、條列、解題步驟
  • Code cell:寫 SageMath 程式碼,按 Shift+Enter 執行

下方先示範一個「你以後會常用的筆記格式」。

範例:把一題「展開與代入」寫成可重跑的筆記¶

題目:令 $f(x)=(x+1)^3$,求展開式,並計算 $f(2)$。

你可以先寫推導(Markdown),再用 Sage 驗算(Code)。

In [1]:
# 宣告符號變數
var('x')

# 定義函數(其實就是一個式子)
f = (x + 1)^3

# 展開
expand(f)
Out[1]:
In [2]:
# 代入求值
f(x=2)
Out[2]:

1.3 變數與基本運算:整數、分數、根號、π¶

SageMath 很常做兩種不同的「數字」:

  • 精準值(exact):分數、根號、符號 π 都保留精準
  • 近似值(numeric):小數近似,常用於估算、畫圖、比較大小

下面用幾個例子建立習慣。

In [3]:
# 精準分數
a = 1/3
a
Out[3]:
In [4]:
# 根號與 π 也會保留符號
b = sqrt(2) + pi/6
b
Out[4]:
In [5]:
# 需要小數近似時:N(...) 或 .n()
N(b), b.n()
Out[5]:

常見坑:Python 的 ^ 與 Sage 的 ^¶

在 純 Python 裡,^ 是位元 XOR;但在 SageMath 的 notebook kernel 中,^ 通常被當成次方。
為了跨環境安全(尤其你把筆記拿去別的 Python 環境跑),建議你養成習慣:

  • 次方用 ^ 或 ** 都可以(在 Sage 內兩者都常見)
  • 如果你不確定環境,改用 ** 更保險

下面示範兩者等價(在 Sage kernel 下)。

In [6]:
var('x')
expand((x+1)^5), expand((x+1)**5)
Out[6]:

1.4 符號變數、式子、函數:var、代入、化簡¶

(A) 宣告變數¶

  • var('x') 宣告一個符號 x
  • var('x y') 一次宣告多個符號

(B) 代入與化簡¶

  • expr(x=3) 或 expr.subs(x=3):代入
  • simplify(expr):化簡(有時會需要搭配 factor、expand)

下面做一個「高中常見的分式化簡」。

In [7]:
var('x')
expr = (x^2 - 1)/(x - 1)
expr
Out[7]:
In [8]:
# 直接化簡(注意:x=1 仍不在原式定義域內)
simplify(expr)
Out[8]:
In [9]:
# 更保險的做法:先因式分解,再約分,再提醒自己定義域
factor(x^2 - 1)
Out[9]:

重點觀念:Sage 幫你化簡成 $x+1$,但原式在 $x=1$ 沒有定義。
所以你在寫答案時要自己補上「定義域限制」:$x\neq 1$。


1.5 常用指令速查:展開、因式分解、通分、展開分母¶

  • expand(expr):展開
  • factor(expr):因式分解
  • together(expr):通分合併成單一分式
  • partial_fraction(expr, x):部分分式分解(之後積分會用到)

先來一個通分合併的例子。

In [10]:
var('x')
expr = 1/(x-1) + 2/(x+1)
expr
Out[10]:
In [11]:
# 利用 sympy 的函數
from sympy import together
together(expr)
Out[11]:
$\displaystyle \frac{3 x - 1}{\left(x - 1\right) \left(x + 1\right)}$

1.6 解方程的最小入門:solve¶

後面第 3 章會完整談「一元方程與聯立方程」,這裡先學最小用法:

  • solve(方程, 變數) 回傳解的列表
  • 方程用 == 表示(不是 =)

例:解 $x^2-5x+6=0$。

In [12]:
var('x')
solve(x^2 - 5*x + 6 == 0, x)
Out[12]:

你通常會想把解抽出來做後續運算:

  • sol = solve(...)
  • sol[0].rhs() 取第一個解的右邊(rhs = right-hand side)

示範如下。

In [13]:
var('x')
sol = solve(x^2 - 5*x + 6 == 0, x)
sol
Out[13]:
In [14]:
# 取出兩個解
r1 = sol[0].rhs()
r2 = sol[1].rhs()
r1, r2, r1 + r2, r1*r2
Out[14]:

1.7 畫圖入門:plot 與常用設定¶

畫圖是建立直覺的最快方式。你至少要會:

  • plot(f, (x, a, b)):在區間 [a,b] 畫圖
  • ymin, ymax:設定視窗,避免被漸近線撐爆
  • 疊圖:plot(...) + plot(...)

(A) 單一函數圖¶

例:畫 $y=x^2-4x+3$,並猜根在哪裡。

In [15]:
var('x')
q = x^2 - 4*x + 3
plot(q, (x, -1, 5))
Out[15]:
No description has been provided for this image

(B) 疊兩條曲線:看交點 = 解方程¶

例:解方程 $x^2-4x+3=0$
等同於找 $y=x^2-4x+3$ 與 $y=0$ 的交點。

In [16]:
var('x')
plot(q, (x, -1, 5)) + plot(0, (x, -1, 5))
Out[16]:
No description has been provided for this image

1.8 列表(list)與掃描參數:做「大量實驗」的基本功¶

高中到大一很多題目都有參數,例如:

  • 研究 $a$ 改變時,方程根的變化
  • 研究 $n$ 改變時,數列和的變化
  • 研究不同初始值的遞迴

你不需要每次都手算。你可以用 list 先跑一排結果。

(A) 用 list 生成值表¶

例:列出 $n=1\sim 10$ 時 $n^2$ 的值。

In [17]:
# list comprehension(串列生成式)
vals = [n^2 for n in range(1, 11)]
vals
Out[17]:

(B) 同時存成表格(方便閱讀)¶

Sage 的 table 會把資料排成表格。

In [18]:
table([[n, n^2] for n in range(1, 11)], header_row=['n', 'n^2'])
Out[18]:
n n^2

(C) 掃描參數並畫出一族函數(預告第 7 章)¶

例:畫出 $y=(x-a)^2$ 在不同 a 下的圖形,觀察平移。

In [19]:
var('x a')
plots = sum([plot((x-k)^2, (x, -3, 3)) for k in [-2, -1, 0, 1, 2]])
plots
Out[19]:
No description has been provided for this image

1.9 自訂函數與小工具:讓筆記更乾淨¶

當你一再重複某段操作,就把它寫成「小函數」。 例如:輸入一個多項式,輸出「展開」與「因式分解」的對照。

(這裡的函數用 Python 語法寫,但可以處理 Sage 的物件)

In [20]:
var('x')

def show_expand_factor(expr):
    return expand(expr), factor(expr)

show_expand_factor((x+2)*(x-3)*(x+1))
Out[20]:

1.10 本章小結:你應該帶走的能力¶

看完並跑過這章,你應該能:

  • 宣告變數、建立式子、代入求值
  • 用 expand / factor / simplify / together 做基本符號操作
  • 用 solve 解簡單方程並抽出解
  • 用 plot 畫基本函數圖並做疊圖
  • 用 list 做值表與簡單參數掃描
  • 把重複操作寫成小函數,讓 notebook 可維護

練習題(附提示)¶

  1. 展開並因式分解:

(a) $(x-2)^4$

(b) $x^4-16$

提示:用 expand 與 factor 互相驗算。

  1. 通分化簡:

$\frac{1}{x} - \frac{1}{x+1}$

提示:先算 together(...),再用 factor(...) 看能不能約分。

  1. 画圖並猜根:

畫 $y=x^3-3x$ 在 $[-3,3]$ 的圖形,猜它的根有幾個、在哪裡?

提示:根就是圖形與 x 軸交點。

  1. 參數掃描(挑戰):

對 $a=-2,-1,0,1,2$,列出二次方程 $x^2+ax+1=0$ 的兩根(精準形式)。

提示:用 solve(..., x),再用 list comprehension 把 a 掃過去。

下一章(第 2 章)我們會更系統化地練「式子變形與因式分解」:
包含多項式、分式、根式、代換與常見技巧,並且強調「用 Sage 驗算你的手算」。