Matlab 提供一些敘述統計的函式。包括總和 sum、最大值 max、最小值 min、
平均數 mean、中位數 median、取樣標準差 std。

>> x = [4 9 0 4 1 10 3 8];
>> sum(x)

ans =

    39

>> max(x)

ans =

    10

>> min(x)

ans =

     0

>> mean(x)

ans =

    4.8750

>> std(x)

ans =

    3.7201

這些敘述統計函式可以作用在向量、序列上,其意義相同。
但是如果作用在矩陣上,意思是對矩陣中的每一行做統計的意思。

>> A = [4 6; 9 6; 0 2; 4 8; 1 0; 10 10; 3 7; 8 7]

A =

     4     6
     9     6
     0     2
     4     8
     1     0
    10    10
     3     7
     8     7

>> sum(A)

ans =

    39    46

>> max(A)

ans =

    10    10

>> mean(A)

ans =

    4.8750    5.7500

一個與統計非常相關的函式是排序 sort。Matlab 只對數值排序,
而且必定是從小排到大。如果作用在矩陣上,意思是將每一行分別排序。

>> sort(x)

ans =

     0     1     3     4     4     8     9    10

>> sort(A)

ans =

     0     0
     1     2
     3     6
     4     6
     4     7
     8     7
     9     8
    10    10

如果要對列做統計或排序呢?那可以將這些函式作用在轉置矩陣上。
Matlab 的轉置符號是 '

>> x'

ans =

     4
     9
     0
     4
     1
    10
     3
     8

>> A'

ans =

     4     9     0     4     1    10     3     8
     6     6     2     8     0    10     7     7

>> sort(A')

ans =

     4     6     0     4     0    10     3     7
     6     9     2     8     1    10     7     8

>> B = sort(A'); B'

ans =

     4     6
     6     9
     0     2
     4     8
     0     1
    10    10
     3     7
     7     8

一列可以寫兩個以上的指令,如果用分號隔開,則前面的指令不輸出計算結果。
如果用逗點隔開,則前面的指令輸出計算結果。

>> 1+1, 1+2; 1+3

ans =

     2


ans =

     4

當 Matlab 發現需要進入複數域的時候,它自動會做。

>> sqrt(-4)

ans =

        0 + 2.0000i

如果要自己製造複數,可以說

>> i=sqrt(-1); c = 2 + 3*i

c =

   2.0000 + 3.0000i

或者

>> c = complex(2,3)

c =

   2.0000 + 3.0000i

純量乘矩陣的意義,是將純量與矩陣中的每個元素相乘。所以

>> A = [1 2; 2 1]; B = [3 4; 5 6]; C = A + B*i

C =

   1.0000 + 3.0000i   2.0000 + 4.0000i
   2.0000 + 5.0000i   1.0000 + 6.0000i

現在我們要知道,Matlab 的 ' 符號其實是做 Hermittian 的意思,不只是轉置

>> C'

ans =

   1.0000 - 3.0000i   2.0000 - 5.0000i
   2.0000 - 4.0000i   1.0000 - 6.0000i

如果要只做轉置,應該用 .' 符號

>> C.'

ans =

   1.0000 + 3.0000i   2.0000 + 5.0000i
   2.0000 + 4.0000i   1.0000 + 6.0000i

計算向量的歐幾里得長度,至少有三種方法可用。

>> sqrt(x * x')

ans =

   16.9411

>> sqrt(dot(x,x))

ans =

   16.9411

>> norm(x)

ans =

   16.9411

矩陣本來沒有除法,但是如果有逆矩陣與矩陣相乘的情形,
Matlab 可以將它寫成除法。但是因為矩陣乘法沒有交換律,
所以要定義兩種方向的除法。$A^{-1} B$ 寫做 A\B,
而 $B A^{-1}$ 寫做 B/A。當然,相乘雙方的矩陣維度要合格才能乘。

>> A=[-3 0 1; 2 5 -7; -1 4 8]

A =

    -3     0     1
     2     5    -7
    -1     4     8

>> b=[1; 2; 3]

b =

     1
     2
     3

若要求 A*x = b 的解 x ,則是

>> x = A\b

x =

   -0.3194
    0.5864
    0.0419

我們可以檢查計算的殘量 (residual),注意,以下計算的不是誤差 (error),
細節留到矩陣計算的課再談。

>> A*x - b

ans =

   1.0e-15 *

         0
   -0.4441
   -0.4441

它們都是 $10^{-15}$ 左右的數,這些數已經很小,小到可以認為是 0 的地步。
數值解 x 幾乎永遠不可能等於真正的解,總會有些誤差。
當殘量很小的時候,我們通常就相信誤差也很小。

線性聯立方程式可能有唯一解、無解、無窮多組解的狀況。
Matlab 的除法,可以應付所有這些狀況。
詳情也要留到矩陣計算那門課才能談。

兩個維度一樣的矩陣,可以用 ./ 做對應項相除。

>> [1 3 5] ./ [2 6 10]

ans =

    0.5000    0.5000    0.5000

其實,純量與矩陣之間,也可以用 ./ 和 *、+、- 符號做簡便的對應項相除、
相乘、相加、相減。

>> 1 ./ [1 2 3] 

ans =

    1.0000    0.5000    0.3333

>> 1 + [1 2 3]

ans =

     2     3     4

>> [1 2 3] - 1

ans =

     0     1     2

求逆矩陣的函式是 inv,但是除法運算比求逆矩陣要有效率得多。
所以,除非絕對有必要,否則應該從此刻起,謹記:不要用 inv 函式。

矩陣的特徵值和特徵向量,都可以用 eig 函式求得。

>> eig(A)

ans =

  -2.8601          
   6.4300 + 5.0434i
   6.4300 - 5.0434i

這是 A 的三個特徵值。

>> [V,D] = eig(A);

則 D 是一個對角線矩陣,其對角線元素就是 A 的特徵值。
而 V 是一個方陣,它的第 k 行就是對應 D(k,k) 的特徵向量。
特徵向量有無限多個,Matlab 取的是長度為 1 的正規 (normal) 特徵向量。

>> D

D =

  -2.8601                  0                  0          
        0             6.4300 + 5.0434i        0          
        0                  0             6.4300 - 5.0434i

>> V

V =

   0.9823            -0.0055 + 0.0565i  -0.0055 - 0.0565i
  -0.1275            -0.5062 - 0.6094i  -0.5062 + 0.6094i
   0.1374            -0.3372 + 0.5054i  -0.3372 - 0.5054i

求矩陣行列式、階數 (rank)、對角線和 (trace) 的指令分別是 det, rank, trace。
請讀者自己實驗。