跳轉到

4.2 基底與維度:座標的真相#

本節目標#

  • 理解 基底 = 最小生成集 = 一套座標系 這三重身分
  • 換基底:同一個向量在不同基下的座標,實作 \([\mathbf{v}]_B = P^{-1}\mathbf{v}\)
  • 畫圖看不同基底下的座標網格
  • 體會 維度 = 基的大小,比較標準基與斜基
  • 實驗:畫出旋轉 45° 的基底與其座標網格

基底的三重身分#

第 4.1 節我們學會判斷向量們是否「撐得起空間」。現在把條件收緊:

一組向量是子空間的 基底(basis),如果它同時滿足: 1. 張成:它們的 span 覆蓋整個子空間(夠用) 2. 線性獨立:沒有一個是多餘的(不浪費)

這兩個條件讓基底成為 最小生成集 —— 拿掉任何一個就撐不住、多加任何一個就相依。 但基底最實用的身分是第三個:一套座標系。

以標準基 \(\mathbf{e}_1 = (1,0)\) 、 \(\mathbf{e}_2 = (0,1)\) 為例,向量 \(\mathbf{v} = (3, 2)\) 其實是在說:

\[ \mathbf{v} = 3\,\mathbf{e}_1 + 2\,\mathbf{e}_2 \]

「座標 3 和 2」的意思是「沿第一個基方向走 3 步、沿第二個基方向走 2 步」。 換了基底,同一支箭頭不變,但「怎麼走過去」的說明書(座標)改變了。


換基底: \([\mathbf{v}]_B = P^{-1}\mathbf{v}\)#

設新基底為 \(B = \{\mathbf{b}_1, \mathbf{b}_2\}\) ,把基向量排成矩陣 \(P = [\mathbf{b}_1 \; \mathbf{b}_2]\) (每個基向量一行)。 若向量 \(\mathbf{v}\) 在標準座標下已知,求它在基 \(B\) 下的座標 \([\mathbf{v}]_B = (c_1, c_2)\) :

\[ \mathbf{v} = c_1\mathbf{b}_1 + c_2\mathbf{b}_2 = P\begin{bmatrix} c_1 \\ c_2 \end{bmatrix} \quad\Longrightarrow\quad [\mathbf{v}]_B = P^{-1}\mathbf{v} \]

幾何直覺: \(P\) 是「把 \(B\) 座標翻譯成標準座標」的變換,所以反方向翻譯就用 \(P^{-1}\) 。

import numpy as np
import matplotlib.pyplot as plt
from linalg_viz import plot_vectors

v = np.array([3.0, 2.0])              # 標準座標下的同一支箭頭

# 新基底 B:b1 = (2,1), b2 = (-1,1)
P = np.array([[2.0, -1.0],
              [1.0,  1.0]])           # 每行一個基向量

v_B = np.linalg.solve(P, v)           # 解 P c = v,即 P^{-1} v
print("在基 B 下的座標:", v_B)         # 例如 [1.667 0.333]

# 驗證:用 B 座標重建同一支箭頭
reconstructed = P @ v_B
print("重建結果:", reconstructed, " 與原向量相同:", np.allclose(reconstructed, v))

注意我們用 np.linalg.solve(P, v) 而不是明確計算 np.linalg.inv(P) @ v —— 這是數值計算的好習慣:解方程組比先求反矩陣更快更穩(第 9 章會回來談這點)。


畫圖:不同基底下的座標網格#

標準基的座標網格是正方形網格;換成斜基後,「等座標線」變成沿著基向量方向的平行線族。 同一張紙上的點沒有動,動的是你鋪在上面的格線。

def draw_basis_grid(P, lim=5):
    """畫出以 P 的行向量為基的座標網格。"""
    b1, b2 = P[:, 0], P[:, 1]
    for c in np.arange(-lim, lim + 1):
        # c1 = c 的直線:點 = c*b1 + t*b2
        line = np.outer(np.linspace(-lim, lim, 2), b2) + c * b1
        plt.plot(line[:, 0], line[:, 1], color="steelblue", alpha=0.5, lw=0.8)
        # c2 = c 的直線
        line = np.outer(np.linspace(-lim, lim, 2), b1) + c * b2
        plt.plot(line[:, 0], line[:, 1], color="salmon", alpha=0.5, lw=0.8)
    plot_vectors([b1, b2], color=["blue", "red"])

plt.figure(figsize=(10, 5))

plt.subplot(1, 2, 1)
draw_basis_grid(np.eye(2))
plt.gca().set_aspect("equal"); plt.title("標準基:正方形網格")

plt.subplot(1, 2, 2)
draw_basis_grid(P)
plt.gca().set_aspect("equal"); plt.title("斜基 B=(2,1),(-1,1):平行四邊形網格")
plt.show()

# 在右圖標出 v 的位置:它在斜基座標下是 (1.667, 0.333),
# 也就是「沿 b1 走 1.667 格、沿 b2 走 0.333 格」後到達的同一個點。

兩張圖裡,向量 \(\mathbf{v} = (3,2)\) 這支箭頭本身一模一樣,但在左圖它的地址是 \((3, 2)\) , 在右圖的斜格線下,地址變成了 \((1.667, 0.333)\) 。


維度:基的大小#

一個子空間可以有無限多組基底(同一空間可以鋪不同的格線),但有一個數字是不變的:

定理:同一個子空間的任何兩組基底,大小必定相同。 這個共同的大小就是子空間的 維度(dimension)。

這解釋了我們一直自然使用的「 \(\mathbb{R}^2\) 是二維、 \(\mathbb{R}^3\) 是三維」: 標準基 \(\{\mathbf{e}_1, \mathbf{e}_2\}\) 有 2 個、 \(\{\mathbf{e}_1, \mathbf{e}_2, \mathbf{e}_3\}\) 有 3 個, 而 4.1 節的秩正好就是「行空間的基底大小」。

概念 4.1 節的語言 本節的語言
秩 \(r\) span 的維度 行空間基底的大小
撐起空間的最少向量 可達區域的「最小描述」 一組基底

標準基 vs 斜基:標準基 \(\{\mathbf{e}_i\}\) 計算最方便(座標就是分量本身), 但斜基往往更「貼合問題」—— 之後會看到:特徵向量是一組讓矩陣變換變得超簡單的基底(第 5 章), 正交基底讓投影計算變簡單(第 6 章)。


實驗:旋轉 45° 的基底座標網格#

取標準基整組旋轉 45°,得到一組「只是轉了方向」的新基底。 用 2.3 節的旋轉矩陣:

\[ R(45°) = \begin{bmatrix} \cos 45° & -\sin 45° \\ \sin 45° & \cos 45° \end{bmatrix} \]
theta = np.pi / 4                       # 45 度
R = np.array([[np.cos(theta), -np.sin(theta)],
              [np.sin(theta),  np.cos(theta)]])

B = R @ np.eye(2)                       # 旋轉後的基:仍是正交單位基,只是轉向
print("新基底:\n", B)

v = np.array([3.0, 2.0])
v_B = np.linalg.solve(B, v)
print(f"v 在旋轉基下的座標: ({v_B[0]:.3f}, {v_B[1]:.3f})")

plt.figure(figsize=(6, 6))
draw_basis_grid(B)
plt.quiver(0, 0, *v, color="green", angles="xy", scale_units="xy", scale=1,
           width=0.008, label="v(箭頭不變)")
plt.legend(); plt.gca().set_aspect("equal")
plt.title("旋轉 45° 的基底與座標網格")
plt.show()

有趣的觀察:旋轉基是 正交基(兩支基箭頭互相垂直、長度都是 1), 它的網格雖然斜了 45°,但仍是 正方形網格 —— 只是整組轉向。 把向量 \((3, 2)\) 的座標算出來,你會發現 \([\mathbf{v}]_B\) 正好是 \((\frac{5}{\sqrt{2}}, -\frac{1}{\sqrt{2}})\) , 而 \((\frac{5}{\sqrt{2}})^2 + (-\frac{1}{\sqrt{2}})^2 = 13 = 3^2 + 2^2\) 。 正交基不會扭曲長度 —— 這是第 6 章鍾愛正交基的第一個伏筆。


小結與練習#

本節重點 1. 基底 = 張成 + 線性獨立 = 最小生成集 = 一套座標系。 2. 換基底座標: \([\mathbf{v}]_B = P^{-1}\mathbf{v}\) ,其中 \(P\) 的行是基向量;程式上用 np.linalg.solve(P, v)。 3. 換基底不動箭頭,只動格線;維度 = 基的大小 = 不變的內在性質。 4. 正交基(如旋轉基)保持長度,是後續章節的重要工具。

練習 1. 用基 \(B = \{(1,1), (1,-1)\}\) 求 \(\mathbf{v} = (4, 2)\) 的座標,並畫圖驗證。 2. 把 draw_basis_grid 的 \(P\) 換成剪切基 \(\begin{bmatrix} 1 & 1 \\ 0 & 1 \end{bmatrix}\) ,觀察網格如何傾斜。 3. 驗證旋轉矩陣滿足 \(R^{-1} = R^T\) (用 np.allclose),並思考這對「旋轉基下座標」的計算意味著什麼。 4. (思考題) \(\mathbb{R}^3\) 中一個通過原點的平面,它的基底可以有幾個向量?標準基 \(\{\mathbf{e}_1,\mathbf{e}_2,\mathbf{e}_3\}\) 是這個平面的基底嗎?