- MATLAB/Simulink权威指南:开发环境、程序设计、系统仿真与案例实战
- 徐国保 张冰 石丽梅 吴凡
- 2254字
- 2021-03-24 02:07:14
2.1 矩阵的创建
2.1.1 直接输入矩阵
MATLAB语言最简单的创建矩阵的方法是通过键盘在命令窗口直接输入矩阵,直接输入法的规则如下:
(1)将所有矩阵元素置于一对方括号[]内;
(2)同一行不同元素之间用逗号“,”或者空格符来分隔;
(3)不同行用分号“;”或者回车符分隔。
例如,在命令空间输入:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P54_28679.jpg?sign=1739688840-PVNSpKpJx4rgWsnb1YY5jtQzrhlvLFlO-0-95cd89cdac106ced1d20cf2562191478)
MATLAB语言创建复数矩阵,方法和创建一般实数矩阵一样,虚数单位用i或者j表示。例如,创建复数矩阵:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P55_28681.jpg?sign=1739688840-ahkHyuUbZeBnSxtWqWQh2WMixXyTdX6g-0-c48df42aca9ac4736ce092c7666b53b9)
其中:
(1)虚部和虚数单位之间可以使用乘号∗连接,也可以忽略乘号∗;
(2)复数矩阵元素可以用运算表达式;
(3)虚数单位用i或者j,显示时都是i。
2.1.2 冒号生成矩阵
在MATLAB语言中,冒号“:”是一个很重要的运算符,可以利用它产生步长相等的一维数组或行向量。冒号表达式的格式如下:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P55_28683.jpg?sign=1739688840-Xkhy6oia1CfgesvJ4uk2CfynI5uF1eKH-0-fe75430c092b57c901ba02dd659a7d7d)
其中:
(1)a是数组或者行向量的第一个元素,b是最后一个元素,step是步长增量;
(2)冒号表达式可以产生一个由a开始到b结束,以步长step自增或自减(步长为负值,b<a)的数组或者行向量;
(3)如果步长step=1,则冒号表达式可以省略步长,直接写为x=a:b。
例如:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P55_28685.jpg?sign=1739688840-q3mfVPupNtKO1pdtcOv7LEGDlLRx2RrP-0-d6b65a7ed61ab6d462275be074460cb1)
2.1.3 利用函数生成矩阵
在MATLAB语言中,可以利用函数生成一维数组或者行向量。
1.linspace函数
MATLAB语言可以用linspace函数生成初值、终值和元素个数已知的一维数组或者行向量,元素之间是等差数列。其调用格式如下:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P56_28686.jpg?sign=1739688840-fNiKsPWVpwGVmlrfSZeJmI7LcT8tBa9T-0-8e992e4fe3dd93d478d18917161bb832)
其中:
(1)a和b分别是生成一维数组或者行向量的初值和终值,n是元素总数,当n省略时,自动产生100个元素;
(2)用linspace函数产生的一维数组或者行向量,n个元素是等差数列;
(3)当a>b时,元素之间是等差递减,当a<b时,元素之间是等差递增;
(4)显然,linspace(a,b,n)与a:(b﹣a)/(n﹣1):b是等价的。
例如:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P56_28688.jpg?sign=1739688840-a99f0l1JwB0adgJ3EBLCWtrKEMN3siY8-0-db9e5619969641c33ae5ab7ba90dbf8d)
2.logspace函数
MATLAB语言可以用logspace函数生成一维数组或者行向量,元素之间是对数等比数列。其调用格式如下:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P56_28689.jpg?sign=1739688840-mUsXMbYdqTMyZzJE6RZvkZ0wIpq8La44-0-72be44e44a5528c4fd9d9938a9a28884)
其中:
(1)第一个元素为10 a,最后一个元素为10 b,元素个数为n的对数等比数列;
(2)如果b的值为pi,则该函数产生到pi之间n个对数等比数列。
例如:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P56_28691.jpg?sign=1739688840-JQ3M4XdPrvA5dme0HNuQ6bFyYoP14EqM-0-3ab347757b6b59bcfaebf884a21ab4ee)
2.1.4 利用文本文件生成矩阵
MATLAB语言中的矩阵还可以由文本文件生成,即先建立txt数据文件,然后在命令窗口直接调用该文件,就能产生数据矩阵。需要注意,txt文件中不含变量名称,文件名为矩阵变量名,每行数值个数相等。
这种生成矩阵方法的优点是可以将数据存储在文本文件中,利用load函数,直接将数据读入MATLAB工作空间中,自动生成矩阵,而不需要手动输入数据。
【例2-1】 利用文本文件建立矩阵A,把下面代码另存至工作目录中,文件名为A.txt文件,如图2-1所示。
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P57_28692.jpg?sign=1739688840-j33aIt1Lgo8ivaHUA7n1bm55XAQuHBLt-0-c46aabf0873c6caceee637e47d5c4ed5)
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P57_6970.jpg?sign=1739688840-jLucwCMk7OBeSb4H9yQEKYpB7RmrhaTL-0-230dc5d23fad0d54c57f76731837edac)
图2-1 文本文件数据
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P57_28693.jpg?sign=1739688840-VP0Mog6D5k4UmWdotCyiX7OhcFVYDPzy-0-52a2ad48bedb1ed41ea7a0468b3c0d00)
2.1.5 利用M文件生成矩阵
对于一些比较大的常用矩阵,MATLAB语言可以为它专门建立一个M文件,在命令窗口中直接调用文件,此种方法比较适合大型矩阵创建,便于修改。需要注意,M文件中的矩阵变量名不能与文件名相同,否则会出现变量名和文件名混乱的情况。
【例2-2】 利用M文件生成如下大矩阵A,文件名为exam_2_2.m:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P58_28694.jpg?sign=1739688840-BCJnjcg3NCTfVz9uIqOI4MM2Hdj99C5T-0-56921b1b35ee2e605e3f6318a869604b)
2.1.6 特殊矩阵的生成
MATLAB语言中内置了许多特殊矩阵的生成函数,可以通过这些函数自动生成具有不同特殊性质的矩阵。表2-1是MATLAB语言中常见的特殊矩阵函数。
表2-1 常见的特殊矩阵函数
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-T58_28560.jpg?sign=1739688840-MF228gtFYkF4DoTKPiI67zqh9WJIa8Ld-0-2887495c27da97ec15c23ea328e65dde)
1.单位矩阵
MATLAB语言生成单位矩阵的函数是eye,其调用格式如下:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P58_28695.jpg?sign=1739688840-BFbuQkTDjB49F57lhcgy32Fi1P7icsR1-0-729a2b44ff9fa8aee29bae709d1f03a2)
其中:
(1)A1=eye(n)表示生成n×n的单位矩阵;
(2)A2=eye(m,n)表示生成m×n的单位矩阵。
例如:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P59_28697.jpg?sign=1739688840-5j8n8mmx2UBmpOwU4YeMRril5mgFpoAX-0-dad9e7c9ecd939fd138a8ae6c8b68d13)
2.0矩阵
MATLAB语言生成所有元素为0的矩阵的函数是zeros,其调用格式如下:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P59_28698.jpg?sign=1739688840-fNdUa1dhuYVxu1IYDtBBFBoTlLdcngzG-0-99367ff726894cb7e4b22a797e65463f)
其中:
(1)A1=zeros(n)表示生成n×n的0矩阵;
(2)A2=zeros(m,n)表示生成m×n的0矩阵。
例如:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P59_28700.jpg?sign=1739688840-wjUtdnNS01qUMTWsHO4PJG3P8WhAVMqD-0-8300f02707255fa43323c25db0c86e8a)
3.1矩阵
MATLAB语言生成所有元素为1的矩阵的函数是ones,其调用格式如下:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P59_28701.jpg?sign=1739688840-gHI9ae6OOiGERLz7cUPvWLuxa4DF0VH4-0-b54db5846afcb4f75c18dd620bbf538e)
其中:
(1)A1=ones(n)表示生成n×n的1矩阵;
(2)A2=ones(m,n)表示生成m×n的1矩阵。
例如:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P59_28703.jpg?sign=1739688840-N4jYYm5P1a9JGZ7TASdJZUDBmtE0WcZ0-0-13ad386349cf509eb6917d9f83f7053d)
4.魔方矩阵
魔方矩阵是指行和列,正和反斜对角线元素之和都相等的矩阵,MATLAB语言可以用magic函数生成魔方矩阵,其调用格式如下:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P60_28705.jpg?sign=1739688840-ySO4P3SEAMiDkzlbdGnJSenTXg09XmQD-0-4986989eae737c930a49ffe28e5ddd09)
其中,A=magic(n)表示生成n×n的魔方矩阵,n>0,且n≠2。例如:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P60_28706.jpg?sign=1739688840-UFFK6Xq5VMv5Ss0UxYf4jfMwjCozPCdv-0-efba8a7eae680adbb0fe5121f6ab5afd)
显然,由B和C的结果可知,矩阵A是一个魔方矩阵。
5.0~1均匀分布随机矩阵
MATLAB语言生成0~1均匀分布的随机矩阵的函数是rand,其调用格式如下:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P60_28707.jpg?sign=1739688840-nuVdR1MBUIIS6ha7oQTdh8GsujbHQlqJ-0-70e132d9587b8a56b30eab060b611aff)
其中:
(1)A1=rand(n)表示生成n×n个元素值为0~1均匀分布的随机矩阵;
(2)A2=rand(m,n)表示生成m×n个元素值为0~1均匀分布的随机矩阵;
(3)A3=a+(b﹣a)∗rand(m,n)表示生成m×n个元素值为a~b均匀分布的随机矩阵。
例如:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P60_28709.jpg?sign=1739688840-p3IoH2mAUsvPWSjGzAghjx0TkvxgMFrW-0-0ba7ade4acea156c8a2c3253151df629)
6.正态分布随机矩阵
MATLAB语言生成均值为0,单位方差的正态分布的随机矩阵的函数是randn,其调用格式如下:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P61_28711.jpg?sign=1739688840-xCvfOxhGAgI4rn8rpb7F084IilaejzeG-0-f452e0b5fbd5c9a023063212a6ad6e44)
其中:
(1)A1=randn(n)表示生成n×n个元素且均值为0、方差为1的正态分布的随机矩阵;
(2)A2=randn(m,n)表示生成m×n个元素且均值为0、方差为1的正态分布的随机矩阵;
(3)A3=a+sqrt(b)∗randn(m,n)表示生成m×n个元素且均值为a、方差为b的正态分布的随机矩阵。
例如:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P61_28713.jpg?sign=1739688840-DfaTs9EvMiWHqetfX8GHBBeuZaFpNEyg-0-1f1eb2efd388979d3227ed8485b08209)
需要指出的是,rand和randn产生的都是随机数,用户所得结果可能与本书的例题不同。
7.对角矩阵
MATLAB语言生成对角矩阵的函数是diag,其调用格式如下:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P62_28714.jpg?sign=1739688840-dTzcXCjSSkRBnICvucYFNCVnvPodfTEq-0-a03f5a8178418b6d5c8b7e587cb69419)
其中:
(1)A=diag(v,k)表示生成以向量v元素作为矩阵A的第k条对角线元素的对角矩阵;
(2)当k=0时,v为A的主对角线,当k>0时,v为A的主对角线上方第k条对角线的元素,当k<0时,v为A的主对角线下方第k条对角线的元素。
例如:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P62_28716.jpg?sign=1739688840-STvUyqWlMU1gjUmR8qDAx24j0EJY7DKM-0-2c20d9f3585fef88ca50c9de35c324cd)
若A是一个矩阵,则diag(A)是提取矩阵A的对角线矩阵。例如:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P62_28717.jpg?sign=1739688840-38nLqUn1znjdhCJbqGdLjQOitIkBgWhX-0-c478d8a886a4831bc6f2dcc83f5b6e00)
8.三角矩阵
MATLAB语言生成三角矩阵的函数是tril和triu,其调用格式如下:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P62_28718.jpg?sign=1739688840-HvpzHPjF3hFR57yHOKx93J9K35xrzH6C-0-2a26781951388d33009e35eee498d743)
其中:
(1)A1=tril(A,k)表示生成矩阵A中第k条对角线的下三角部分的矩阵;
(2)A1=triu(A,k)表示生成矩阵A中第k条对角线的上三角部分的矩阵;
(3)k=0为A的主对角线,k>0为A的主对角线以上,k<0为A的主对角线以下。
例如:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P62_28721.jpg?sign=1739688840-Q0qmBe3dmImeYrVwVoVnKXHU1acz0gJK-0-dcc4052609b3d6bcbe9bd8cca315ab33)