Matlab運算符
運算符是一個符號,它告訴編譯器執行特定的數學或邏輯操作。 MATLAB主要用於整個矩陣和陣列的操作。因此,MATLAB中的運算符既可用於標量數據也可用於非標量數據。MATLAB允許以下類型的基本操作 -
- 算術運算符
- 關係運算符
- 邏輯運算符
- 按位運算符
- 集合運算符
下面我們來一個一個地學習。
算術運算符
MATLAB允許兩種不同類型的算術運算 -
- 矩陣算術運算
- 數組算術運算
矩陣算術運算與線性代數中定義的相同。在一維和多維數組中,逐個元素執行數組運算。
矩陣運算符和數組運算符由句點符號(.
)區分。 然而,由於對於矩陣和陣列的加減運算是相同的,因此對於這兩種情況,運算符相同。下表簡要說明了算術運算符 -
算術運算符示例代碼
運算符
描述說明
+
加法或一元加法運算。A + B
表示相加存儲在變量A
和B
中的值。A
和B
必須具有相同的大小,除非是標量。 標量可以添加到任何大小的矩陣。
-
減法或一元減法運算。 A-B
表示從A
中減去B
的值。A
和B
必須具有相同的大小,除非是標量。可以從任何大小的矩陣中減去標量。
*
矩陣乘法。 C = A * B
是矩陣A
和B
的線性代數乘積。更準確地說,執行公式:
,對於非標量A
和B
,A
的列數必須等於B
的行數。標量可以乘以任何大小的矩陣。
.*
陣列乘法。 A .* B
是數組A
和B
的逐個元素乘積。A
和B
必須具有相同的大小,除非它們之一是標量。
/
數組乘法。A .* B
是數組A
和B
的逐個元素乘積。A
和B
必須具有相同的大小,除非它們之一是標量。
./
數組右除。A./B
是具有元素A(i,j)/ B(i,j)
的矩陣。 A
和B
必須具有相同的大小,除非它們之一是標量。
\
反斜槓或數組左除。如果A
是一個方陣,A \ B
與inv(A)* B
大致相同,除了以不同的方式計算。如果A
是n×n
矩陣,B
是具有n
個分量的列向量或具有若干這樣的列的矩陣,則X = A \ B
是方程AX = B
的解。如果A是不規則或幾乎單數,將顯示警告消息。
.\
陣列左除。A .\ B
是具有元素B(i,j)/ A(i,j)
的矩陣。A
和B
必須具有相同的大小,除非它們之一是標量。
^
矩陣 X ^ p
是X
的P
次冪,如果p
是標量。 如果p
是整數,則通過重複平方來計算冪值。 如果整數爲負,則X
首先倒置。 對於p
的其他值,計算涉及特徵值和特徵向量,使得如果[V,D] = eig(X)
,則X ^ p = V * D. ^ p / V
。
.^
陣列冪值, A ^ B
是B(i,j)
到A(i,j)
的冪矩陣。A
和B
必須具有相同的大小,除非它們之一是標量。
'
矩陣轉置。 '
是A
的線性代數轉置。對於複數矩陣,這是複共軛轉置。
.'
數組轉置。.'
是A
的數組轉置。對於複數矩陣,這不涉及共軛。
關係運算符
關係運算符也可以用於標量和非標量數據。數組的關係運算符在兩個數組之間執行逐個元素的比較,並返回相同大小的邏輯數組,如果爲真,則元素設置爲邏輯1(true)
,如果爲假,則元素設置爲邏輯0(false)
。
下表顯示了MATLAB中可用的關係運算符:
關係運算符示例代碼
操作符
說明描述
<
小於
<=
小於或等於
>
大於
>=
大於或等於
==
等於
~=
不等於
邏輯運算符
MATLAB提供兩種類型的邏輯運算符和函數:
- 逐元素 - 這些運算符對邏輯陣列的相應元素進行操作。
- 短路 - 這些運算符在標量和邏輯表達式上運行。
元素邏輯運算符在邏輯數組上運行逐個元素。符號&
,|
和〜
是邏輯數組運算符AND
,OR
和NOT
。
短路邏輯運算符允許邏輯運算短路。符號&&
和||
是邏輯短路運算符AND
和OR
。
邏輯運算符示例代碼
位運算
按位運算符對位執行,並執行逐位運算。&
,|
和^
的真值表如下 -
假設A = 60
和B = 13
; 現在以二進制格式,它們將如下所示:
A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A = 1100 0011
MATLAB提供了諸如「按位與」和「按位或」以及「按位非」操作,移位操作等位操作的各種功能。
下表顯示了常用的按位操作:
按位操作示例
方法
目的
bitand(a, b)
整數a
和b
的位與AND
操作
bitcmp(a)
a
的比特補碼
bitget(a,pos)
在整數數組a
中,獲取指定的位置pos
位字節
bitor(a, b)
整數a
和b
的逐位OR
操作
bitset(a, pos)
設置在指定pos
處的位字節
bitshift(a, k)
返回向左移位k
字節,相當於乘以2^k
。 k
的負值對應於向右移位或除以`2^
k
` 並舍入到最接近的整數到負無窮大。任何溢出位都被截斷。
bitxor(a, b)
整數a
和b
的逐字節位XOR
操作
swapbytes
交換字節排序
集合操作
MATLAB爲集合操作提供了各種功能,如聯合,交集和集合成員的測試等。
下表顯示了一些常用的集合操作 -
函數
描述
intersect(A,B)
設置兩個陣列的交集; 也就是返回A
和B
共同的值。返回的值按排序順序排列。
intersect(A,B,’rows’)
將A
的每一行和B
的每一行視爲單個實體,並返回A
和B
兩者共同的行。返回矩陣的行按排序順序排列。
ismember(A,B)
返回與A
相同大小的數組,其中包含1(true)
,其中A
的元素位於B
中。其他地方返回0(false)
。
ismember(A,B,’rows’)
將A
的每行和B
的每一行視爲單個實體,並返回一個包含1(true)
的向量,其中矩陣A
的行也是B
行。其他返回0(false)
。
issorted(A)
如果A
的元素按排序順序返回邏輯1
(真),否則返回邏輯0
(假)。輸入A
可以是一個向量,也可以是N-by-1
或1-by-N
的字符串數組。 如果A
和sort(A)
的輸出相等,則認爲A
被排序。
issorted(A, ‘rows’)
如果二維矩陣A
的行按排序順序返回邏輯1
(真),否則返回邏輯0
(假)。 如果A
和排序(A)
的輸出相等,則認爲矩陣A
被排序。
setdiff(A,B)
設置兩個數組的差異; 返回A
中不在B
中的值。返回的數組中的值按排序順序排列。
setdiff(A,B,’rows’)
將A
的每一行和B
的每一行視爲單個實體,並從不在B
中的A
返回行。返回的矩陣的行按排序順序排列。'rows'
選項不支持單元格數組。
setxor
設置兩個數組的異或
union
設置兩個數組的並集
unique
使數組中的值唯一