![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=1738886388-AkCQnxHe3R16dXxsys7ilfG9LODseDqc-0-7cbaca003df08b6c53361a084fa54428)
MATLAB语言创建复数矩阵,方法和创建一般实数矩阵一样,虚数单位用i或者j表示。例如,创建复数矩阵:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P55_28681.jpg?sign=1738886388-4UACqexhVnmZjCj58OvWoUnoT7ZhnyQF-0-e2616e15e3212dde2d2e5a81c41d01c0)
其中:
(1)虚部和虚数单位之间可以使用乘号∗连接,也可以忽略乘号∗;
(2)复数矩阵元素可以用运算表达式;
(3)虚数单位用i或者j,显示时都是i。
2.1.2 冒号生成矩阵
在MATLAB语言中,冒号“:”是一个很重要的运算符,可以利用它产生步长相等的一维数组或行向量。冒号表达式的格式如下:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P55_28683.jpg?sign=1738886388-Nj3yDG7graHuYwQuzn8BDLy8pFKQ8kYx-0-be88f529ad1b30383a70108bdb948616)
其中:
(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=1738886388-zQNJObcalrZDbrtBLhZuufDLB2rt8NCh-0-c3bb3fe72797b0e3fcd919560dbee7ba)
2.1.3 利用函数生成矩阵
在MATLAB语言中,可以利用函数生成一维数组或者行向量。
1.linspace函数
MATLAB语言可以用linspace函数生成初值、终值和元素个数已知的一维数组或者行向量,元素之间是等差数列。其调用格式如下:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P56_28686.jpg?sign=1738886388-QDFDBNM59O8gPXIqBcCi9piJFjX1FzFD-0-485c88f90f8daf63c1053160ad6679da)
其中:
(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=1738886388-UKAXqoqnBSsi612d1KBXgIVcMhfLOmwq-0-821b148ecb67be7137434445accc3263)
2.logspace函数
MATLAB语言可以用logspace函数生成一维数组或者行向量,元素之间是对数等比数列。其调用格式如下:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P56_28689.jpg?sign=1738886388-ExAILYbOC57EHl5OPWI08BPRKJ7ICK01-0-b1a5a7d185042a012ce7b2fd5380d39e)
其中:
(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=1738886388-L73uO0ZseKMFhR39qD5Yf8HJmVESD223-0-7350e81577f9d94c0601d28633823d35)
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=1738886388-vBrGUixs0rl2jspoAsiLsNMJCzsvfer1-0-a95e56fe4b698eb9b0dcbb8d046cfde6)
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P57_6970.jpg?sign=1738886388-PD86KLI1FlkVklGjmIxKQnFssfNPoynT-0-b392e5de586e8f7a6949f897d683e036)
图2-1 文本文件数据
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P57_28693.jpg?sign=1738886388-cWLibe9n1wFRublrllsV5Iq62kPbOPMq-0-cb1b656462dabed271d4020dc4b1efa4)
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=1738886388-HMWwo6rgGocZUk5tIpq1z8xngQuKsnPm-0-752d4c54d689444bc06fd1f31ba28827)
2.1.6 特殊矩阵的生成
MATLAB语言中内置了许多特殊矩阵的生成函数,可以通过这些函数自动生成具有不同特殊性质的矩阵。表2-1是MATLAB语言中常见的特殊矩阵函数。
表2-1 常见的特殊矩阵函数
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-T58_28560.jpg?sign=1738886388-HU0PrzAbnFzWQ4jjlz07W3B77Y5rLzP9-0-bbf87a0517b5e58c3de4bd6809d7768d)
1.单位矩阵
MATLAB语言生成单位矩阵的函数是eye,其调用格式如下:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P58_28695.jpg?sign=1738886388-QMVV4wl9m6YuXpaPUgKDrDBnJFaKoDLI-0-1255f08c2018b9e56ef349066b837ef4)
其中:
(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=1738886388-dicvUgGos1J8LymOTG6d8MXOG0Mlgry4-0-5e176360a281c89d418369e79f860205)
2.0矩阵
MATLAB语言生成所有元素为0的矩阵的函数是zeros,其调用格式如下:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P59_28698.jpg?sign=1738886388-Lf3kdDJ3EFsMhjeTZQoGUtmwX9Rqhsfr-0-be64b21578b7e0337a8f67b015659a22)
其中:
(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=1738886388-CrCu0z4J2sy1dlazzLOuZpreEvGShEgO-0-d4f8a175b8b27f5b5ceb28f255d7958e)
3.1矩阵
MATLAB语言生成所有元素为1的矩阵的函数是ones,其调用格式如下:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P59_28701.jpg?sign=1738886388-qUOo941AopETBI7JcJJuutJSHOECH9hF-0-5e2bb578651375a78ae7360d8659e9b5)
其中:
(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=1738886388-jdBhpE84zoWOjgwo1AwfeJDyyssVkUtm-0-bd021b4db70a6af7f28276f2fbb85bc1)
4.魔方矩阵
魔方矩阵是指行和列,正和反斜对角线元素之和都相等的矩阵,MATLAB语言可以用magic函数生成魔方矩阵,其调用格式如下:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P60_28705.jpg?sign=1738886388-Ayz7Uy2fiBPk0hIWXyGkEmlPHQYhDaDr-0-7f46beb23c5ad9f496f50a4441b28261)
其中,A=magic(n)表示生成n×n的魔方矩阵,n>0,且n≠2。例如:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P60_28706.jpg?sign=1738886388-D4D5XbhRBfUFP9P3PMPUuH2rvdfCVd5e-0-109bf8e8d41b2d827f5b6b07617dec8f)
显然,由B和C的结果可知,矩阵A是一个魔方矩阵。
5.0~1均匀分布随机矩阵
MATLAB语言生成0~1均匀分布的随机矩阵的函数是rand,其调用格式如下:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P60_28707.jpg?sign=1738886388-8as6aEOLTMgiZeXa5DwJO4N4o9CIeHPZ-0-4aa733ff08126f2ab6b906e2e1f32c1e)
其中:
(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=1738886388-fDniaJXe0RgjntR4mYwPgc6vKEcvN5bp-0-75651cbf8700a64187d77c1e7d71861b)
6.正态分布随机矩阵
MATLAB语言生成均值为0,单位方差的正态分布的随机矩阵的函数是randn,其调用格式如下:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P61_28711.jpg?sign=1738886388-AMQrOfUg7D1yo77LHf64tK2VcXlsuJff-0-73b9c52dd9842355af45c994a0d2c702)
其中:
(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=1738886388-lf6SFqLBzNsPJ442GMaEyj9PHEcDLeBv-0-01e20ef73c3f2dd46e3eef38fe4aead5)
需要指出的是,rand和randn产生的都是随机数,用户所得结果可能与本书的例题不同。
7.对角矩阵
MATLAB语言生成对角矩阵的函数是diag,其调用格式如下:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P62_28714.jpg?sign=1738886388-sqyMP4xwvQMccsNR3C133WJJ5qozR8Ch-0-0bf576de7ae0545f294d85e5bbea459e)
其中:
(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=1738886388-qyFSyLnouQE3AFSsnsNOfpEQbJHrNmFF-0-1c3c8778e48fecbc894ad2ab60bba236)
若A是一个矩阵,则diag(A)是提取矩阵A的对角线矩阵。例如:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P62_28717.jpg?sign=1738886388-wlpsha7MrvSr7iSAeW6jBNvjPMI7nQnQ-0-bb31d894ba9c6d7a04d228498bfeb5d5)
8.三角矩阵
MATLAB语言生成三角矩阵的函数是tril和triu,其调用格式如下:
![](https://epubservercos.yuewen.com/59B7C6/15477655505633306/epubprivate/OEBPS/Images/Figure-P62_28718.jpg?sign=1738886388-ha0be4AdVfi3aHFclWfCCVbhtqtuhPdB-0-b6e86ef7b432a09d2735adbaffcafd4d)
其中:
(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=1738886388-qIRfZfppnSPa0jeeRRzXbQGtcKjCt2YH-0-f919a565129084e8a2b0ec6d7192d106)