製造特殊矩陣--亂陣與魔方陣

Matlab 內建一個「亂數產生器」 (random number generator)。 所謂亂數,簡單地說,就是一批看似沒有關係、亂七八糟的數。 但是,電腦中的亂數其實都由程式語言計算出來,所以其實都是有規則的。 因此,它們其實不是真的沒有關係,只是表面上看起來亂七八糟而已。 為了這個原因,有些人稱電腦產生的亂數為「擬亂數」或「假亂數」 (pseudo random numbers)。 如果要「隨便」找一個矩陣或向量來做計算的實驗, 我們便需要亂數矩陣。

Matlab 的 rand( ) 函式會呼叫其內建的亂數產生器來製造亂數矩陣。 例如

rand(2)
製造一個 2 維方陣,它的元素都是「隨便」舉出來的數。 同理,
rand(1,3), rand(3,1), rand(2,3)
依序產生一個 3 維序列、一個 3 維向量、一個 2 乘 3 矩陣, 它們的元素都好像互相沒有關係。

再一個有趣的函式會造出魔方陣來。 所謂魔方陣就是 n 乘 n 的方陣, n > 2, 方陣內的元素是 1, 2, 3, ..., n2 這些整數各出現恰好一次, 使得每一行,每一列,對角線的元素和都一樣。 例如

magic(3)
就產生 3x3 的魔方陣。

注意,Matlab 的函式都像函數一樣,可以一個套一個,組成合成函數。 例如

det(magic(3))
計算 3x3 魔方陣的行列式,而
rank(rand(4))
計算「隨便」一個 4x4 方陣的階數。

習題

  1. 做一些實驗,回答以下問題。隨便舉出一個方陣,其為可逆方陣的機率比較大、 還是不可逆的機率比較大? 更進一步,您估計「隨便」找一個方陣,它是不可逆方陣的機率是多少?
  2. 做一些實驗,回答以下問題。 令 A 和 B 是維度相同的兩個方陣。請問 A*B 和 B*A 是否相等?
  3. 如何「隨便」製造一個複數矩陣?
  4. 做一些實驗,回答以下問題。 令 A 是一個複數方陣,B = A'*A (B = AHA)。 請觀察 B 的主對角線元素,您能夠提出什麼理論? 您能不能證明這個理論?
  5. 計算 n 階魔方陣的行列式,n=3, 4, 5,..., 16
  6. 做一些實驗,回答以下問題。 魔方陣是否全都是可逆矩陣?或者其逆矩陣有何性質?
[BCC16-B]
單維彰 (2001/10/03) --- 01/10/10 (單), 03/04/10 (單)
[Prev] [Next] [Up]