Matlab 基礎知識-3
矩陣 (Matrices)
變數 (Variables) 在給予陣列賦值時,需以方括號 []
作為開頭和結尾,以英文逗號 ,
或空格分割同行元素,以英文分號 ;
分割各列。
例如在 Command Window 裡輸入
1 | % 以下為輸入指令 |
同時 Workspace 會出現田字形變數 a,說明 a 為數值型變數。
向量 (Vectors) & 數值 (Numeric)
向量 (Vectors) & 數值 (Numeric) 在 Matlab中,兩者可以視為特殊矩陣。
向量 (Vectors)
a=[1 2]
對應為列向量 (Row)。
1 | % 以下為輸入指令 |
a=[1;2]
對應為行向量 (Column)。
1 | % 以下為輸入指令 |
數值 (Numeric)
在對單一數值 (Numeric) 做變數宣告時 a=[1]
,可以簡寫為 a=1
。
向量 (Vectors) & 數值 (Numeric) 運算方式
向量 (Vectors) & 數值 (Numeric) 都是矩陣 (Matrices),矩陣之間最基本的運算有加、減、乘、除、次方、轉置,運算符分別對應的是+
、-
、*
、/
、^
、’
,與數學中一般表示無異,後續說明矩陣的運算方式。
先設立變數 a=[1 2]
、b=[1 3]
、c=[1;2]
1 | % 以下為輸入指令 |
矩陣加減法
矩陣加減法與一般的數學計算沒什麼不同,但值得注意的是,不同階的矩陣,在新版的 Matlab 中,會自動擴展矩陣進行計算,以下為範例
設 a=[1 2]
、b=[1 3]
、c=[1;2]
1 | % 以下為輸入指令 |
矩陣乘除法
矩陣乘法只有第一個矩陣的行數等於第二個矩陣的列數時,才能進行,以下為範例
設 a=[1 2]
、b=[1 3]
、c=[1;2]
1 | % 以下為輸入指令 |
1 | % 以下為輸入指令 |
另外也可以以下方式進行計算
1 | % 以下為輸入指令 |
此外矩陣與數的乘除,由於數可以看做 1*1 的矩陣,計算方式如下
1 | % 以下為輸入指令 |
次方
如果 A 為方陣正數,則 A^p
可以將 A 乘以其自身 p 次方
1 | % 以下為輸入指令 |
如果 A 為方陣負數,則 A^(-p)
可以將 A 乘以其自身 -p 次方
1 | % 以下為輸入指令 |
另外元素 (element) 之間,也可以用次方做計算,計算方式如下
1 | % 以下為輸入指令 |
特殊運算符號
Matlab 提供了一些特殊的運算符號,除了剛剛所提到的點乘 .*
,還有其他例如點除 ./
和點方 .^
,這些運算符在本身的運算符前加一個點,這些運算符有很多叫法,比如 .*
,一般稱為點乘、元素乘、數乘,這些叫法都是為了讓這個運算符區別於普通的乘法。簡單而言,這些運算的含義是將矩陣作為一般的數來進行運算。
- 點計算是數組的運算,不加點是矩陣的運算
- 點乘除要求參與運算的兩個向量兩必須是維數相同,是對應元素的相乘除
- 不加點表示的是矩陣相乘除(除的時候通過逆矩陣來實現),要求內維相同,也就是前一個矩陣的行的維數等於後一個矩陣的列的維數。
.*
運算符號執行按元素乘法,允許將兩個大小相同的數組的對應元素相乘
設 a=[1 2]
、b=[1 3]
、c=[1;2]
1 | % 以下為輸入指令 |
1 | % 以下為輸入指令 |
轉置
任何維度的矩陣都可以進行轉置運算
設 a=[1 2;3 4]
,其值顯示如下
1 | a = |
1 | % 以下為輸入指令 |
矩陣提值
如果我們想要提取矩陣中的特定數值,可以以下列方式進行
設 a=[1:3;4:6]
,其值顯示如下
1 | a = |
於變數後面加圓括號,在圓括號中就可以指定想要提取矩陣位置的數值 (稱為序數),e.g. b=a(2,3)
,範例如下
1 | % 以下為輸入指令 |
也可以直接提取矩陣 a 的特定值,e.g. a(2,3)
1 | % 以下為輸入指令 |
提取特定位置特定數量的值,e.g. a(2,1:2)
1 | % 以下為輸入指令 |
修改矩陣部分數值方法
設 a=[1:3;4:6]
,其值顯示如下
1 | a = |
可以指定替換矩陣特定位置的值,e.g. 將矩陣 a 第一列第二行的值替換為 1,其值顯示如下
1 | % 以下為輸入指令 |
也可以新增特定位置的值,e.g 在第二列第八行新增一個值為 10,其值顯示如下
1 | % 以下為輸入指令 |
另外也可以在原矩陣新增一列 (行) 陣列
1 | % 以下為輸入指令 |
如果想要刪去特定值可以以 []
做為空集合刪除
1 | % 以下為輸入指令 |
想要刪除特定行或列,可以以:
做為特定的「整行」或「整列」做刪除,其中這裡的:
代表全部
1 | % 以下為輸入指令 |
如欲將多個元素進行替換,可輸入指令 a([1 2],[1 2])=[1 2;3 4]
,其值會更改如下
1 | % 以下為輸入指令 |
end 指令
設a=[1:3;4:6;7:9]
1 | a = |
輸入指令 x = a(end,2)
,其中 end 表示終點,這句指令描述取得第二行最後一列的數
1 | % 以下為輸入指令 |
輸入指令 a(1:end,1)
,其中 end 表示終點,範例如下
1 | % 以下為輸入指令 |
1 | % 另一個範例 |
如單純需要取某一行所有的值,其指令可簡寫如下,這裡的冒號:
代表從頭到尾
1 | % 以下為輸入指令 |
另外算術運算可與 end
結合使用
1 | % 以下為輸入指令 |
分塊矩陣
分塊矩陣可以將兩個矩陣擺放在一起形成一個矩陣
設a=[1:3;4:6;7:9]
1 | a = |
輸入指令 b=[a a]
1 | % 以下為輸入指令 |
::這種計算法方式需滿足矩陣行列數要求::
以下為錯誤範例
1 | % 以下為輸入指令 |
符號矩陣
在進行符號運算之前,我們可用 syms
指令來定義符號變數
1 | % 以下為輸入指令 |
Workspace 會顯示
這代表我們獲得了一個符號矩陣 a