本專題內容摘錄至,由葛超,王蕾,曹秀爽編著的《MATLAB技術大全》
在此鳴謝,該專題內容不做商業用途
本書一共27個章節,這裡會選取有趣的內容提供給大家
注意:本文出現的%%為例子,或者注釋,需要各位看官動手操作
第二章 matlab基礎知識
2.6 數值數據類型
2.6.1 整數
2.6.2 浮點數
2.6.3 整型浮點數間的操作函數
2.6.4 複數
2.7 函數和特殊函數簡明介紹
2.8 數組
2.8.1 一維數組的創建
2.8.2 多維數組的創建
2.8.3 數組的運算
2.8.4 常用的標準數組
2.8.5 低維數組的尋址和搜索
2.8.6 低維數組的處理函數
2.8.7 高維數組的處理和運算
2.8 數組
數組是matlab進行計算和處理的核心內容之一,出於快速計算的需要,matlab總把數組看作存儲和運算的基本單元,標量數據也被看作是1×1的數組。因此,數組的創建,尋址和操作就顯得非常重要。matlab提供了各種數組創建的方法和操作方法,使得matlab的數值計算和操作更加靈活和方便。數組創建和操作是matlab運算和操作的基礎,針對不同維數的數組,matlab提供了各種不同的數據創建方法,甚至可以通過創建低維數組來得到高維數組。
2.8.1 一維數組創建
概括而言,創建一維數組時,可以通過以下幾種方法來進行。
(1)直接輸入法:此時,可以直接通過空格,逗號和分號來分隔數組元素,在數組中輸入任意的元素,生成一維數組。
(2)步長生成法: x = a:inc:b,在使用這種方法創建一維數組時,a和b為一維向量數組的起始數值和終止數值,Inc為數組的間隔步長;如果a和b為整數時,省略inc可以生成間隔為1的數列。根據a和b的大小不同,inc可以採用整數,也可以採用負數來生成一維向量數組。
(3)等間距線性生成方法:x = linspace(a,b,n)採用這種方法,函數在a和b之間的區間內得到n個線性採樣數據點
(4)等間距對數生成方法:x = logspace(a,b,n)採用這種方法時,在設定採樣點總個數n的情況下,採樣常用對數計算得到n個採樣點數據值。
當創建數組後,對單個元素的訪問,可以直接通過選擇元素的索引來加以訪問;如果訪問數組內的一塊數據,則可以通過冒號方式來進行訪問;如果訪問其中的部分數值,則可以通過構造訪問序列或通過構造向量列表來加以訪問。在訪問數組元素的過程中,訪問的索引數組必須是正整數,否則,系統將會提示一條警告信息。
一維數組可以是一個行向量,也可以是一列多行的向量。在定義的過程中,如果元素之間通過「;」分隔元素,那麼生成的向量是列向量;通過空格或逗號分隔的元素則為行向量。當然列向量和行向量之間可以通過轉置操作「『」來進行相互之間的轉化過程。但需要注意的是,如果一維數組的元素是複數,那麼通過轉置操作後,得到的是複數的共軛轉置的結果,而採用點--共軛轉置操作時得到的轉置數組,並不進行共軛操作。
2.8.2 多維數組的創建
對於二維數組和三維數組而言,創建方法和一維數組的創建方法不同。
二維數組(也是矩陣)可以通過以下幾種方法來創建。
(1)直接輸入二維數組的元素來創建,此時,二維數組的行和列可以通過一維數組的方式來進行創建,不同行之間的是數據可以通過分號分隔,同一行中的元素可以通過逗號或空格來進行分隔。
(2)通過MATLAB的Array Editer來輸入二維數組。創建方法為,單擊New Variable創建圖標,此時系統在工作空間的變量列表中出現新的矩陣變量,用戶可以改變變量的名稱同時,在MATLAB的工作空間出現矩陣編輯器表格,可以直接輸入矩陣的數據。
(3)對於大規模的數據,可以通過數據表格方式來輸入,此時可以單擊選擇空間的Import Data圖標,選中已經編寫好的矩陣數據文件後,導入工作空間中。
(4)可以通過MATLAB所提供的其他函數來生成二維數組。
在創建二維數組的過程中,需要嚴格保證所生成的矩陣的行或列的數目不同。如果兩者的數目,那麼系統將會出現錯誤提示。此外,在直接生成矩陣的過程中,可以通過按回車鍵來保證矩陣生成另一行元素。
多維數組(n維數組),如在三維數組中存在行,列和頁這樣三維,即三維數組中的第三維成為頁。在每一頁中,存在行和列。在MATLAB中,可以創建更高維的n維數組。但實際上主要用到的還是三維數組。三維數組的創建方法有以下幾種。
(1)直接創建方法。在生成過程中,可以選擇使用matlab提供的一些內置函數來創建三維數組,如zeros,ones,rand,randn等。
(2)通過直接索引的方法進行創建。
(3)使用matlab內置函數reshape和repmat將二維數組轉換成三維數組
(4)使用cat函數將低維數組轉化為高維數組
通過以上可以看出,三維數組可以通過多種方法進行創建,在利用內置函數創建過程中,關於這些函數的其他用法,讀者可以通過help命令查找相應的幫助文件。
2.8.3 數組的運算
數組的運算包括數組和標量之間的運算,以及數組和數組之間的運算。對於數組和標量之間的運算,是標量和數組的元素之間直接進行數學運算,比較簡單。對於數組和數組之間的運算關係,尤其是對於乘除運算和乘方運算,如果採用點方式進行計算,表明是數組的元素之間的運算關係,而如果是直接進行乘除,乘方運算,那麼則是向量或矩陣之間的運算關係。兩隻的意義完全不同。
此外,還需要注意的是,對於向量的除法運算,左除(\)和右除(/)的意義不同。兩者之間除數和被除數是不同的。
對於矩陣的加減運算以及其他點運算,都是針對矩陣的元素進行的。而對於乘除,乘方運算則通過矩陣計算進行,關於更詳細的數組和矩陣運算方面的內容,讀者可以查閱矩陣運算方面的數學理論書籍。
2.8.4 常用的標準數組
matlab中提供一些函數,用來創建常見的標準數組。常用到的標準數組包括全0數組,全1數組,單位矩陣,隨機矩陣,對角矩陣以及元素為指定常數的數組等。
matlab標準數組生成函數
函數 說明 用法
eye 生成單位矩陣 y=eye(n)
y=eye(m,n)
y=eye(size(A))
y=eye(m,n,classname)
y=eye([m,n],classname)
ones 生成全一數組 y=ones(n)
y=ones(m,n)
y=ones([m,n])
y=ones(m,n,p,...)
y=ones([m,n,p,...])
y=ones(size(A))
y=ones(m,n,...,classname)
y=ones([m,n,...],classname)
rand 生成隨機數組, y=rand
數組元素均勻分布 y=rand(m)
y=rand(m,n)
y=rand([m,n])
y=rand(m,n,p,...)
y=rand([m,n,p,...])
y=rand(size(A))
rand(method,s)
s=rand(method)
randn 生成隨機數組 y=randn
數組元素服從正態分布 y=randn(m)
y=randn(m,n)
y=randn([m,n])
y=randn(m,n,p,...)
y=randn([m,n,p,...])
y=randn(size(A))
randn(method,s)
s=randn(method)
zeros 生成全零數組 y=zeros(n)
y=zeros(m,n)
y=zeros([m,n])
y=zeros(m,n,p,...)
y=zeros([m,n,p,...])
y=zeros(size(A))
y=zeros(m,n,...,classname)
y=zeros([m,n,...,classname])
2.8.5 低維數組的尋址和搜索
數組中包括多個元素,在對數組的單個元素或多個元素進行訪問時,需要對數組進行尋址操作。matlab提供了強大的功能函數,可以用於確定感興趣的數組元素的腳標,插入,提取和重排數組的子集。具體參數如下
數組尋址技術
尋址方法 說明
A(r,c) 用定義r和c索引向量來尋址A的子數組
A(r,:) 用r向量定義的行和對應於行的列得到A的子數組
A(:,c) 用c向量定義的列和對應於列的行得到A的子數組
A(:) 用列向量方式來依次尋址數組A的所有元素。如果A(:)出現在等號
右側的元素來填充數組。而A的形狀不發生變化
A(k) 用單一索引向量k來尋址A的子數組
A(x) 用邏輯數組x來尋找A的子數組,x的維數和A和維數必須一致
排序是數組操作的一個重要方面。matlab提供了sort函數來進行排序。關於sort函數的具體使用方法。讀者可以通過help sort語句來加以查詢。在進行一維數組排序時,默認的排列方式為升序排列。如果需要降序排列,則可以在sort函數的第二個參數處以descend來代替。
在二維數組進行排序時,sort函數隻對數組的列進行排序。一般情況下,用戶只關心對某一列的排序問題,此時可以通過一定的方式來進行重新排序。如果對行進行排序,則需要為sort函數提供第二個參數2,例如,下面的程序:
在matlab中,子數組搜索功能可以通過系統提供的find函數來搜索,可以返回符合條件的數組的索引數值,對於二維數組可以返回兩個下標數值。關於搜索的其他命令,用戶可以同help find來查詢。
如果搜索最大最小值,那麼可以使用max和min函數來進行搜索。如果搜索的是二維數組,那麼這兩個函數返回每一列的最大值或最小值,例如下面的程序:
2.8.6 低維數組的處理函數
低維數組的處理函數如下
函數 說明
fliplr 以數組的垂直中線為對稱軸,交換左右對稱位置上的數組元素
flipud 以數組的水平中線為對稱軸,交換數組上下對稱位置上的數組
元素
rot90 按逆時針對數組的一行或一列
circshirf 結構交換函數,交換前後函數的元素個數相等
reshape 結構變換函數,交換前後函數的元素個數相等
diag 對角線元素提取函數
triu 保留方陣的上三角,構成上對角方陣
tril 保留方陣的下三角,構成下對角方陣
kron 兩個數組的kronecker乘法,構成新的數組
repmat 數組複製生成函數
在後面的選取對角元素和上,下三角矩陣時,所定義的第二個參數是以對角線為k=0的起始對角線,向上三角方向移動時,k的數值增大;而向下三角方向移動時,k的數值減小。此外,對於非方陣的矩陣,對角線以過第一個元素的方陣的對角線的起始位置。
對於kron函數執行的是kronnecker的張量乘法運算,即將第一個參數數組的每一個元素和第二個參數數組相乘,形成一個分塊矩陣。上面的例子同樣也說明kronercker張量乘法具有不可交換性。
2.8.7 高維數組的處理和運算
隨著數組的維數增加,數組的運算和處理就會變得越來越困難,在matlab中提供了一些函數可以進行這些高維數組的處理和運算。此處對高維數組(主要介紹三維數組)的一些處理和運算函數進行介紹。常見的高維數組處理和運算函數如下。
高維數組的處理和運算函數
函數 說明
squeeze 用此函數來消除數組中的「孤維」,即大小等於1的維,從而起到降維的作用
sub2inb 將下標轉換為單一索引數值
ind2sub 將數組的單一索引數值轉換為數組的下標
flipdim 沿數組的某個維輪換順序,第二個參數為變換的對稱面
shiftdim 維序號循環輪換移動
permute 對多維數組進行廣義共軛轉置操作
ipermute 取消轉置操作
size 獲取數組的維數大小數值