MATLAB編程與應用系列-第2章 數組及矩陣的創建及操作(2)
本系列教程來源於出版設計《基於MATLAB編程基礎與典型應用書籍》,如涉及版權問題,請聯系:[email protected]。 出版社:人民郵電出版社, 頁數:525。
本系列教程目前基於MATLABR2006a,可能對於更高級版本的功能和函數有差異,教程中如有問題,請聯系:[email protected]
2.2 數組及矩陣的創建和操作
本節將介紹數組及矩陣的創建和操作,包括數組的輸入以及數組元素的操作。由於數組和矩陣在創建和尋訪的處理方式類似,因此將兩者綜合一起說明。
###2.2.1 數據及矩陣的輸入
輸入的方法有多種,常用的主要有直接輸入法、語句生成法以及特殊矩陣函數生成法。另外還有MAT數據文件加載生成法及M文件輸入法。
最簡單、最常用的構造方法,一般用於數組及矩陣維數比較少的情況。
【例2.1】數組直接輸入法
>> x=[3.5 pi/2 sqrt(3) 3+5i] %采用空格生成1×4的數組
上述語句得到數組x:
x=3.5000 1.5708 1.7321 3.0000+5.0000i【例2.2】矩陣直接輸入法
>> a=[1 2 3;4 5 6;7 8 9] %生成3×3的數組矩陣
上述語句得到矩陣a:
a =
1 2 3
4 5 6
7 8 9
命令中的“;”表示矩陣的一行結束,使用換行同樣可以得到上面的矩陣a,代碼如下所示。>> a=[1 2 3<br/>4 5 6<br/>7 8 9]
註意:(1) 數組創建使用操作符方括號([])
(2) 每行內的元素間用逗號或空格隔開;
(3) 行與行之間用分號或回車鍵隔開;
(4) 元素可以是數值或表達式。
(2)語句生成法
使用語句生成法可以生成固定步長的數組或矩陣。常用的格式:x=from:step:to
其中from、step和to
分別表示開始值、步長和結束值,中間用冒號分隔。當step
省略時則默認為step=1
。以步長step
為采樣間隔生成x,x中第一個元素為from
,如果(to-from)
為step
的整數倍則最後一個元素為to,否則小於to。下面結合示例具體介紹該方式的使用。
【例2.3】使用
“from:step:to”
方式生成以下數組①生成開始值為1,結束值為5,間隔為0.5的數組。在命令窗口輸入:>> a1=1:0.5:5 %開始值為1,結束值為5,間隔為0.5的數組
此時,生成的數組a1如下所示。a1 =
1.0000 1.5000 2.0000 2.5000 3.0000 3.5000 4.0000 4.5000 5.0000
②如果只設置開始值和結束值,間隔值step不設置,生成數組時step默認為1。例如在命令窗口輸入以下內容:>> a2=1:10 %開始值為1,結束值為10,默認間隔為1的數組
結果如下:a2 =<br/>1 2 3 4 5 6 7 8 9 10
③如果開始值>結束值,並且步長step>0,則生成數組失敗,數組為空。例如在命令窗口輸入以下內容:>> a3=5:0.5:1 %開始值為5,結束值為1,間隔為-0.5的數組
此時,得到如下所示的結果。a3 =<br/>Empty matrix: 1-by-0
④如果開始值>結束值,步長step<0,可以成功生成數組。例如在命令窗口輸入:>> a4=5:-0.5:1
結果如下:a4 =<br/>5.0000 4.5000 4.0000 3.5000 3.0000 2.5000 2.0000 1.5000 1.0000
註意:(1)step默認值為1;
(2)當step>0而from>to時為空矩陣或當step<0而from<to時也為空矩陣;
(3)冒號必須是英文狀態下輸入的冒號,否則會產生計算錯誤。
除了使用“from:step:to”格式生成固定步長的數組,還可以使用linspace
和logspace
函數生成數組。linspace
函數的語法格式如下:linspace(a,b,n)
其中,a、b、n三個參數分別表示開始值、結束值和元素個數。該函數生成從a到b之間線性分布的n個元素的行向量,n如果省略則默認值為100。
logspace
函數的語法格式如下:logspace (a,b,n)
該函數與linspace類似,給出開始值、結束值和元素個數,不過logspace用來生成對數等分向量。它生成從10^a到10^b之間按對數等分的n個元素的行向量。n如果省略則默認值為50。
【例2.4】用linspace和logspace函數生成行向量
①生成從0到2pi的線形采樣的(1×10)向量,在命令窗口輸入:
`>> A=linspace(0,2pi,10) %生成從0到2*pi的線形采樣的,元素個數為10<br/>用linspace函數生成的矩陣A:<br/>
A =
0 0.6981 1.3963 2.0944 2.7925 3.4907 4.1888 4.8869 5.5851 6.2832<br/>②生成從0到2的對數采樣的(1×9)向量,在命令窗口輸入:<br/>
>> B=logspace(0,2,9) %生成從0到2的對數采樣,元素個數為9<br/>用logspace函數生成的矩陣B:<br/>
B =
1.0000 1.7783 3.1623 5.6234 10.0000 17.7828 31.6228 56.2341 100.0000`
(3)特殊矩陣生成函數法
前面介紹的兩種方法一般應用在生成比較簡單的數組或向量,但是在實際應用過程中經常會使用一些比較特殊的有分布規律的矩陣,MATLAB提供了很多能夠產生特殊矩陣的函數,各函數的指令與功能如表2.2所示。
函數名 | 功能 |
---|---|
zeros(m,n) |
產生m×n的全0矩陣 |
ones(m,n) |
產生m×n的全1矩陣 |
rand(m,n) |
產生m×n均勻分布的隨機矩陣,元素取值範圍0.0~1.0。 |
randn(m,n) |
產生m×n正態分布的隨機矩陣 |
magic(N) |
產生N階魔方矩陣(矩陣的行、列和對角線上元素的和相等) |
eye(m,n) |
產生m×n的單位矩陣 |
註意:(1)zeros、ones、rand、randn和eye函數當只有一個參數n時,則為n×n的方陣;
(2)當eye(m,n)函數的m和n參數不相等時則單位矩陣會出現全0行或列。【例2.5】特殊矩陣生成函數
①若要生成一個(2×3)全零矩陣,可以在命令窗口輸入:>> zeros(2,3) %生成一個(2×3)全零矩陣
此時,生成的矩陣為:ans = 0 0 0<br/>0 0 0
②若要生成一個(2×3)全1矩陣,可以在命令窗口輸入:>> ones(2,3) %生成一個(2×3)全1矩陣
結果如下:ans =<br/>1 1 1<br/>1 1
③若要生成一個(3×3)均勻分布的隨機矩陣,可以在命令窗口輸入:>> rand(3,3) %該矩陣元素的取值為0.0~1.0,均勻分布的隨機矩陣
由上述語句生成的隨機矩陣如下所示(計算結果隨機)。ans =<br/>0.9501 0.4565 0.9218<br/>0.2311 0.0185 0.7382<br/>0.6068 0.8214 0.1763
④若要生成一個(3×3)正態分布的隨機矩陣,可以在命令窗口輸入:>> randn(3,3) %正態分布的隨機矩陣
結果如下:ans =<br/>-0.4326 1.1892 -0.5883<br/>-1.6656 -0.0376 2.1832<br/>0.1253 0.3273 -0.1364
⑤若要生成一個(4×4)的魔方矩陣,可以在命令窗口輸入:>> magic(4) %生成一個4×4的魔方矩陣
由magic函數產生的魔方矩陣如下所示。ans =<br/>16 2 3 13<br/>5 11 10 8<br/>9 7 6 12<br/>4 14 15 1
⑥若要生成一個(3×3)的單位矩陣,可以在命令窗口輸入:>> eye(3) %生成一個3×3的單位矩陣
由eye函數產生的單位矩陣如下所示。ans = 1 0 0<br/>0 1 0<br/>0 0 1
(4)MAT數據文件加載生成法
MATLAB啟動後,系統會自動建立一個工作空間,在用戶進行操作前,該工作空間中只包含系統提供的一些特殊變量,如pi、eps等。用戶使用過程中會增加一些自己定義的變量,如果用戶不使用clear指令來清除,這些自定義的變量會一直被保存在該工作空間,直到關閉系統。如果希望該工作空間中的變量可以保存以便下次使用,可以使用save指令保存為MAT數據文件,使用load指令或選擇菜單【File】
下的【Import Data】
命令加載MAT數據文件來創建變量,
【例2.6】使用指令方式保存和加載MAT數據文件
>> clear all %清除工作空間中所有的變量
>> x=[1:4]; y=linspace(1,10,10); %生成變量x和y
>> who %查看內存中的變量,結果顯示有兩個變量x和y
使用who命令可以查看內存中的變量,在本例中查出內存中已經生成了兩個變量x和y,結果如下所示。Your variables are:<br/>x y
為了方便以後使用這兩個變量,接下來在命令窗口輸入:>> save myxy %使用save指令將內存變量保存入myxy.mat數據文件中
通過save命令可以將指令保存到MAT文件中,myxy就是保存的數據文件名。使用clear all命令清除工作空間中的所有變量。>> clear all %清除工作空間中所有的變量
此時在命令窗口輸入:>> y %輸入變量y查看該變量的值,結果顯示該變量沒有被定義
得到如下的提示結果。??? Undefined function or variable ‘y‘.
為了能夠使用已經保存的變量,可以通過load指令獲取。在命令窗口中接著輸入:>> load myxy %使用load指令將myxy.mat數據文件中保存的變量加載入當前工作空間
>> y %輸入變量y查看該變量的值
此時,得到y變量的結果如下所示。y = 1 2 3 4 5 6 7 8 9 10
(5)M文件創建矩陣
對於今後經常要調用的數組,尤其是比較大的復雜數組,可以為其專門建立一個M文件。具體方法是打開文件編輯器,寫入這個矩陣內容並為其命名,保存這個M文件,以後凡是要用到這個矩陣,只要運行這個M文件,這個矩陣就會自動生成並保存於MATLAB的內存中。
【例2.7】用M文件創建大矩陣,文件名為example.m
打開文件編輯調試器,輸入以下內容,並保存此文件為example.m。%example.m 創建矩陣exam
exm=[ 456 468 873 2 579 55<br/>21 687 54 488 8 13 65 4567 88 98 21 5<br/>456 68 4589 654 5 987<br/>5488 10 9 6 33 77];
在文件編輯調試器中運行或在MATLAB窗口輸入example就可以生成矩陣exam。>> example;
>> size(exm) %顯示exm的大小,exm有5行6列
上述語句得到exm矩陣的大小,結果如下所示。ans= 5 6
作者:德特數據
聯系方式:[email protected]
MATLAB編程與應用系列-第2章 數組及矩陣的創建及操作(2)