9/27/2006

2.7尋找非零元素

另外一個指令find則是專門找尋矩陣中元素非為零的值及行列位置。以下面之bb矩陣為例,利用find函數查尋非零元素之序號:


>> bb=[1 0 3;0 2 5;3 7 0]

bb =
1 0 3
0 2 5
3 7 0

>> find(bb)' % find the nonzero element
ans =
1 3 5 6 7 8

即表示bb矩陣中,其總序號第1、3、5、6、7、8個元素均為非零元素。若第二個參數加入,則表示該參數值為前面個數。例如:

>>find(bb,3)' % find the first 3 nonzero elements
ans =
1 3 5

表示前三項非零元素為第1、3、5項。但這種以項序指示有時不容易分辨,最好以列數與行數作為座標型態的認定。其語法則必須在指令前加三個參數,如下例:

>>x y z]=find(bb,3); % find the corespondent row & column of
>>[x y z] % the nonzero elements, z is its value
ans =
1 1 1
3 1 3
2 2 2

在find函數前置三個未知行向量[x,y,z],其內所存的x為該非零元素所在之列,y為其對應行,z為其元素值。例如第一個應在第一列第一行,其值為1。利用此一指令可以依需要各取所需。

但是有時所要找的並非僅屬於非零元素,那要怎麼辦好呢?下面例子可以解決這方面的問題:

>>find(bb>5) %find matrix elements exceeding 5
ans = 6

利用邏輯語法,可以獲得其他條件的結果。例如:要求等於零的元素項:

>>[u, v]=find(bb==0); % find elements equals to zero
[u, v]
ans =
2 1
1 2
3 3

亦即等於零的元素有三項,分別在(2,1)、(1,2)、(3,3)處,有誰能解釋為什麼上述的例子不讓它直接顯示,而另加一個矩陣表示嗎?