- MATLAB基礎及其應用教程
- 周開利 鄧春暉
- 2925字
- 2019-12-20 18:11:38
2.3.3 矩陣的創建
在MATLAB中建立矩陣的方法很多,本節將介紹7種,它們分別是:直接輸入法、抽取法、拼接法、函數法、拼接函數和變形函數法、加載法和M文件法。不同的方法往往適用于不同的場合和需要。
因為矩陣是MATLAB特別引入的量,所以在表達時,必須給出一些相關的約定與其他量區別,這些約定是:
(1)矩陣的所有元素必須放在方括號([])內;
(2)每行的元素之間需用逗號或空格隔開;
(3)矩陣的行與行之間用分號或回車符分隔;
(4)元素可以是數值或表達式。
這些約定同樣適用于2.4節將要討論的數組。
1.直接輸入法
在命令行提示符“>>”后,直接輸入一矩陣的方法即是直接輸入法。直接輸入法對建立規模較小的矩陣是相當方便的,特別適用于在命令窗口討論問題的場合,也適用于在程序中給矩陣變量賦初值。
【例2.15】 用直接輸入法建立矩陣。
>>x=27; y=3; >>A=[1 2 3;4 5 6]; B=[2,3,4;7,8,9;12,2*6+1,14]; >>C=[3 4 5 7 8 x/y 10 11 12]; %用回車符而非分號分隔矩陣各行 >>A, B, C 其運算結果為 A = 1 2 3 4 5 6 B = 2 3 4 7 8 9 12 13 14 C = 3 4 5 7 8 9 10 11 12
2.抽取法
抽取法是從大矩陣中抽取出需要的小矩陣(或子矩陣)。線性代數中分塊矩陣就是一個典型的從大矩陣中取出子矩陣塊的實例。
矩陣的抽取實質是元素的抽取,依據2.3.2節的介紹,用元素下標的向量表示從大矩陣中去提取元素就能完成抽取過程。
1)用全下標方式
【例2.16】 用全下標抽取法建立子矩陣。
>>clear >>A=[1 2 3 4;5 6 7 8;9 10 11 12;13 14 15 16] A = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 >>B=A(1:3,2:3) % 取矩陣A行數為1~3,列數為2~3的元素構成子矩陣B B = 2 3 6 7 10 11 >>C=A([1 3], [2 4]) %取矩陣A行數為1、3,列數為2、4的元素構成子矩陣C C = 2 4 10 12 >>D=A(4, :) %取矩陣A第4行,所有列,“:”可表示所有行或列 D = 13 14 15 16 >>E=A([2 4], end) %取1、4行,最后列,用“end”表示某一維數中的最大值 E = 8 16
2)用單下標方式
【例2.17】 用單下標抽取法建立子矩陣。
>>clear >>A=[1 2 3 4;5 6 7 8;9 10 11 12;13 14 15 16] A = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 >>B=A([4:6;3 5 7;12:14]) B = 13 2 6 9 2 10 15 4 8
本例是從矩陣A中取出單下標4~6的元素做第1行,單下標3、5、7這3個元素做第2行,單下標12~14的元素做第3行,生成一3×3階新矩陣B。若用B=A([4:6; [3 5 7];12:14])的格式去抽取也是正確的,關鍵在于若要抽取出矩陣,就必須在單下標引用中的最外層加上一對方括號,以滿足MATLAB對矩陣的約定。另外,其中的分號也不能少。分號若改寫成逗號時,矩陣將變成向量,例如用C=A([4:5,7,10:13])抽取,則結果為C=[13 2 10 7 11 15 4]。
3.拼接法
行數與行數相同的小矩陣可在列方向擴展拼接成更大的矩陣。同理,列數與列數相同的小矩陣可在行方向擴展拼接成更大的矩陣。
【例2.18】 小矩陣拼成大矩陣。
>> A=[1 2 3;4 5 6;7 8 9], B=[9 8;7 6;5 4], C=[4 5 6;7 8 9] A = 1 2 3 4 5 6 7 8 9 B = 9 8 7 6 5 4 C = 4 5 6 7 8 9 >> E=[A B; B A] %行列兩個方向同時拼接,請留意行、列數的匹配問題 E = 1 2 3 9 8 4 5 6 7 6 7 8 9 5 4 9 8 1 2 3 7 6 4 5 6 5 4 7 8 9 >> F=[A; C] %A、C列數相同,沿行向擴展拼接 1 2 3 4 5 6 7 8 9 4 5 6 7 8 9
4.函數法
MATLAB有許多函數可以生成矩陣,大致可分為基本函數和特殊函數兩類。基本函數主要生成一些常用的工具矩陣,如表2-8所示。特殊函數則生成一些特殊矩陣,如希爾伯特矩陣、魔方矩陣、帕斯卡矩陣、范德蒙矩陣等,這些矩陣如表2-9所示。
表2-8 常用工具矩陣生成函數

表2-9 特殊矩陣生成函數

在表2-8的常用工具矩陣生成函數中,除了eye外,其他函數都能生成三維以上的多維數組(2.4.2節將給出介紹),而eye(m, n)可生成非方陣的單位陣。
【例2.19】 用函數生成矩陣。
>>A=ones(3,4), B=eye(3,4), C=magic(3) A = 1 1 1 1 1 1 1 1 1 1 1 1 B = 1 0 0 0 0 1 0 0 0 0 1 0 C = 8 1 6 3 5 7 4 9 2 >> format rat; D=hilb(3), E=pascal(4) %rat的數值顯示格式可將小數用分數表示 D = 1 1/2 1/3 1/2 1/3 1/4 1/3 1/4 1/5 E = 1 1 1 1 1 2 3 4 1 3 6 10 1 4 10 20
n階魔方矩陣的特點是每行、每列和兩對角線上的元素之和各等于(n3+n)/2。例如上例中3階魔方陣每行、每列和兩對角線元素和為15。希爾伯特矩陣的元素在行、列方向和對角線上的分布規律是顯而易見的,而帕斯卡矩陣在其副對角線及其平行線上的變化規律實際上就是中國人稱為楊輝三角而西方人稱帕斯卡三角的變化規律。
5.拼接函數和變形函數法
拼接函數法是指用cat和repmat函數將多個或單個小矩陣或沿行、或沿列方向拼接成一個大矩陣。
cat函數的使用格式是:cat(n, A1, A2, A3, …), n=1時,表示沿行方向拼接;n=2,表示沿列方向拼接。n可以是大于2的數字,此時拼接出的是多維數組,2.4.2節將會加以討論。
repmat函數的使用格式是:repmat(A, m, n…), m和n分別是沿行和列方向重復拼接矩陣A的次數。
【例2.20】 用cat函數實現矩陣A1和A2分別沿行向和沿列向的拼接。
>> A1=[1 2 3;9 8 7;4 5 6], A2=A1.' A1 = 1 2 3 9 8 7 4 5 6 A2 = 1 9 4 2 8 5 3 7 6 >> cat(1, A1, A2, A1) %沿行向拼接 ans = 1 2 3 9 8 7 4 5 6 1 9 4 2 8 5 3 7 6 1 2 3 9 8 7 4 5 6 >> cat(2, A1, A2) %沿列向拼接 ans = 1 2 3 1 9 4 9 8 7 2 8 5 4 5 6 3 7 6
【例2.21】 用repmat函數對矩陣A1實現沿行向和沿列向的拼接(續例2.20)。
>> repmat(A1,2,2) ans = 1 2 3 1 2 3 9 8 7 9 8 7 4 5 6 4 5 6 1 2 3 1 2 3 9 8 7 9 8 7 4 5 6 4 5 6 >> repmat(A1,2,1) ans = 1 2 3 9 8 7 4 5 6 1 2 3 9 8 7 4 5 6 >> repmat(A1,1,3) ans = 1 2 3 1 2 3 1 2 3 9 8 7 9 8 7 9 8 7 4 5 6 4 5 6 4 5 6
變形函數法主要是把一向量通過變形函數reshape變換成矩陣,當然也可將一個矩陣變換成一個新的、與之階數不同的矩陣。reshape函數的使用格式是:reshape(A, m, n…), m和n分別是變形后新矩陣的行列數。
【例2.22】 用變型函數生成矩陣。
>>A=linspace(2,18,9) A = 2 4 6 8 10 12 14 16 18 >>B=reshape(A,3,3) %注意新矩陣的排列方式,從中體會矩陣元素的存儲次序 B = 2 8 14 4 10 16 6 12 18 >>a=20:2:24; b=a.'; %生成3個元素的列向b,便于將矩陣B擴展成3×4階的矩陣C >>C=[B b], D=reshape(C,4,3)%將3×4階的矩陣C變形成4×3階的矩陣D C = 2 8 14 20 4 10 16 22 6 12 18 24 D = 2 10 18 4 12 20 6 14 22 8 16 24
6.加載法
所謂加載法是指將已經存放在外存中的.mat文件讀入MATLAB工作空間中。這一方法的前提是:必須在外存中事先已保存了該.mat文件且數據文件中的內容是所需的矩陣。
在用MATLAB編程解決實際問題時,可能需要將程序運行的中間結果用.mat保存在外存中以備后面的程序調用。這一調用過程實質就是將外存中的數據(包括矩陣)加載到MATLAB內存工作空間以備當前程序使用。
加載的方法具體有菜單法和命令法,在命令窗口中交互討論問題時,用菜單和用命令都可用來加載數據,但在程序設計時就只能用命令去書寫程序了。具體來說,加載用的菜單是命令窗口中的File|Import Data,而命令則是load。
【例2.23】 利用外存數據文件加載矩陣。
>> clear >> load sl2_19 %從外存中加載事先保存在可搜索路徑中的數據文件sl2_19.mat >> who %詢問加載的矩陣名稱,參見1.8節表1.8的命令 Your variables are: A >> A %顯示加載的矩陣內容 A = 4 5 6 7 1 2 3 4 9 8 7 6
7.M文件法
M文件法和加載法其實十分相似,都是將事先保存在外存中的矩陣讀入內存工作空間中,不同點在于加載法讀入的是數據文件(.mat),而M文件法讀入的是內容僅為矩陣的.m文件。
M文件一般是程序文件,其內容通常為命令或程序設計語句,但也可存放矩陣,因為給一個矩陣賦值本身就是一條語句。在程序設計中,當矩陣的規模較大,而這些矩陣又要經常被引用時,若每次引用都采用直接輸入法,這樣既容易出錯又很笨拙。一個省時、省力而又保險的方法就是:先用直接輸入法將某個矩陣準確無誤地賦值給一個程序中會被反復引用的矩陣,且用M文件將其保存。每當用到該矩陣時,就只需在程序中引用該M文件即可。
- Java Data Science Cookbook
- 大數據可視化
- Sybase數據庫在UNIX、Windows上的實施和管理
- 從0到1:JavaScript 快速上手
- ZeroMQ
- 云數據中心網絡與SDN:技術架構與實現
- 企業級容器云架構開發指南
- 探索新型智庫發展之路:藍迪國際智庫報告·2015(上冊)
- Oracle數據庫管理、開發與實踐
- 貫通SQL Server 2008數據庫系統開發
- Visual Studio 2013 and .NET 4.5 Expert Cookbook
- 二進制分析實戰
- Unity 2018 By Example(Second Edition)
- 商業智能工具應用與數據可視化
- 數字化轉型實踐:構建云原生大數據平臺