![MATLAB/Simulink权威指南:开发环境、程序设计、系统仿真与案例实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/629/27111629/b_27111629.jpg)
2.1 矩阵的创建
2.1.1 直接输入矩阵
MATLAB语言最简单的创建矩阵的方法是通过键盘在命令窗口直接输入矩阵,直接输入法的规则如下:
(1)将所有矩阵元素置于一对方括号[]内;
(2)同一行不同元素之间用逗号“,”或者空格符来分隔;
(3)不同行用分号“;”或者回车符分隔。
例如,在命令空间输入:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P54_28679.jpg?sign=1739671118-rfBUG6bZx4dKO6pgFT7VYmHaRs4ufsy6-0-141f2a34de30f0a48aa791dae280a869)
MATLAB语言创建复数矩阵,方法和创建一般实数矩阵一样,虚数单位用i或者j表示。例如,创建复数矩阵:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P55_28681.jpg?sign=1739671118-sTSZzUbR0PIfTAOyX2XUoLM3m6s0Ab3x-0-8c94fed742e3f9c18853c1f24bf6e4fd)
其中:
(1)虚部和虚数单位之间可以使用乘号∗连接,也可以忽略乘号∗;
(2)复数矩阵元素可以用运算表达式;
(3)虚数单位用i或者j,显示时都是i。
2.1.2 冒号生成矩阵
在MATLAB语言中,冒号“:”是一个很重要的运算符,可以利用它产生步长相等的一维数组或行向量。冒号表达式的格式如下:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P55_28683.jpg?sign=1739671118-4fkXuvcbOFKlNUGQ0kb0x2UJaDdkWDa6-0-66afed3c0f48155a274105634c1f5160)
其中:
(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=1739671118-9yPNVwgGTg3PcBPCqp1e3BX1JftpZQf1-0-1cbf13cc2de3fa09856461e0151f8da4)
2.1.3 利用函数生成矩阵
在MATLAB语言中,可以利用函数生成一维数组或者行向量。
1.linspace函数
MATLAB语言可以用linspace函数生成初值、终值和元素个数已知的一维数组或者行向量,元素之间是等差数列。其调用格式如下:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P56_28686.jpg?sign=1739671118-p6TEgcE3nVwqIojupMyrMR4MGop2EO3Y-0-7b06ac8d9176e40d8eeb265dccc39c11)
其中:
(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=1739671118-y1EXJKBSdufq3ji4p0gyKSFA0WlO2RnT-0-04c2cf00510182a6d5e78435db10e5ca)
2.logspace函数
MATLAB语言可以用logspace函数生成一维数组或者行向量,元素之间是对数等比数列。其调用格式如下:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P56_28689.jpg?sign=1739671118-d6JTkNYeF2TwcT88mLDqljmQKP3b0CjY-0-b0d3aefb9bad757b0a8e384c90e56d31)
其中:
(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=1739671118-LBPB9yBTbKh1cT4iMZ4RQUvV4z5uHT7z-0-a670234c6491fa3de2db468134f0d7a3)
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=1739671118-R1js1c43srtPNMbLlsx1fuwgbok8LIDq-0-0366540b3a534060672ef5ff267d5e2e)
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P57_6970.jpg?sign=1739671118-RD7WDG9GkRJlTIxBBJyi2cDCm7JzD0zI-0-d4a82649777c1b93f09127b3f325dd33)
图2-1 文本文件数据
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P57_28693.jpg?sign=1739671118-9E6rE2opVjuNgZ1gUMWl58wl57yW0mQM-0-2de305b6d5a9fc9ea2b8adb1a76f1a57)
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=1739671118-df4od4z9n7rYT2pGXMokBuAaVtYlmP1X-0-7799e8928118b8358243cae9f9b45adc)
2.1.6 特殊矩阵的生成
MATLAB语言中内置了许多特殊矩阵的生成函数,可以通过这些函数自动生成具有不同特殊性质的矩阵。表2-1是MATLAB语言中常见的特殊矩阵函数。
表2-1 常见的特殊矩阵函数
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-T58_28560.jpg?sign=1739671118-D40Sl2jfdngzrVx56BvwUBwERYMC203E-0-1401d71099ab06a175600f4c83b46855)
1.单位矩阵
MATLAB语言生成单位矩阵的函数是eye,其调用格式如下:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P58_28695.jpg?sign=1739671118-uY1IZcStzp84h5zq5pjzZ7sSFAV7ayp0-0-b314491908c585dbc75c606aede2438e)
其中:
(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=1739671118-vEliTyQDkhYOf1xS5qyUbwCKPXB4svoa-0-f743cc4d1f2eb2b9c1b9089ef1dc16c6)
2.0矩阵
MATLAB语言生成所有元素为0的矩阵的函数是zeros,其调用格式如下:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P59_28698.jpg?sign=1739671118-f6DKgLfcRT7Ydyka05Ub2tpb8BEcqKEQ-0-3b502e860b1e2f1f47d99fcf932a3b06)
其中:
(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=1739671118-5je3ELjMFK3g6H8gAFpalIMfaoCwbOui-0-5977aa768a429a842aa648c8d9ddb330)
3.1矩阵
MATLAB语言生成所有元素为1的矩阵的函数是ones,其调用格式如下:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P59_28701.jpg?sign=1739671118-8HU3Tk5AWFxSp20SNoMSJqL9rHL9SJpU-0-b753c20e38c1bb03d6e22e444df1af42)
其中:
(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=1739671118-rqJwFAYrPbEop7p1jx1PEhgAQcI7c0AJ-0-a3a2ab1f00deca68735becdf3da23563)
4.魔方矩阵
魔方矩阵是指行和列,正和反斜对角线元素之和都相等的矩阵,MATLAB语言可以用magic函数生成魔方矩阵,其调用格式如下:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P60_28705.jpg?sign=1739671118-8XUvNeZ6l08BoFqnacqNTR7a3wTl4E78-0-b286114b7b6a04edba1cd4bfdba5ca22)
其中,A=magic(n)表示生成n×n的魔方矩阵,n>0,且n≠2。例如:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P60_28706.jpg?sign=1739671118-Qm4NhzXKdzU42hetaUlyfwtBswMqJ4zo-0-f5ab2a73b83af08b243cd53fb5890465)
显然,由B和C的结果可知,矩阵A是一个魔方矩阵。
5.0~1均匀分布随机矩阵
MATLAB语言生成0~1均匀分布的随机矩阵的函数是rand,其调用格式如下:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P60_28707.jpg?sign=1739671118-go5QRKckdu54Pxa9SvIggMHLr5of8bXy-0-abc80bac3b6970cbc207d37c6b6a1873)
其中:
(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=1739671118-6Me458b9kRmaOxx4yNHuR8JZtSbgVyCK-0-72232fff24734e2c3eca055b230fc59d)
6.正态分布随机矩阵
MATLAB语言生成均值为0,单位方差的正态分布的随机矩阵的函数是randn,其调用格式如下:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P61_28711.jpg?sign=1739671118-chynnHmbonW2yJBAxYDH3kyjfwtYwx5K-0-c96bda63ecfba104e97a61324ec05368)
其中:
(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=1739671118-2bFA8FPMCYJ1iDyG1r6rwNkjjGPOk0N5-0-1dae0e20c7996c1ac15d7abaa3de1473)
需要指出的是,rand和randn产生的都是随机数,用户所得结果可能与本书的例题不同。
7.对角矩阵
MATLAB语言生成对角矩阵的函数是diag,其调用格式如下:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P62_28714.jpg?sign=1739671118-nGz5WG5T27uvNPDZKlP0bueKyR67OSqL-0-15b689f52eebc0a6d70018a97cc2770f)
其中:
(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=1739671118-kfdVouWxkvPeyYoLJeGLwhqiZO3PfEH3-0-f114bb38e998eb64d7a9c800380b6e18)
若A是一个矩阵,则diag(A)是提取矩阵A的对角线矩阵。例如:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P62_28717.jpg?sign=1739671118-0vsoPUOWDB74TcjJoeiP7xyu7lVeFlIC-0-c10b36d4365a489d1d5e287759d56211)
8.三角矩阵
MATLAB语言生成三角矩阵的函数是tril和triu,其调用格式如下:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P62_28718.jpg?sign=1739671118-vrFZqwLHWfPFPctlGgeoSr5Rzi2SvBIR-0-d6f2d62cb8d071ccf9ce5d8a295fdef0)
其中:
(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=1739671118-30cSLi2nI089WpbgHNoIedLGvu3a7nHV-0-353b2c2ebd2553359e29e77d19749208)