普策爾算法(Putzer's algorithm)
/ POOT-zer /
計算 e^(At) 的各種特徵向量機制都共享一個惱人之處:你得找特徵向量,而特徵值重複時還得搜尋廣義特徵向量。普策爾算法徹底繞開了這點。它僅憑特徵值(特徵多項式的 n 個根)就算出 e^(At),不需特徵向量、不需對角化、也不需約當形。對手算的 2×2 或 3×3 系統,它往往是最快又可靠的路徑。
此法把 e^(At) 寫成和式 r_1(t) P_0 + r_2(t) P_1 + ... + r_n(t) P_(n-1),其中矩陣 P_k 逐步累積構造,純量 r_k(t) 則藉解一串簡單的一階線性方程求得。具體地,設 P_0 = I,再以 P_k = (A - lambda_k I) P_(k-1) 定義下一個矩陣,依任一固定次序走過特徵值 lambda_1, ..., lambda_n(允許重複,無需特殊處理)。純量函數來自級聯 r_1' = lambda_1 r_1 配 r_1(0) = 1,其後 r_k' = lambda_k r_k + r_(k-1) 配 r_k(0) = 0,每一個都是一行的一階線性常微分方程,用積分因子解之,把上一個答案餵進下一個。組裝這個加權和,你便精確得到 e^(At)。
普策爾真正的長處在於:它處理重特徵值與複數特徵值毫無額外情形,同一套遞推就應付了本會要求約當形的虧損矩陣,並透過級聯自動產生那些 t e^(lambda t) 項。代價是它對大 n 擴展性差(積分鏈會變長),故它是手算與小系統的工具,而非數值主力。但對教科書裡的 2×2 與 3×3,它難以被超越。
對 A = [0, 1; -1, 0],特徵值為 i 與 -i。取 lambda_1 = i:r_1' = i r_1、r_1(0) = 1 得 r_1 = e^(it)。再 r_2' = -i r_2 + e^(it)、r_2(0) = 0;解得 r_2 = (e^(it) - e^(-it))/(2i) = sin t。以 P_0 = I、P_1 = A - i I,和式 r_1 P_0 + r_2 P_1 化簡(虛部相消)為 [cos t, sin t; -sin t, cos t],即旋轉,全程未算任何特徵向量。
普策爾只需特徵值;一串簡短的一階常微分方程級聯供給係數,重根與複根一併涵蓋。
普策爾需要特徵值但不需要特徵向量,這正是它對虧損矩陣特別出色的原因;其弱點在規模,積分鏈隨 n 變長,故它是小型手算法,而非大型系統的數值法。