2021年6月6日 星期日

矩陣元素之形成

 矩陣元素之形成

源自於http://bime-matlab.blogspot.com/2006/09/21.html

矩陣可說是MATLAB各項變數之基本型式,而向量則是一種單維的矩陣,也是矩陣之特殊型式。單維向量可分為行向量(Colum vector)與列向量(Row vector),或稱為行矩陣與列矩陣。無論如何,這些僅是一般矩陣的特殊例子而已。一般矩陣產生之方式有下列幾種:
以一系列單元輸入。

  • 利用預設之函數產生。
  • 在M檔案中產生。
  • 由外面資料檔中直接輸入。
今以一個簡單的列向量變數a為例,令其包含五項元素。首先,可在指令窗中打入如下指令,注意輸入之元素群前後都有中括號,元素間則以空隔或逗號","分開:
>>a = [8 4 2 7 9]
a = 8 4 2 7 9
結果,這個參數a之內容立即可以顯出來(注意變數之大小寫所指是不同的變數)。若不想立即顯示出結果,只保留其內容在記憶體中供其他指令使用時,可以在指令後面加上";"分號如:
>>a = [8 4 2 7 9];
執行後,並沒有如上述之結果出現。但這並不是說變數a的內容沒有改變,實際上是記在記憶體中,不顯現而已,你只要再打上a,即可立即顯示剛才輸入之資料:
>>a
a =
8 4 2 7 9
現在,再令向量a中之各元素均加2,並將其結果存於一個新變數b:
>>b = a + 2
b =
10 6 4 9 11
注意 MATLAB 並不需要任何特別處理,即可完成矩陣的操作。
若要將上述列向量b改為行向量,並存於c時,則只要在b的後面加上一撇之移置符號"'"即可,此方法稱為移置(Transpose),相當有用,可以在陣列中活用:
>>c=b'
c =
10
6
4
9
11
在列向量a之表示式中,元素間係以空格分開。實際上亦可用逗號","分開,其意義相同。以列向量d為例:
>>d=[2,4,3,6,7]
d =
2 4 3 6 7
在輸入行向量時,由於其所佔的直行空格多,故常先以列向量輸入,然後再進行移置,如前例之行向量c。另一個方法是在各元素間加上分號";",表示其輸入元素置於下一行的意思,如行向量c:
>>c=[10;6;4;9;11]
c =
10
6
4
9
11
結果相同。所以在距陣之操作中,記得逗號及空隔是分開元素,分號則是移至下一列。如此即使輸入僅為一列,亦可處理多列的矩陣資料。

利用函數產生

矩陣亦可利用內建函數產生,例如魔術矩陣函數magic(n),其括號中之n為表示產生一個nxn大小之方矩陣,其特性是無論行向、列向或對角方向之元素總和均相等。



>> M=magic(4)
M =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
其他特殊函數產生之矩陣將在特殊函數項下討論。

自檔案輸入



此外,正如指令窗之輸入方式一樣,矩陣亦可由M檔案中輸入,亦可利用資料檔輸入。前文已討論利用load指令可以輸入工作間之變數值。若僅有一參數之內容,則可作成以該參數名稱為檔名,而以.dat為副檔名之資料檔 ,這是由文字編輯器產生之文字檔。設此文字檔名為fon.dat,其內容為:

100 200 300
250 350 450
460 370 670

則經下面之load指令後,可以產生fon之矩陣。

>>load fon.dat
>>fon

100 200 300
250 350 450
460 370 670

同樣,亦可利用m檔案輸入,不過其變數名稱必須在檔案中指明,實際上等於在指令窗下同等指令一樣:

例如,令fon.m檔案(敘述檔)中含有下列數據:

 A=[22 33 44; 55 66 77; 88 99 11];

執行fon函數後,即可得變數A之資料如下:

>>fon
>>A
22 33 44
55 66 77
88 99 11

指令之長度



在指令檔案中,有些指令使用一行仍然不足,必須延長到下一行時,可以在斷行處加三個連續點即"...",指令會視其連續到下一行。如此,再長的指令也可以一併執行。

>> Age=input('How old are you?');...
Age

How old are you?16
Age =
16

沒有留言:

張貼留言

2024_09 作業3 以Node-Red 為主

 2024_09 作業3  (以Node-Red 為主  Arduino 可能需要配合修改 ) Arduino 可能需要修改的部分 1)mqtt broker  2) 主題Topic (發行 接收) 3) WIFI ssid , password const char br...