2.矩陣的尋訪與賦值
在創建了矩陣之後,我們經常需要訪問矩陣中的某一個或者一些元素,另外可能需要對其中的某些元素重新賦值或者刪除某一部分元素。本節介紹如何進行矩陣的尋訪與賦值。
2.1 矩陣的標識
本小節介紹單個元素標識和尋訪的3種方式:全下標、單下標、邏輯1標識。
1.全下標標識
經典數學教科書在引述具體矩陣元素時,通常採用全下標標識法,即指出某一元素是在第幾行第幾列。這種標識方法的優點是:幾何概念清楚,引述簡單。全下標標識法在MATLAB的尋訪和賦值中因為最為直觀,所以它最為常用。
對於二維矩陣來說,全下標標識由兩個下標組成:行下標、列下標。如A(3,5)表示二維矩陣A的第3行第5列。
這裡值得注意的是,MATLAB中對下標的標識是從1開始的,就是和我們平時在數學中使用的說法是一致的。這和其他一些程式語言從0開始標識是不同的。
2.單下標標識
MATLAB儘管是以矩陣作為基本的計算單元,但是矩陣的後臺存儲並不是像顯示出來的那樣成長方形排列的,而是按照單下標標識作為一列存儲到內存中。單下標標識就是「只用一個下標來指明元素在矩陣中的位置」。當然,這樣做首先要對二維矩陣的所有元素進行「一維編號」。所謂「一維編號」就是:先設想把二維矩陣的所有列,按照先左後右的次序首尾相連排成一維長列,然後自上而下對元素位置進行編號。
單下標與全下標的轉換關係:以m´n的二維矩陣A為例,若全下標的元素位置是「第a行,第b列」,那麼相應的單下標則為c=(b-1)*m+a。
在MATLAB中,有兩個函數可以實現全下標和單下標的轉換。
sub2ind: 根據全下標換算出單下標。
ind2sub: 根據單下標換算出全下標。
單下標的優勢是在特定情境下使用更為簡潔,例如編制某些循環的時候只需要一個循環變量就可以了,另外比如需要將某數組賦值給另一維數不同的數組的時候。
3.邏輯1標識
在實際使用中,有時會遇到尋找矩陣中大於或者小於某值的元素的問題,這時就可以使用邏輯1標識法。邏輯1標識用一個基於原矩陣A相對位置的邏輯數組B來對矩陣A進行尋訪。數據B中每一個true值也就是1表示相對位置的A中元素可以被尋訪。如果需要通過邏輯1標識來對矩陣進行尋訪,只需將符合條件的元素位置的標識設置為邏輯1即可。
採用邏輯1標識的程序在速度方面具有一定的優勢。
2.2 矩陣的尋訪
【例2-7】 二維矩陣的尋址。
>> a=[1 2 3; 4 5 6] % 創建測試矩陣
a =
1 2 3
4 5 6
>> A=a(2,2) % 全下標尋訪
A =
5
>> b=a(4) % 單下標尋訪
b =
5
>> B=a>5 % 返回邏輯下標
B =
0 0 0
0 0 1
>> c=a(B) % 邏輯下標尋訪
c =
6
>> d=a(1,:) % 通過使用冒號可以尋訪全行元素
d =
1 2 3
>> e=a(:,2) % 通過使用冒號可以尋訪全列元素
e =
2
5
>> f=a(:) % 單下標尋訪
f =
1
4
2
5
3
6
>> g=a(:,[1 3]) % 尋訪地址可以是向量,以同時尋訪多個元素
g =
1 3
4 6
本例中的B=a>5和c=a(B),就是採用邏輯1標識法訪問矩陣a中大於5的元素。
2.3 矩陣的賦值
在了解了矩陣的尋訪方法以後,給矩陣中的特定元素賦值也就成了一個很簡單的事情。下面舉例來說明。
【例2-8】 二維矩陣的賦值。
>> a=magic(4)
a =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
>> a(3,4)=0 % 對單個元素進行賦值
a =
16 2 3 13
5 11 10 8
9 7 6 0
4 14 15 1
>> a(:,1)=1 % 對第一列進行賦值
a =
1 2 3 13
1 11 10 8
1 7 6 0
1 14 15 1
>> a(14)=16 % 採用全下標對第14個元素進行賦值
a =
1 2 3 13
1 11 10 16
1 7 6 0
1 14 15 1
2.3.1 進行數組運算的常用函數
在MATLAB中有一些常用函數,這些函數在日常的編程計算過程中會經常遇到,一般是基本的數學概念在MATLAB中的函數表達方式。這些函數在MATLAB中可以同時作用於整個矩陣或者數組,應用起來非常方便,不需要再另寫循環程序來對各元素分別進行計算。掌握這些函數是進一步學習的基礎。MATLAB人性化的地方在於其自帶函數基本是按照相對應的英文名稱縮寫而來,所以便於記憶。
2.3 函數數組運算規則的定義
對於(m´n)的數組
,函數的數組運算規則是指:
也就是說函數的數組運算是指將函數作用於矩陣中的每一個元素,並將最後的結果儲存為與原矩陣行列數相同的矩陣。
2.3.2 進行數組運算的常用函數
本小節列出進行數組運算的常用函數。常用基本數學函數見表2-2,常用三角函數見表2-3,常用適用於向量的函數見表2-4。
表2-2 MATLAB常用的基本數學函數
函 數
說 明
函 數
說 明
abs(x)
純量的絕對值或向量的長度
rat(x)
將實數x化為分數表示
angle(z)
複數z的相角
sign(x)
符號函數 當x<0時,sign(x)=-1; 當x=0時,sign(x)=0; 當x>0時,sign(x)=1
sqrt(x)
開平方
rem(x,y)
求x除以y的餘數
real(z)
複數z的實部
gcd(x,y)
整數x和y的最大公因數
imag(z)
複數z的虛部
lcm(x,y)
整數x和y的最小公倍數
conj(z)
複數z的共軛複數
exp(x)
自然指數
round(x)
四捨五入至最近整數
pow2(x)
2的指數
fix(x)
無論正負,向0的方向取最近整數
log(x)
以e為底的對數,即自然對數
floor(x)
捨去法取最近整數
log2(x)
以2為底的對數
ceil(x)
進一法取最近整數
log10(x)
以10為底的對數
表2-3 MATLAB常用的三角函數
函 數
說 明
函 數
說 明
sin(x)
正弦函數
sinh(x)
超越正弦函數
cos(x)
餘弦函數
cosh(x)
超越餘弦函數
tan(x)
正切函數
tanh(x)
超越正切函數
asin(x)
反正弦函數
asinh(x)
反超越正弦函數
acos(x)
反餘弦函數
acosh(x)
反超越餘弦函數
atan(x)
反正切函數
atanh(x)
反超越正切函數
atan2(x,y)
四象限的反正切函數
表2-4 適用於向量的常用函數
函 數
說 明
函 數
說 明
min(x)
向量x的元素的最小值
norm(x)
向量x的歐氏長度,也就是範數
max(x)
向量x的元素的最大值
sum(x)
向量x的元素總和
mean(x)
向量x的元素的平均值
prod(x)
向量x的元素總乘積
median(x)
向量x的元素的中位數
cumsum(x)
向量x的累計元素總和
std(x)
向量x的元素的標準差
cumprod(x)
向量x的累計元素總乘積
diff(x)
向量x的相鄰元素的差
dot(x, y)
向量x和y的內積
sort(x)
對向量x的元素進行排序
cross(x, y)
向量x和y的外積
【例2-9】 數組運算示例。
>> a=[1 2 4 9;16 25 36 49]
a =
1 2 4 9
16 25 36 49
>> b=sqrt(a) % 應用函數對矩陣中的每一個元素分別開方
b =
1.0000 1.4142 2.0000 3.0000
4.0000 5.0000 6.0000 7.0000