跳轉到內容

線性代數/主題:計算行列式的速度

來自華夏公益教科書,開放書籍,開放世界
線性代數
 ← 主題:克萊姆法則 主題:計算行列式的速度 主題:射影幾何 → 

用於計算行列式的排列展開公式對於證明定理很有用,但使用行操作的方法對於找到大型矩陣的行列式要好得多。我們可以透過考慮計算機演算法設計人員所使用的算術運算次數來使該陳述精確。

演算法的速度是透過找到計算機在輸入資料集大小增長時所花費的時間如何增長來衡量的。例如,如果我們將輸入資料集的大小增加十倍,從一個 行矩陣到一個 行矩陣,或者從 ?演算法所花費的時間是增加了十倍,還是一百倍,還是一千倍?也就是說,演算法所花費的時間與資料集的大小成正比,還是與該大小的平方成正比,還是與該大小的立方成正比等等?

回想一下用於行列式的排列展開公式。

個不同的 -排列。對於任何大小的數字 ,這是一個很大的值;例如,即使 只有 ,那麼展開式有 項,所有這些項都是透過將 個條目相乘得到的。這是一個非常大的乘法次數(例如,(Knuth 1988) 認為 步是一個粗略的實際計算極限)。階乘函式的增長速度快於平方函式。它比立方函式、四次方函式或任何多項式函式的增長速度都快。(我們可以透過注意到階乘函式中前兩個因子的乘積為 ,對於較大的 ,它近似於 ,然後乘以更多因子會使它變得更大。同樣的論點適用於立方函式等等。)因此,一個被程式設計為使用排列展開公式的計算機,它執行的操作次數大於或等於行數的階乘,隨著其輸入資料集的增長,將會花費很長時間。

相比之下,行減少方法所花費的時間並沒有那麼快。這段行減少程式碼片段是用 FORTRAN 語言編寫的。矩陣儲存在 陣列 A 中。對於每個 ROW,程式中未顯示的部分已經找到了主元條目 。現在程式進行行主元操作。

(這段程式碼片段僅供說明,不完整。但是,分析包括所有測試和子情況的完成版本會更復雜,但最終結論基本相同。)

PIVINV=1.0/A(ROW,COL)
DO 10 I=ROW+1, N
DO 20 J=I, N
A(I,J)=A(I,J)-PIVINV*A(ROW,J)
20 CONTINUE
10 CONTINUE

最外層迴圈(未顯示)遍歷 行。對於每一行,巢狀的 迴圈(如上圖所示)對位於主元條目下方和右側的 A 中的條目執行算術運算。假設主元位於預期位置,即 。那麼,在主元下方和右側有 個條目。平均而言,ROW 將是 。因此,我們估計算術運算將執行約 次,也就是說,其執行時間與方程數量的平方成正比。考慮到未顯示的外迴圈,我們估計算法的執行時間與方程數量的立方成正比。

找到計算行列式的最快演算法是當前研究的主題。已知的演算法在第二和第三次冪之間執行。

這些速度估計有助於我們瞭解演算法的執行速度。執行時間與資料集大小成正比的演算法速度很快,執行時間與資料集大小的平方成正比的演算法速度較慢,但通常非常實用,而執行時間與資料集大小的立方成正比的演算法對於不太大的輸入資料仍然具有合理的執行速度。但是,執行時間(大於或等於)資料集大小的階乘的演算法對於任何可觀大小的輸入都不實用。

除了這裡討論的兩種方法之外,還有其他方法用於計算行列式。這些超出了我們的範圍。儘管如此,這兩種計算行列式方法的對比表明,儘管在原則上它們給出相同的答案,但在實踐中,我們的目標是選擇速度更快的那個。

大多數這些問題都假定可以訪問計算機。

問題 1

計算機系統生成隨機數(當然,這些只是偽隨機數,因為它們是由演算法生成的,但它們通過了隨機性的許多合理統計測試)。

  1. 用隨機數填充一個 陣列(例如,在範圍 中)。看看它是否奇異。重複這個實驗幾次。奇異矩陣是常見的嗎還是罕見的嗎(從這個意義上講)?
  2. 計時你的計算機代數系統找到十個 隨機數陣列的行列式。找到每個陣列的平均時間。對 陣列、 陣列和 陣列重複上一步。(請注意,當陣列奇異時,有時可以很快地發現它是奇異的,例如,如果第一行等於第二行。根據你對第一步的回答,你認為奇異系統在你的平均值中起著重要作用嗎?
  3. 繪製輸入大小與平均時間的關係圖。
問題 2

使用上面討論的兩種方法手動計算這些行列式。

對於每種方法,計算每個情況下的乘法和除法次數。(在計算機中,乘法和除法比加法和減法花費的時間長得多,因此演算法設計人員更擔心它們。)

問題 3

你能想到哪種 陣列,能讓你的計算機系統花費最長時間進行化簡?最短時間呢?

問題 4

編寫剩下的 FORTRAN 程式,以實現透過高斯方法計算行列式的直觀方法。(不要測試零樞軸。)比較你編寫的程式碼和你使用的計算機代數系統程式碼的速度。

問題 5

FORTRAN 語言規範要求陣列以“按列”方式儲存,即,整個第一列連續儲存,然後是第二列,依此類推。給出的程式碼片段利用了這一點嗎?或者可以重新編寫程式碼使其更快,透過利用計算機從連續位置提取資料的速度更快這一特點?

解答

參考資料

[編輯 | 編輯原始碼]
  • Knuth, Donald E. (1988), The Art of Computer Programming, Addison Wesley.
線性代數
 ← 主題:克萊姆法則 主題:計算行列式的速度 主題:射影幾何 → 
華夏公益教科書