MODULE 04 — EIGENVECTORS: THE SKELETON OF A MOTION

特徵向量:這個動作的骨架

玩完這關,你看到任何 2×2 矩陣都能問出它「到底在幹嘛」, 而且知道找到骨架之後可以拿它做三件很實際的事。

① 這關在解什麼問題

上一關留下的洞

03 關最後把資料的形狀壓成了一個 2×2 的共變異數矩陣 —— 形狀確實藏在那四個數字裡,但我們當時只能瞪著它。我們缺一把能看穿矩陣的刀。

先看一個你八成寫過的東西:一個每個月重跑一次的流程。 兩家外送平台在搶用戶,每個月藍家有 10% 的人跑去橘家、橘家有 20% 的人跑回藍家。 現在藍家市佔只有 10%。

然後有人問你:一直跑下去會停在哪?還是會來回震盪、或者整個爆掉? 你不想真的跑一百次來看 —— 而且就算跑了,你也只知道「這組數字會怎樣」, 換一組參數又要重跑一次。你要的是看一眼那幾個數字就知道結局

那組流動比例擺成一個 2×2 矩陣,就是一台搬運機:餵它一個點(這個月的市佔), 它把那個點搬到別的地方(下個月的市佔),整個平面上每個點都被搬一次。 而這件事跟外送平台無關 —— 任何 2×2 矩陣都是一台搬運機。 問題是,隨便給你一台,它就只長這樣,四個數字擺在你面前:

A = 2112 你看得出它會把東西怎麼樣嗎?拉長?壓扁?轉幾度?翻面?我也看不出來。

所以這一關會照這個順序走,一步都不跳

② 先搞懂那四個數字是哪來的(不然滑桿在調什麼你不會知道) ③ 拿一張橡皮膜,講清楚「骨架」是什麼意思 ④ 一行式子把它寫下來 ⑤ 主實驗,分成四階:一個點 → 四個點 → 36 個點 → 掃描曲線 ⑥⑦⑧ 找到骨架之後能幹嘛(長期行為 / 拆成獨立的軸 / 對準資料) ⑨ 沒有骨架的情況(旋轉)
整關就在問這一句話

有沒有哪個方向,你只把它拉長或壓短、卻完全不把它轉向?

如果有,那幾個方向就是這個動作的骨架:整台機器再複雜,沿著骨架看它就只是「乘一個數字」而已。 而「跑一百次會怎樣」也就變成「一個數字的一百次方是多少」—— 心算就能回答。

這關給你的工具叫 特徵向量 (eigenvector)特徵值 (eigenvalue)。 上面那兩家外送平台的下場, 會用它算完。 (這一關的主角是矩陣=一個動作;資料的特徵向量是下一關的事, 但那是同一把刀 —— 等一下你就會拿它去解剖 03 關那個共變異數矩陣。)

② 矩陣那四個數字,是怎麼長出來的

先把最容易勸退人的那件事解決掉:2112 這四個數字不是天上掉下來的。它們的來歷只有一句話:

一句話版

矩陣的每一欄,就是一根「基礎箭頭」搬家之後的新位置。

平面上只有兩根基礎箭頭,其他所有點都是它們拼出來的:

任何一個點都能用它們寫出來:點 (3, 2) 就是「往右三格、再往上兩格」,也就是 e₁ + 2·e₂

現在假設我告訴你這台機器做了什麼:它把 e₁ 搬到 (2, 1)、 把 e₂ 搬到 (1, 2)。這樣一講,它對其他每一個點做什麼就完全定死了, 因為這台機器不會把加法拆散(這個性質就叫「線性」):

A(x·e₁ + y·e₂) = x·(Ae₁) + y·(Ae₂) 白話:要知道一個點被搬到哪,只要知道兩根基礎箭頭被搬到哪,然後照原本的比例重新拼一次。
所以整台機器的全部資訊 = 兩個新位置 = 四個數字。就這樣,沒有第五個數字。

把那兩個新位置直立著抄下來、一根一欄,就是矩陣:

A = [ Ae₁ │ Ae₂ ] = 2112 第一欄 (2, 1) 讀作「e₁ 搬到 (2, 1)」:上面的 2 是新的 x 座標、下面的 1 是新的 y 座標。
第二欄 (1, 2) 讀作「e₂ 搬到 (1, 2)」。
習慣上這四格叫 a b(上排)、c d(下排),所以 第一欄是 a 跟 c第二欄是 b 跟 d

這就是等一下主實驗那四個滑桿的意思:拉 a、c 是在搬 e₁ 的新家, 拉 b、d 是在搬 e₂ 的新家。不是四個抽象的旋鈕。

這張圖在幹嘛

你會看到什麼:兩根灰虛線是搬家前的 e₁e₂藍實線箭頭Ae₁(e₁ 的新家)、橘實線箭頭Ae₂青點 p 是一個示範點, 綠箭頭 Ap 是它被搬到哪。

你可以動什麼:直接拖藍箭頭和橘箭頭的頭(每次跳 0.1、範圍 ±3)。 拖藍的 → 矩陣第一欄兩格數字跟著變;拖橘的 → 第二欄跟著變。

要看出什麼:矩陣裡的數字就是你手上那兩根箭頭的座標, 而青點 p 被搬到哪完全由這兩根決定(右邊讀數盤把乘法一步步代給你看)。

灰虛線 e₁ / e₂(搬家前) 藍 Ae₁ 橘 Ae₂  青 示範點 p 綠 Ap 綠虛線 Ap 是怎麼被拼出來的

A = ← 左欄=藍箭頭,右欄=橘箭頭
符號它是什麼現在的值
e₁往右一格的基礎箭頭(搬家前)(1, 0)
e₂往上一格的基礎箭頭(搬家前)(0, 1)
Ae₁e₁ 被搬到哪 = 矩陣第一欄(a, c)
Ae₂e₂ 被搬到哪 = 矩陣第二欄(b, d)
p示範用的一個普通點(不是特別的點)
App 被這台機器搬到哪
det A面積放大率(負號=把平面翻面)

所以這一段的結論是:矩陣不是四個神秘數字, 是「兩根基礎箭頭的新地址」抄下來的一張表。看到任何矩陣,先把它的兩欄各讀成一個點, 你就已經知道它在幹嘛了。

③ 從你已經會的東西開始:一張橡皮膜

拿一張橡皮膜,用筆在上面畫滿從中心射出去的箭頭(像太陽的光芒)。現在抓住兩邊,往外拉。

那幾根沒歪的箭頭,就是這個拉法的特徵向量;它變長/變短的倍率就是特徵值 λ (λ 讀作 lambda,就是一個希臘字母,代表一個純數字,沒有別的含意)。 揉麵團也一樣:你朝某個方向壓下去,麵團裡就有那麼一兩條線上的東西只是被拉長,沒有被扭走。

λ = 2 → 這個方向被拉長兩倍
λ = 0.5 → 這個方向被壓成一半(0 < λ < 1 就是壓扁)
λ = −1 → 翻到膜的反面,但還躺在同一條線上
λ = 0 → 這個方向被壓死成一個點(整個維度沒了) λ 只有一件事:倍率。負號=翻面,絕對值=拉長還是壓短。
先講一個容易誤會的點

骨架不是「看起來最長的方向」,是「動作沒有把它轉走的方向」。 這兩件事在對稱矩陣上剛好一樣(等一下你會親眼看到),在歪斜的矩陣上就不一樣了。

所以這一段的結論是:「骨架」=方向沒被轉走的那幾根,「λ」=那根被拉長幾倍。 接下來整關都在找這兩個東西。

④ 用一行式子把上面那句話寫下來

A v = λ v A=那個動作(矩陣,也就是 ② 那兩欄) v=一個方向(任何非零向量)  λ=一個純數字(倍率)
左邊讀作「把 v 餵進機器」,右邊讀作「把 v 乘一個數字」。 等號的意思是:整台機器作用在 v 身上的效果,跟「只把 v 乘一個數字」完全一樣。 這就是「沒有被轉走」的數學寫法。

注意這是一個方程式,不是在定義一個新運算:給你 A,要去哪些 v 和 λ 能讓等號成立。 大部分 v 都不行 —— 這也是為什麼下面要一階一階慢慢找。

⑤ 主實驗:從一個點開始,慢慢找出那根不會歪的箭頭

這一節有四階,請照順序玩。前三階用的都是同一台機器 2112(就是 ② 那台), 到第四階才讓你自己捏矩陣。

階梯 1 / 4

先只拿一個點,看它被搬到哪

不要想特徵向量,先不要。畫面上只有一個點 v。 按「送進 A」,它會被搬到新位置 Av,中間用一條細線連起來 —— 那條線就是「這個點的搬家路線」。

這張圖在幹嘛

你會看到什麼:藍箭頭 v 是你放的那個點; 按下按鈕後出現 橘箭頭 Av(同一個點被 A 搬完的位置), 灰虛線連著搬家前後,灰色弧線標出歪掉幾度

你可以動什麼:拖藍色圓點換一個方向(長度會被固定在畫面裡, 長短完全不影響結論);按鈕可以把 Av 收起來再送一次。

要看出什麼:同一台機器,你把 v 擺在不同角度, 它被歪掉的度數是不一樣的。有些角度歪很多、有些角度歪很少。

v(可拖) 橘 Av 灰虛線 搬家路線 灰弧 歪掉幾度

A = (這一階固定不動)
符號它是什麼現在的值
v你放的那個點(也是一根從原點出發的箭頭)
Avv 被機器 A 搬完之後的位置
θvv 指的角度(從 x 軸逆時針數,度)
|v|v 的長度(兩條直線是「取長度」的意思)

所以這一階的結論是:矩陣對不同方向的點做的事情不一樣, 「歪掉幾度」是會隨角度改變的一個數字。那接下來的問題就很自然: 有沒有哪個角度會讓它歪 0 度?

階梯 2 / 4

一次拿四個點,同時搬

一個一個試太慢。改成同時放四根探針,像一把張開的扇子,每根隔 45°。 整把扇子可以用滑桿一起轉(轉的角度叫 φ,讀作 phi, 意思就是「這把扇子現在轉到哪」)。四根同時送進 A,你一眼就能比較。

這張圖在幹嘛

你會看到什麼:四個灰點是探針(搬家前), 每個點都有一條淡虛線射線從原點穿過它往外延伸 —— 那條射線就是「它原本的方向」。每個點連到自己搬完的位置。 紫色=這一根搬完之後還躺在自己那條射線上

你可以動什麼:只有一個滑桿 φ: 把整把扇子一起轉。四根探針的相對角度永遠不變。

要看出什麼:轉到某些 φ 的時候, 四根裡有兩根會變成紫色(完全不歪),另外兩根照樣歪 —— 「不歪」不是每個方向都有的待遇,只有特定幾個方向才有。

灰點 探針(搬家前) 淡虛線 它自己那條射線  橘 被歪掉的搬家路線 紫 沒歪:沿著自己的射線滑出去

扇子轉了 φ20°
A = (跟階梯 1 同一台)
符號它是什麼現在的值
φ整把扇子轉了幾度(滑桿控制的就是它)
φ+45k第 k 根探針的角度,k = 0,1,2,3
歪掉搬完之後跟原本那條射線差幾度
倍率搬完之後長度變成原本的幾倍
為什麼是隔 45° 的扇子,不是上下左右的十字

因為十字的四根互相垂直,而這台 A 的兩根骨架剛好也互相垂直(等一下會知道為什麼)。 兩個垂直的東西互相比,會變成「要嘛四根同時中、要嘛四根同時不中」,看不出對比。 隔 45° 張開才會出現「有的中、有的沒中」這種好看的畫面。

所以這一階的結論是:不歪的方向是存在的,而且很少。 轉整把扇子只是碰運氣 —— 我們需要一個「一次把所有方向都試過」的辦法。

階梯 3 / 4

那就一次拿 36 個點,把每個方向都試一遍

先講清楚:這 36 個點是什麼

它們不是資料,不是誰的觀測值,也不是散布圖。它們是我刻意排出來的 36 根探針: 在單位圓上每 10° 放一根,10° × 36 = 360°,剛好把一圈的所有方向均勻試過一遍

目的只有一個:一次做完 36 次階梯 1 的實驗,看哪幾根沒被歪掉。 點數 36 沒有玄機,就是「10° 一格」除出來的。

它們搬完之後會排成一個橢圓橢圓本身不是重點(它只是 36 個落點的輪廓,畫出來是為了讓你看到圓被拉扁了)—— 重點是那幾條沿著自己半徑滑動的細線

這張圖在幹嘛

你會看到什麼:虛線圓上 36 個灰點是探針; 每個點拉出一條細線到它搬完的位置;淡輪廓是那 36 個落點連起來的橢圓 (背景參考而已);紫色粗線是「歪得最少」的那幾根, 它們的射線也會一起畫出來。

你可以動什麼:三顆按鈕換三台不同的機器(對稱/純縮放/旋轉 90°), 另一顆可以把紫色標記關掉自己看。

要看出什麼:絕大多數細線都是斜著拉走的; 只有兩處的細線是沿著自己那條半徑滑出去的。換成「旋轉 90°」那台, 一根都不剩

虛線圓 36 根探針站的地方 灰細線 搬家路線  淡輪廓 落點連成的橢圓(不是重點) 紫 歪得最少的那幾根

A =
符號它是什麼現在的值
N = 36探針根數 = 360° ÷ 10°36
單位圓長度 = 1 的所有方向。只借它來擺方向,跟長度無關r = 1
min 歪角36 根裡歪得最少的那一根,歪了幾度
max 歪角歪得最兇的那一根

所以這一階的結論是:36 根探針只是抽樣。 用對稱那台機器時,沒有任何一根剛好命中 —— 骨架在 45°,而探針只站在 40° 和 50°,一左一右夾著它, 真正的骨架就卡在採樣的縫隙裡。想要精確找到它,我們得把角度連續掃過去。

階梯 4 / 4

把 36 次實驗畫成一張成績單:掃描曲線

階梯 3 每一根探針都會產出一個數字:「這個方向被歪掉幾度」。 既然是「一個角度 → 一個數字」,那它就能畫成一張函數圖。 我們乾脆不要只取 36 個,直接把角度從 0° 連續掃到 360°,每一格都算一次,連成一條線。 那條線就是掃描曲線。

這張曲線怎麼讀(四句話)

① 橫軸=你把 v 擺在哪個角度(0°–360°)。 跟左圖那根藍箭頭的角度是同一件事 —— 你拖藍箭頭,曲線上那顆 藍光標就會跟著左右跑。

② 縱軸=把 v 送進 A 之後,它被歪掉幾度(正的是逆時針歪、負的是順時針歪)。 這就是階梯 1 那個灰色弧線量的東西。

③ 碰到 0° 那條綠線=這個角度完全沒被歪(同向,λ > 0); 碰到 ±180° 那兩條粉虛線=被翻到反面但還在同一條線上(λ < 0)。 兩種都算找到骨架

④ 有幾個交點=這台機器有幾根骨架(同一根骨架的正反兩端會各算一個交點, 所以「兩根骨架」看起來是 4 個交點)。曲線完全碰不到那三條線 → 這台機器沒有骨架

這兩張圖在幹嘛(上下要一起看)

你會看到什麼:上圖是幾何現場:藍 v橘 Av、灰弧標歪幾度。下圖是成績單:整圈掃過去的歪角曲線, 藍光標標出你現在站在哪一格。找到骨架時整張上圖會亮起來。

你可以動什麼:拖上圖的藍點轉 v; 四個滑桿 a b c d 改矩陣(a、c 是 Ae₁,b、d 是 Ae₂,見 ); 五顆 preset 一鍵換典型的機器;「丟 36 個點」把階梯 3 疊上來;「我放棄」直接給答案。

要看出什麼:把藍光標推到綠線或粉線上, 上圖的 Av 就會躺回 v 那條線 —— 兩張圖講的是同一件事

v(可拖) 橘 Av(A 作用後)  紫/桃 正確答案的兩根特徵方向(預設藏起來) 淡灰 36 個點與它們的橢圓(可開關)

掃描曲線:橫軸=v 擺在哪個角度,縱軸=Av 被歪掉幾度。 碰到 0° 綠線 ±180° 粉虛線的角度就是骨架。 這條線是解出來的,不是猜的 —— 穿過去的位置就那幾個,不會多也不會少。

a (Ae₁ 的 x)2.0
b (Ae₂ 的 x)1.0
c (Ae₁ 的 y)1.0
d (Ae₂ 的 y)2.0
A =

特徵值 λ₁ , λ₂(真正解出來的答案)

符號它是什麼(這一區用到的每一個都在這)現在的值
A這台機器。四格 a b / c d,左欄是 Ae₁、右欄是 Ae₂
v你拖的那個方向(藍箭頭)。長度不影響任何結論
Avv 被 A 搬完的位置(橘箭頭)
θvv 的角度 = 掃描曲線的橫軸位置
λ₁ , λ₂真正的兩個特徵值(用公式解出來的,不是量的)
λ̂帶帽子=現場量出來的估計值。用你手上這根 v 硬算的倍率 (λ̂ = (Av·v)/(v·v),叫 Rayleigh 商)。v 不是骨架時它是假的, 跟真正的 λ 不一定相等
殘差|Av − λ̂v|:把「最貼近的純縮放」扣掉之後還剩多少。 真的是骨架就會剩 0
tr(A)跡 (trace):左上 + 右下(a + d)。它等於 λ₁ + λ₂
det(A)行列式:ad − bc,就是面積放大率。它等於 λ₁ · λ₂
Δ判別式 = tr(A)² − 4·det(A)。就是二次公式裡根號內那一坨; Δ < 0 就開不出實數根 → 沒有實特徵向量
按下「丟 36 個點」之後看什麼

那 36 個點就是階梯 3 那批探針,疊到主實驗上而已。 細線是「搬家前 → 搬家後」;絕大多數是斜著被拉走, 只有骨架附近那幾根是沿著自己那條半徑滑動的。按「給我答案」會把它們塗成紫/桃色。

(如果 A 把圓放得太大超出畫面,程式會把圓的半徑等比例縮小再畫。 縮放跟 A 可以交換順序,所以形狀完全一樣,不影響你看到的結論。)

所以這一階的結論是:掃描曲線把「找骨架」變成一件用看的事情 —— 曲線碰線的地方就是答案,碰幾次就有幾根。接下來三節在講:找到之後能幹嘛。

⑥ 用途一:預測「一直做下去會怎樣」

先講一個具體到不能再具體的情境,完全不出現矩陣

情境

市面上只有兩家外送平台:藍家橘家, 所有人都在用其中一家。每個月月底大家會重新選一次,長期統計下來是這樣:

  • 這個月用藍家的人:90% 留下10% 跑去橘家
  • 這個月用橘家的人:80% 留下20% 跑去藍家

現在藍家只有 10% 的市佔。一年後呢?十年後呢?藍家會不會歸零?

把上面那四句話直接畫成一張表。直著讀一欄是「這家的人下個月分別去哪」:

這個月是藍家的用戶 這個月是橘家的用戶
下個月人在藍家0.900.20
下個月人在橘家0.100.80

把表頭遮住,剩下四個數字,那就是 T

T = 0.900.200.100.80 T 取自 transition(轉移)。每一欄是「這家的人下個月會跑去哪」 —— 跟 那件事一模一樣,只是這裡的「基礎箭頭」是 「全部人都在藍家」和「全部人都在橘家」這兩種極端狀態。
第一欄 (0.90, 0.10)=藍家的人:九成留下、一成跑掉。 第二欄 (0.20, 0.80)=橘家的人:兩成跑來、八成留下。
每一欄加起來一定是 1(人不會憑空消失,也不會多出來)。

市佔本身寫成一個兩格的向量,下標就是「第幾個月」

s0 = (0.10, 0.90) s 取自 state(狀態)。s₀ —— 第 0 個月(也就是「一開始」)的市佔, 讀作「藍家 10%、橘家 90%」。
s₁ 就是第 1 個月的市佔、s₁₂ 是第 12 個月的。sₖ 是「第 k 個月」的通稱, k 是一個還沒指定的月份編號。
規則只有一條:下個月 = T × 這個月,寫成 sk+1 = T sk

第一步長什麼樣?把數字直接代進去,一格都不跳:

第 1 個月的藍家 = 0.90 × (這個月藍家 0.10) + 0.20 × (這個月橘家 0.90) = 0.090 + 0.180 = 0.270 第 1 個月的橘家 = 0.10 × (這個月藍家 0.10) + 0.80 × (這個月橘家 0.90) = 0.010 + 0.720 = 0.730 讀法:藍家下個月的人 = 「原本藍家的、留下來的九成」+「原本橘家的、跑過來的兩成」。 矩陣乘向量就只是在做這件事而已。

藍家從 10% 一個月就跳到 27%。那第二個月、第三個月…… 會停在哪?自己按。

這張圖在幹嘛

你會看到什麼:橫軸是藍家市佔、縱軸是橘家市佔青點是每一個月的位置(顏色越深=越晚的月份),它們一定落在 x + y = 1 那條虛線上(兩家加起來是全部的人)。 紫線是 T 的 λ = 1 特徵方向,紫圈是它跟那條虛線的交點。

你可以動什麼:「再跑一個月」一步一步走、「一次跑 12 個月」快轉一年、「重置」回到起點。 每按一次,右邊會把那一步的乘法完整代給你看

要看出什麼:青點一路往紫圈爬,而且再也離不開。 那個黏住的位置就是 T 的 λ = 1 特徵向量 —— 「乘了矩陣還是自己」。

青點 每個月的市佔(沿著 x+y=1 這條線走)  綠箭頭 目前的市佔向量 紫 λ = 1 的特徵向量方向(從原點射出去的那條線)

T = s₀ =
符號它是什麼現在的值
T轉移矩陣。每一欄=這家的人下個月會跑去哪,每欄加起來 = 1 [[.90,.20],[.10,.80]]
s₀第 0 個月的市佔(下標=第幾個月)。讀作「藍家 10%、橘家 90%」 (0.10, 0.90)
k已經跑了幾個月
sk第 k 個月的市佔(藍, 橘)
穩態再乘 T 也不會變的那個市佔,就是 λ = 1 的特徵向量
d現在離穩態還有多遠(兩點的直線距離)
d₀一開始(第 0 個月)離穩態多遠
λ₁ , λ₂T 的兩個特徵值。λ₁ = 1 撐住穩態,λ₂ = 0.7 管「偏差衰減得多快」
第 k 月藍平台橘平台 離穩態的距離 dd₀ × 0.7k(預測)

最後兩欄請對著看:實測距離跟「初始距離乘 0.7 的 k 次方」一模一樣。 0.7 不是我硬湊的,它是 T 的第二個特徵值 λ₂。

為什麼可以直接用 λk 預測,不用真的乘 k 次

把起始向量拆成兩根特徵向量的組合(骨架是一組座標,任何向量都能這樣拆):

s₀ = c₁v₁ + c₂v₂
Tks₀ = c₁ λ₁k v₁ + c₂ λ₂k v₂ v₁ / v₂=T 的兩根特徵向量;c₁ / c₂=兩個純數字,是「s₀ 裡各含多少份 v₁ 和 v₂」的配方。
矩陣乘 k 次,在骨架上就只是每根軸各自乘 λ 的 k 次方
這裡 λ₁ = 1(所以 v₁ 那份永遠不變 → 那就是穩態)、 λ₂ = 0.7(所以偏離穩態的那份每個月乘 0.7 → 一路衰減到看不見)。
工程師的原來如此 · PageRank

上面那張表就是 PageRank,只是 Google 那個矩陣有幾十億列: 每個網頁的分數會沿著連結流到它指向的網頁,一直流下去。 你剛剛按十幾下按鈕看到的收斂,Google 叫 power iteration; 收斂到的那個向量就是 λ = 1 的特徵向量,也就是網頁排名。

幾十億階矩陣的特徵向量沒人真的去解特徵多項式 —— 就是像你這樣「一直乘」, 因為其他 λ 的絕對值都比 1 小,乘幾十次就自己消失了。

所以這一節的結論是:只要問題長成「下一步 = 矩陣 × 這一步」, 結局完全由 λ 決定:λ = 1 的那根撐住終點,|λ| < 1 的那幾根負責衰減掉。 不必真的跑一百次。

⑦ 用途二:換一套座標,動作就變簡單(對角化)

同一個動作,看兩次。左邊用你習慣的 x/y 座標,右邊改用骨架當座標軸。 注意右邊:格子還是同一組方向,只是各自被縮放,沒有任何歪斜。

這兩張圖在幹嘛

你會看到什麼:兩張圖都是「一格方格被 A 搬過之後變成什麼形狀」。 淡虛線是搬家前那一格,綠實線是搬完的樣子。 左圖用 e₁e₂ 當格線方向, 右圖改用 v₁v₂(骨架)當格線方向。

你可以動什麼:三顆按鈕換三種矩陣(對稱/歪斜/本來就對角)。

要看出什麼:左圖的正方形被拉成歪的平行四邊形; 右圖那一格只是被拉長/壓短,四個角還是原本的角度 —— 同一個動作,換個座標就沒有歪斜了。

標準座標:淡的是原本的方格,亮的是被 A 搬過之後的格子 —— 正方形被拉成歪的平行四邊形,x 軸y 軸都被轉走了。

特徵座標:改用v₁v₂當格線方向。 同一個 A,現在只做兩件事:v₁ 方向乘 λ₁、v₂ 方向乘 λ₂。 沒有歪斜,兩根軸互不干擾。

符號它是什麼現在的值
v₁ , v₂兩根骨架(特徵向量),已經縮成長度 1
λ₁ , λ₂兩根骨架各自的倍率
P翻譯機:把兩根骨架一欄一欄擺進去(跟 同一招)。 作用是「骨架座標 → 標準座標」
D對角矩陣:只有對角線有東西,就是 λ₁、λ₂。意思是「兩軸各自乘一個數,互不干擾」
P⁻¹反向翻譯機(右上那個小 −1 是「反過來做」的意思):標準座標 → 骨架座標
det A面積放大率,等於 |λ₁ λ₂|
順便把 det 讀出來

兩張圖下緣那個 badge 寫的是面積放大率:淡虛線是原本那一格(左圖就是單位正方形), 實線是它被 A 搬過之後的平行四邊形。面積變成 N 倍,那個 N 就是 |det A|; 而它剛好等於 |λ₁λ₂| —— 兩根骨架各自被拉 λ₁、λ₂ 倍,面積當然就是兩者相乘。

所以 det = 0 的意思是「面積被壓成 0」:圖形塌成一條線(甚至一個點), 代表至少有一根骨架的 λ = 0。塌掉的那個維度回不來,這就是 det = 0 ⇒ 矩陣不可逆的白話版。 階梯 4 讀數盤裡的 det(A) = λ₁·λ₂Δ = tr²−4det 兩列,靠的都是這一件事。

A = P D P−1 整句話讀出來:先翻成骨架的語言、在那邊做兩個獨立的乘法、再翻回來。 換一套語言講同一件事,講完發現它只是兩個乘法。
(P、D、P⁻¹ 各是什麼,看上面那張符號表最後三列。)

順帶一個好處:Ak = P Dk P−1, 而 Dk 只是把對角線各自次方 —— 這就是 用途一能一秒算完「跑一百年」的原因,兩件事是同一件事。

所以這一節的結論是:對角化=換一組看事情的座標,把糾纏在一起的動作拆成兩個獨立的乘法。 矩陣沒變,只是你站的位置變了。

⑧ 用途三:把這把刀對準資料(下一關的門口)

到現在為止,A 一直是我用滑桿捏出來的動作。但03 關結尾那個 共變異數矩陣 C 也是一個 2×2 矩陣 —— 它同樣可以問「有沒有哪個方向不會被轉走」。

下面這顆按鈕會把一份真實資料算出來的共變異數矩陣(用 LAB.M.covMatrix 算, 樣本版 ddof = 1,四捨五入到 0.1 好塞進滑桿)直接灌進階梯 4 的主實驗,並幫你把答案打開:

符號它是什麼
C共變異數矩陣:把一坨資料的「形狀」壓成 2×2(03 關做的事)
ddof = 1算變異數時分母用 n−1 而不是 n(樣本版)。全站統一,換了數字會對不上
n資料點數
v₁ · v₂兩根主軸的內積(01 關)。= 0 就是互相垂直

你會看到兩件事:它是對稱的(b = c,因為 cov(x,y) = cov(y,x)), 所以兩根特徵向量互相垂直;而那兩根垂直的線,就是資料躺著的方向與它的厚度方向。 這正是 PCA 在做的事,我們下一關把它做完。

⑨ 有些動作根本沒有骨架

「一定找得到不轉向的方向」是錯的。把整個平面轉 90°:每一根箭頭都被轉走,一根都不剩。 下面 A = 先轉 θ 度、再乘一個縮放 r。轉一轉滑桿,看掃描曲線 —— 它會整條平移,但永遠碰不到 0° 也碰不到 ±180°

這兩張圖在幹嘛

你會看到什麼:上圖從一根藍箭頭出發, 反覆送進 A 十四次,青點是每一次的落點(越淡=越後面),連起來是一條螺旋。 下圖是同一條掃描曲線(讀法見 階梯 4)。

你可以動什麼:θ 是每一次轉幾度、 r 是每一次長度乘幾倍。

要看出什麼:下圖那條曲線整條是水平的,而且永遠停在 θ 的高度 —— 碰不到 0°、也碰不到 ±180°。沒有任何方向能讓 Av 躺回 v 那條線上。

起始向量 青點 連續作用 14 次的落點(v, Av, A²v, …)

同一條掃描曲線。完全水平、離 0° 與 ±180° 都有距離 —— 沒有任何方向能讓 Av 躺回 v 的那條線上。

旋轉角 θ90°
每步縮放 r1.00
A =
符號它是什麼現在的值
θ每作用一次,整個平面被轉幾度
r每作用一次,長度乘幾倍
Δ判別式 tr² − 4det。負的=開不出實數根
|λ|複數特徵值的絕對值(在複數平面上離原點多遠)。 這裡剛好 = r,管「每一圈是漲還是縮」
i虛數單位(i² = −1)。看到它就代表「這個動作含旋轉」

這時候特徵值變成複數:判別式 Δ = tr(A)² − 4·det(A) < 0,開根號開不出實數。 翻成人話:這個動作本質上含旋轉,在實數的平面上不存在「不轉向的方向」。 複數的實部管「轉多少」,絕對值 |λ| 管「每一圈是漲還是縮」 —— 振盪、交流電、任何週期系統都是這一類。

所以這一節的結論是:「有沒有骨架」是矩陣自己決定的,不是你找得夠不夠努力。 Δ < 0 就是它在跟你說「我含旋轉,別找了」。

⑩ 數學長怎樣

先寫「怎麼驗證一個 v 是不是特徵向量」—— 這只需要 01 關的餘弦:同一條線上,cos = ±1

// ① 驗證:Av 跟 v 是不是躺在同一條線上?
const A  = [[2, 1], [1, 2]];
const v  = { x: 1, y: 1 };
const Av = LAB.M.matVec(A, v);                        // { x: 3, y: 3 }
const c  = LAB.M.cos(v, Av);                          // 1  → 完全同向,v 是特徵向量
const lam = LAB.M.dot(Av, v) / LAB.M.dot(v, v);       // 3  → 倍率 λ(這叫 Rayleigh 商)

// ② 不用猜:直接解特徵多項式 λ² − tr(A)·λ + det(A) = 0
function eigenvalues([[a, b], [c, d]]) {
  const tr = a + d;                 // 跡:對角線相加,等於 λ₁ + λ₂
  const det = a * d - b * c;         // 行列式:面積放大率,等於 λ₁ · λ₂
  const disc = tr * tr - 4 * det;    // 判別式 Δ
  if (disc < 0) return { real: false };   // 開不出實根 → 這動作含旋轉
  const s = Math.sqrt(disc);
  return { real: true, l1: (tr + s) / 2, l2: (tr - s) / 2 };
}
(還沒跑)

那個特徵多項式是推出來的,不是背的。把定義搬到一邊:

Av = λv  ⟹  Av − λv = 0  ⟹  (A − λI)v = 0 I=單位矩陣(什麼都不做的動作,對角線全 1)。最後一行在說: 矩陣 (A − λI) 把一個非零向量 v 壓成了 0。
一個動作能把非零向量壓成 0,代表它把面積壓成 0 —— 也就是 det(A − λI) = 0。把 2×2 的行列式展開,就是 λ² − tr(A)·λ + det(A) = 0
所以:λ 是「讓這個動作變得可以壓死一個維度」的那個倍率

順便把兩個老朋友接起來:λ₁ + λ₂ = tr(A)(對角線相加)、 λ₁ · λ₂ = det(A)(面積放大率)。 所以只要看到 det(A) = 0,就知道至少有一個 λ 是 0 —— 有一個方向被壓死了。

⑪ 工程師的「原來如此」

為什麼工程師看到 λ 先看它的絕對值

任何「這一步的狀態 = 矩陣 × 上一步的狀態」的系統(控制迴路、遞迴濾波器、RNN、物理模擬), 跑久了的行為完全由最大的 |λ| 決定:

  • |λ| < 1 → 每一步都在縮 → 衰減、穩定(震動會停、誤差會收斂)。
  • |λ| = 1 → 不縮不漲 → 永遠振盪(LC 電路、單擺)。
  • |λ| > 1 → 每一步都在漲 → 爆掉(控制系統失控、RNN 梯度爆炸)。

這就是「譜半徑 (spectral radius)」跟 spectral normalization 在深度學習裡出現的原因: 它在鎖最大的 |λ|,免得訊號一層一層放大到爆表。你在 拖 r 那個滑桿看到的螺旋, 就是這三種命運的現場版。

同一招的其他馬甲

PageRank=幾十億階轉移矩陣的 λ = 1 特徵向量(見 )。 結構的自然頻率=質量/勁度矩陣的特徵值開根號,橋樑跟機殼會在哪個頻率共振就是它算出來的。 eigenfaces / embedding 降維=共變異數矩陣的前幾根特徵向量(05 關)。 名字都不一樣,問的是同一句話:這個矩陣的骨架是什麼。

⑫ 踩坑

坑 1

特徵向量是一條線,不是一個點。如果 v 是特徵向量,那 2v、−v、100v 全都是 (A(2v) = 2Av = 2λv = λ(2v))。所以「長度」沒有意義, 慣例是取單位長度,正負號也只是慣例(LAB.M.eig2 固定讓 x 分量為正, 免得每次重算方向就翻面)。你在主實驗裡拖 v 拖多長都不影響有沒有找到。

坑 2

λ 可以是負的,也可以是 0。負的不代表「錯」,代表那個方向被翻到反面 (試試「鏡射」preset,λ = −1)。λ = 0 更嚴重:那個方向被壓死成一個點, 資訊回不來了 —— 而 det(A) = λ₁λ₂ = 0, 這正是「矩陣不可逆」的意思。把「純縮放」的 d 拉到 0 就看得到。

坑 3

不是每個矩陣都有實特徵向量。旋轉就沒有()。 看到複數特徵值不要以為算錯了,那是矩陣在告訴你「我含旋轉」。 好消息:對稱矩陣(b = c)保證有兩根實特徵向量,而且互相垂直 —— 共變異數矩陣天生對稱,所以 PCA 永遠不會遇到這個坑。

坑 4

「兩個特徵值」不等於「兩根特徵向量」。剪切 1101 的特徵值是 λ = 1(重根,兩個),但特徵向量只有 x 軸一根。 這叫退化 (defective),這種矩陣不能對角化(P 湊不出兩個獨立的欄,會是奇異矩陣), 所以 的 preset 裡沒有它。 自己選「剪切」看主實驗的分類欄,它會明講只有一根。

坑 5 · 這一頁最容易上當的地方

「角度看起來很小」不等於「找到了」。選「剪切」那顆 preset, 隨便把 v 擺在第一象限,你會看到 Av 只歪了 2°–3°,肉眼幾乎重合 —— 但它不是骨架

因為剪切很接近「什麼都不做」,它在真骨架旁邊有一整片角度都很小的區域。 所以主實驗的判定用兩道門檻:角度要 < 3.5°,而且殘差 |Av − λ̂v| 要小於 |Av| 的 2%。 讀數盤最後一列就是在給你看第二道門檻過了沒。

⑬ 所以,找到骨架之後到底能幹嘛

這是整關最該記住的一頁。你剛剛花力氣找的那幾根方向,換來的是這三件事 —— 每一件你上面都已經玩過了:

一句話收口:特徵向量把「一個看不懂的矩陣」翻譯成 「幾個方向 + 每個方向一個倍率」。一旦翻譯完成, 預測、拆解、找主軸這三件事就都只剩乘法而已。

⑭ 本頁符號總表(看到不認識的就回來這裡)

符號怎麼讀 / 它是什麼在哪一節解釋
A矩陣,也就是「一台搬運機/一個動作」。四格叫 a b(上排)c d(下排)
e₁ , e₂兩根基礎箭頭 (1,0) 與 (0,1)。下標是「第幾根」
Ae₁ , Ae₂基礎箭頭搬家後的新位置 = 矩陣的第一欄/第二欄
v你手上那個方向(非零向量)。長度不影響任何結論階梯 1
Avv 被 A 搬完的位置。讀作「A 作用在 v 上」階梯 1
θvv 的角度(從 x 軸逆時針數)= 掃描曲線的橫軸階梯 4
φphi。階梯 2 那把探針扇子整體轉了幾度階梯 2
λlambda。倍率:骨架方向被拉長/壓短幾倍。負號=翻面
λ₁ , λ₂兩個特徵值,習慣上 |λ₁| ≥ |λ₂|(大的排前面)階梯 4
λ̂lambda hat。帽子=現場量出來的估計值,用手上這根 v 硬算的倍率 (Av·v)/(v·v)。v 不是骨架時它是假的階梯 4
|v|兩條直線=「取長度」。|Av| 同理階梯 1
tr(A)trace,:a + d(對角線相加)。等於 λ₁ + λ₂階梯 4
det(A)行列式:ad − bc,就是面積放大率。等於 λ₁ · λ₂ 階梯 4 ·
Δdelta,判別式 = tr² − 4det。就是二次公式根號裡那一坨;負的=沒有實特徵向量 階梯 4 ·
殘差|Av − λ̂v|:扣掉「最貼近的純縮放」之後還剩多少。骨架上會剩 0 階梯 4 · 坑 5
Ttransition,轉移矩陣。每一欄=這家的人下個月會跑去哪,每欄加起來 = 1
s₀第 0 個月的市佔(下標就是第幾個月)。s₁ = 第 1 個月、sₖ = 第 k 個月
k第幾步 / 第幾個月。Ak = 做了 k 次
d , d₀離穩態的距離;d₀ 是一開始的距離
c₁ , c₂把 s₀ 拆成 c₁v₁ + c₂v₂ 時的兩個配方數字
P翻譯機:兩根特徵向量一欄一欄擺成的矩陣(骨架座標 → 標準座標)
D對角矩陣:只有對角線有東西(λ₁、λ₂),代表「兩軸各乘一個數、互不干擾」
P⁻¹反向翻譯機(−1 = 反過來做):標準座標 → 骨架座標
I單位矩陣:什麼都不做的動作(對角線全 1)
θ , r⑨ 那台機器的參數:每次轉幾度、每次長度乘幾倍
i虛數單位(i² = −1)。特徵值帶 i = 這個動作含旋轉
C共變異數矩陣:一坨資料的形狀壓成 2×2 · 03 關
ddof = 1算變異數時分母用 n−1(樣本版)。全站統一

⑮ 這關回答了什麼

特徵值 / 特徵向量到底是什麼?

矩陣是一個動作。特徵向量是「這個動作沒有把它轉走」的那幾個方向, 特徵值 λ 是那個方向上的倍率

橡皮膜版本:拉一張畫滿箭頭的橡皮膜,大多數箭頭又長又歪, 只有少數幾根「原地變長/變短、方向不動」—— 那幾根是特徵向量,變長幾倍就是特徵值。 式子只有一行:Av = λv,見

那個矩陣的四個數字到底是怎麼來的?我看不出它為什麼長那樣

每一欄就是一根基礎箭頭搬家後的新位置。 A = [ Ae₁ │ Ae₂ ]:第一欄是「(1,0) 被搬到哪」、第二欄是「(0,1) 被搬到哪」。

因為任何點都能寫成 x·e₁ + y·e₂,而這台機器不拆散加法, 所以知道那兩根去哪,就等於知道全部的點去哪 —— 整台機器只需要四個數字。 在 直接拖那兩根箭頭,四格數字會跟著跳。

主實驗那 36 個點是幹嘛的?畫出來那一圈東西是什麼?

它們不是資料。它們是排在單位圓上、每 10° 一根的探針(10° × 36 = 360°), 目的是「一次把所有方向都試一遍」,看哪幾個方向沒被歪掉。

它們搬完之後排成的那圈橢圓只是落點的輪廓,是背景參考,不是主角。 真正要看的是那幾條沿著自己半徑滑動的細線 —— 那才是骨架。 完整的一步步版本在 階梯 3

上面那條掃描曲線是什麼?怎麼讀?

它是一張成績單:把「v 擺在某個角度 → Av 被歪掉幾度」這件事, 從 0° 到 360° 全部算一遍畫成線。

  • 橫軸=v 擺在哪個角度(跟左圖藍箭頭的角度是同一件事,藍光標會跟著跑)。
  • 縱軸=Av 被歪掉幾度。
  • 碰到 0° 綠線=完全沒歪(λ > 0);碰到 ±180° 粉線=翻面但同一條線(λ < 0)。
  • 有幾個交點=有幾根骨架(一根骨架的正反兩端各算一個交點)。碰不到 = 沒有骨架。

詳細讀法在 階梯 4 那張綠色說明卡。

為什麼要花力氣去找這種特殊向量?找到之後能幹嘛?

因為找到骨架之後,一個矩陣就從「四個看不懂的數字」變成「兩個獨立的乘法」。具體三條:

  1. 把動作拆成互不干擾的軸A = PDP−1, 換座標之後歪斜消失 →
  2. 預測長期行為Ak 在骨架上只是 λk,不用真的乘 k 次 → (PageRank 就是這個)。
  3. 找出資料變異最大的主軸:對共變異數矩陣做這件事,就是 PCA → 05 關

整理版在

s₀、sₖ、T、λ̂ 這些符號各是什麼?

T=轉移矩陣,每一欄是「這家的人下個月會跑去哪」。 s₀=第 0 個月(一開始)的市佔,下標就是第幾個月sₖ=第 k 個月的市佔。 λ̂=帶帽子表示「現場量出來的估計值」,用你手上那根 v 硬算的倍率, v 不是骨架的時候它是假的。

全部符號整理在 ⑭ 本頁符號總表,每一列都標了在哪一節解釋。

特徵值代表什麼?負的、0、大於 1 各是什麼意思?

就是倍率,只有這一件事。

  • λ > 1:這個方向被拉長
  • 0 < λ < 1:被壓短(方向還是原方向)。
  • λ < 0:被翻到反面,還躺在同一條線上(λ = −1 就是純鏡射)。
  • λ = 0:這個方向被壓死成一個點,等於少了一個維度,矩陣不可逆 (因為 det = λ₁λ₂ = 0)。
  • 反覆作用時只看 |λ|:大於 1 爆掉、小於 1 衰減 →
什麼時候會用到特徵值?

只要你的問題裡有「同一個矩陣被反覆作用」或「想知道一坨東西的主要方向」,就是它。

網頁排名(PageRank)、馬可夫鏈的穩態、控制系統會不會失控、橋樑與機殼的共振頻率、 RNN 的梯度爆炸/消失、PCA 與 embedding 降維、圖分割(spectral clustering)、 推薦系統的矩陣分解 —— 全部都在問「這個矩陣的骨架是什麼」。

是不是每個矩陣都有特徵向量?

不是。旋轉矩陣在實數域裡一根都沒有(每個方向都被轉走),特徵值是複數 →

還有一種更陰的:剪切 1101 有實特徵值(λ = 1 重根) 卻只有一根特徵向量,這種叫退化,不能對角化 → 坑 4

對稱矩陣一定有兩根實特徵向量,而且互相垂直 —— 共變異數矩陣正是對稱的, 所以做 PCA 的時候這個坑不存在。

這跟資料的特徵向量是同一件事嗎?

是同一件事,但要先看清楚順序:特徵向量是矩陣才有的東西,一坨資料點沒有特徵向量

流程是:資料 → 算出共變異數矩陣(把形狀壓成 2×2)→ 對那個矩陣找特徵向量 → 得到的方向就是資料的主軸。 所以「資料的特徵向量」是簡稱,中間永遠站著一個矩陣。

先在 按那顆按鈕看一眼,完整版在 05 關;容易搞混的地方另外整理在 全景 01 關的對照表

這關留下什麼洞

我們現在能解剖任何 2×2 矩陣了:問它有沒有不轉向的方向、倍率多少、能不能對角化。

那把這把刀對準 03 關那個共變異數矩陣,會看到什麼? 它是對稱的 → 保證兩根垂直的特徵向量。那兩根到底是資料的什麼?λ 的大小又代表什麼? 下一關把它挖完,順便得到 PCA。

還有一個更大的洞:這一關的 A 全都是方陣(同進同出)而且拆得開。 真實世界的資料表大多是長方形的(1000 個人 × 5 個欄位), 長方形矩陣根本沒有「特徵向量」這種東西 —— 它怎麼拆? 07 關的 SVD 會給答案:轉一下、拉一下、再轉一下。

→ 05 PCA:資料自己的座標軸