Ch 1 Vectors, Matrices, and Linear System 目錄:

Ch 1 - 1
簡單的計算
Octave 可以當作計算機使用,照一般的式子輸入運算符號加減乘除()與指數(), 在輸入窗格中輸入指令,再按下 enter 鍵, Octave 就會算出結果,並顯示在結果窗格。例如:想要計算 2 加上 3 乘以 5 的平方,則輸入
         2 + 3 * 5^2 
      
輸入完成後,按下 enter 鍵, Octave 就會執行輸入的指令,接著輸出結果
         ans = 77
      
注意: Octave 一般會預設將結果儲存在變數 ans 中。

Octave 也可以用括號來標示計算的優先順序,例如
         ( 2 + 3 ) * 7 
      
輸出結果為
         ans = 35
      
常用的函數
另外還有兩個好用的指令,分別為 helpdoc,這兩個指令在有點不確定函數用法時很好用。 help 是簡單查詢,而 doc 是開啟 Octave 的線上參考手冊,除了解釋函數或指令,還會給出更多使用方法以及範例。 像是如果不記得 cosd() 這個函數的意思,就可以輸入
         help cosd
      
然後得到以下結果
          
            -- cosd (X)

               Compute the cosine for each element of X in degrees.

               Returns zero for elements where '(X-90)/180' is an integer
         
      
分號的用途
另外,當某些運算你並不需要知道結果,或只是為了節省螢幕空間,可以在指令的最後加上分號 (;) 舉例來說,如果做這樣的計算
         
            a = 3
            b = 5
            c = 7
            (a + b) * c
      
      
然後得到以下四項結果
         
            a = 3

            b = 5

            c = 7

            ans = 56
         
      
但是
         
            a = 3;
            b = 5;
            c = 7;
            (a + b) * c
         
      
然後卻只會得到一項結果
         
            ans = 56
         
      
如何建構變數
我們可以在 Octave 裡幫變數賦值,然後對變數做運算,例如:
            
               a = 3
               b = (a + 7) / 6
               c = a + b^2 
            
         
如何建構 row and column vectors
用中括號包起來的一串數字即為 Octave 建構向量或是矩陣的方法,矩陣中的元素以逗號或是空白分隔,每個 row 之間已分號分隔。例如要產生一個 row vector,我們可以輸入這樣
            
               A = [0 1 3 -3] 
            
         
或是輸入
            
               A = [0, 1, 3, -3] 
            
         
都可以得到以下的結果
            
               A =

                  0   1   3  -3
            
         
若是輸入
            
               A = [0; 1; 3; -3] 
            
         
則會得到
            
               A =

                  0 
                  1 
                  3
                 -3
            
         
如何調整 vectors
Octave 幫向量的元素編號是從 1 號開始的,就像是我們在課堂上常做的假設 $\vec{a} = [a_1, a_2, a_3, a_4]$, 這裡的 $a_i$,在 Octave 裡會用 a(i) 來表示。 舉例來說:
            
               A = [7 8 2 9] 
               A(4)
            
         
結果為
            
               A =

                  7   8   2   9

               ans = 9
            
         
因此,我們也可以只更改向量中的某一個元素,例如,我們想把已知向量中的第3個元素換掉,我們可以這樣做。
            
               A = [7 8 2 9] 
               A(3) = 1
            
         
結果為
            
               A =

                  7   8   2   9

               A =

                  7   8   1   9
            
         

Ch 1 - 2
向量的 dot product
向量的 dot product 只要利用函數 dot( , ) 即可。可以直接放入兩個向量,或是令成變數再做內積都可以。 例如:我們想做兩個向量 $\vec{v}=[10, 4, -1, 8]$ 跟 $\vec{u} = [-5, -2, 3, -4]$ 的內積,那麼只要輸入
            
               dot( [10, 4, -1, 8], [-5, -2, 3, -4] )
            
         
或是
            
               v = [10, 4, -1, 8]
               u = [-5, -2, 3, -4]
               dot(v, u)
            
         
最終都可以得到答案
            
               ans = -93
            
         
向量的長度( norm / length / magnitude )
向量的 dot product 只要利用函數 norm() 即可。一樣是可以直接放入向量,或是令成變數再放入都可以。 例如:我們想求向量 $\vec{v}=[10, 4, -1, 8]$ 的長度 $|\vec{v}|$,那麼只要輸入
            
               norm( [10, 4, -1, 8] )
            
         
或是
            
               v = [10, 4, -1, 8]
               dot( v )
            
         
最終都可以得到答案
            
               ans = 13.454
            
         
注意一下,由於長度須從開根號得到,所以這邊給出的值只是近似值,也就是 Octave 會把數值四捨五入到小數點後 3 位。(想要更改小數點後面的長度設定,請查閱 format

三角函數計算
這個主要是用來計算兩個向量 $\vec{v}, \vec{u}$ 的夾角,公式是 $$\cos(\theta) =\frac{ \vec{v} \cdot \vec{u} }{ ( \vec{v} \cdot \vec{v} )( \vec{u} \cdot \vec{u} ) } =\frac{ \vec{v} \cdot \vec{u} }{ | \vec{v} |^ 2 | \vec{u} |^2 }$$ $$\theta = \cos^{-1}\left( \frac{ \vec{v} \cdot \vec{u} }{ ( \vec{v} \cdot \vec{v} )( \vec{u} \cdot \vec{u} ) } \right) = \cos^{-1}\left( \frac{ \vec{v} \cdot \vec{u} }{ | \vec{v} |^ 2 | \vec{u} |^2 } \right) $$ 首先我們回憶 1-1 有提過的 $\cos$ 相關的函數,另外請記得 $\pi$ 的寫法就是 pi 我們也知道 $\cos( 60^{\circ} ) = \cos(\frac{\pi}{3}) = 0.5$,因此
            
               cosd( 60 )
               cos( pi / 3 )
            
         
的結果為
            
               ans = 0.5000

               ans = 0.5000
            
         
而求 $\cos^{-1}(0.5)$ 也是一樣有兩種:
            
               acosd( 0.5 )
               acos( 0.5 )
            
         
第一個的結果表示的是 $60^{\circ}$,第二個的結果表示的是 $\frac{\pi}{3}$ 的近似值
            
               ans = 60.000

               ans = 1.0472
            
         

Ch 1 - 3
如何建構矩陣 ( matrix ) 以及加減乘的計算
像是在 1-2 中講過的, Octave 建構向量或是矩陣的方法就是用中括號包起來的一串數字,而矩陣中的元素以逗號或是空白分隔,每個 row 之間已分號分隔。像是這樣
             
               A=[0 1 3 -3; 2 4 5 -1;4 -2 3 5] 
            
         
就可以得到矩陣了
            
               A =

                  0   1   3  -3
                  2   4   5  -1
                  4  -2   3   5
            
         
然後也跟 1-2 時一樣,矩陣內部元素也是有編號的,像是 $A = \begin{bmatrix} a_{1,1} & a_{1,2} & ... & a_{1,n}\\ a_{2,1} & a_{2,2} & ... & a_{2,n}\\ \vdots & \vdots & \ddots & \vdots\\ a_{m,1} & a_{m,2} & ... & a_{m,n}\\ \end{bmatrix}$
其中,在第 i 個 row,第 j 個 column 的元素 $a_{i,j}$,便是以 A(i,j) 來表示的。 像是剛剛上面那個例子中的矩陣 A ,他的 A(2,3) 的值就是 5 。
另外,如果想取出矩陣 A 的第 i 個 row vector,便可以用 A(i,:), 如果想取出矩陣 A 的第 j 個 column vector,便可以用 A(:,j) 舉例來說:
            
               A = [0 1 3 -3; 2 4 5 -1;4 -2 3 5]
               a = A(2,3)
               v = A(:,3)
               u = A(2,:)
         
         
         
            A =

            0   1   3  -3
            2   4   5  -1
            4  -2   3   5

            a = 5

            v =

               3
               5
               3

            u =

               2   4   5  -1
         
         
至於矩陣相乘、矩陣相加減、矩陣的常數乘法都很直觀。
         
         A = [0 1 3; 2 4 5;4 -2 3]
         B = [3 1 3; 2 9 7;4 -6 3]
         C = A + B
         D = 5 * A
         E = A * B
         
         
         
         A =

            0   1   3
            2   4   5
            4  -2   3

         B =

            3   1   3
            2   9   7
            4  -6   3

         C =

            3    2    6
            4   13   12
            8   -8    6

         D =

            0    5   15
            10   20   25
            20  -10   15

         E =

            14   -9   16
            34    8   49
            20  -32    7

         
         
當你打完一個矩陣,但是忘記它的尺寸 (size) 的時候,你可以在 Octave 裡查詢,只要使用 size()就可以
         
         A = [0 1 3 8 1; 2 4 5 1 0;4 -2 3 6 7]
         size(A)
         
         
         
         A =

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

         ans =

            3   5
         
         

如何建構 zero matrix 及 identity matrix

所謂的零矩陣(zero matrix),也就是所有元素都是 0 的矩陣,一個 $m \times n$ 的 zero matrix 即為 zeros(m,n), 而一個 $n \times n$ 的 zero matrix 可以寫成 zeros(n,n) 或者是簡單的 zeros(n) 都可以。

   
   A = zeros(2,4)
   B = zeros(3)
   
   
   
   A =

      0   0   0   0
      0   0   0   0

   B =

      0   0   0
      0   0   0
      0   0   0
   
   
所謂的 identity matrix,根據我們課本上的定義,是一個 $n\times n$ 矩陣,其中主對角線 (左上到右下) 上的元素為 1 ,其餘的元素為 0 。 在 Octave 上會用 eye(n) 表示 $n\times n$ identity matrix 。 不過 Octave 也支援使用 eye(m,n) 形式的矩陣。同學們可以自己用來乘上其他矩陣試試。
   
   A = eye(3)
   B = eye(2,4)
   C = eye(4,2)
   
   
   
   A =

   Diagonal Matrix

      1   0   0
      0   1   0
      0   0   1

   B =

   Diagonal Matrix

      1   0   0   0
      0   1   0   0

   C =

   Diagonal Matrix

      1   0
      0   1
      0   0
      0   0
   
   

如何建構矩陣的 transpose matrix
一個矩陣的 transpose matrix 就是把它的行列互換,而在 Octave 裡的表示方式就是使用 transpose( ),或是當矩陣裡的係數均為實數的時候,可以也可以只幫矩陣加上一個'
   
   A = [1 2 3 4]
   B = transpose(A)
   C = A'
   
   
   
   A =

      1   2   3   4

   B =

      1
      2
      3
      4

   C =

      1
      2
      3
      4
   
   

Ch 1 - 4
找尋矩陣的 reduced row-echelon form (rref)
給定矩陣之後,只要使用rref() 即可找出矩陣的 reduced row-echelon form。像是 1-4 的習題第 5 題。只要輸入
   
   A = [-1 3 0 1 4;1 -3 0 0 -1;2 -6 2 4 0;0 0 1 3 -4]
   rref(A)
   
   
就可以輕鬆算出答案了。
   
   A =

     -1   3   0   1   4
      1  -3   0   0  -1
      2  -6   2   4   0
      0   0   1   3  -4

   ans =

      1  -3   0   0   0
      0   0   1   0   0
      0   0   0   1   0
      0   0   0   0   1
   
   
不過求聯立方方程組的解,這部分就還是要麻煩各位同學自行判斷了。

Ch 1 - 5
找矩陣的 inverse 以及解聯立方程組
矩陣的 inverse 是使用 inv()像是課本 1-5 的例子 4,就是這樣計算的:
      
      A = [ 1 3 -2;2 5 -3; -3 2 -4]
      inv(A)
      
      
就可以輕鬆算出答案了。
      
      A =

         1    3   -2
         2    5   -3
        -3    2   -4

      ans =

          14    -8   -1
         -17    10    1
         -19    11    1
      
      
或者是利用 rref 的性質
      
      A = [ 1 3 -2;2 5 -3; -3 2 -4]
      B = [ A, eye(3)]
      rref(B)
      
      
也可以看出 A 的 inverse matrix 就出現在 rref(B) 的右半側。
      
      A =

         1   3  -2
         2   5  -3
        -3   2  -4

      B =

         1   3  -2   1   0   0
         2   5  -3   0   1   0
        -3   2  -4   0   0   1

      ans =

         1   0   0    14   -8   -1
         0   1   0   -17   10    1
         0   0   1   -19   11    1
      
      
不過像是課本 1-5 例題 2 題這種給定 $A\vec{x}=\vec{b}$ 要求 $\vec{x}=A^{-1}\vec{b}$ 的題目,我們有兩種做法: 首先是確認我們的矩陣是否有 inverse matrix,確定好了之後,我們可以用 inv(A) * b 或者是 A \ b 來求解。
         
            A = [2 9;1 4]
            b = [-5; 7]
            v = A \ b
            u = inv(A) * b
         
      
看得出來,這兩種算法得到的答案是一樣的。
         
            A =

               2   9
               1   4

            b =

               -5
                7

            v =

               83
              -19

            u =

               83
              -19