
2.1 矩阵的创建
2.1.1 直接输入矩阵
MATLAB语言最简单的创建矩阵的方法是通过键盘在命令窗口直接输入矩阵,直接输入法的规则如下:
(1)将所有矩阵元素置于一对方括号[]内;
(2)同一行不同元素之间用逗号“,”或者空格符来分隔;
(3)不同行用分号“;”或者回车符分隔。
例如,在命令空间输入:

MATLAB语言创建复数矩阵,方法和创建一般实数矩阵一样,虚数单位用i或者j表示。例如,创建复数矩阵:

其中:
(1)虚部和虚数单位之间可以使用乘号∗连接,也可以忽略乘号∗;
(2)复数矩阵元素可以用运算表达式;
(3)虚数单位用i或者j,显示时都是i。
2.1.2 冒号生成矩阵
在MATLAB语言中,冒号“:”是一个很重要的运算符,可以利用它产生步长相等的一维数组或行向量。冒号表达式的格式如下:

其中:
(1)a是数组或者行向量的第一个元素,b是最后一个元素,step是步长增量;
(2)冒号表达式可以产生一个由a开始到b结束,以步长step自增或自减(步长为负值,b<a)的数组或者行向量;
(3)如果步长step=1,则冒号表达式可以省略步长,直接写为x=a:b。
例如:

2.1.3 利用函数生成矩阵
在MATLAB语言中,可以利用函数生成一维数组或者行向量。
1.linspace函数
MATLAB语言可以用linspace函数生成初值、终值和元素个数已知的一维数组或者行向量,元素之间是等差数列。其调用格式如下:

其中:
(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是等价的。
例如:

2.logspace函数
MATLAB语言可以用logspace函数生成一维数组或者行向量,元素之间是对数等比数列。其调用格式如下:

其中:
(1)第一个元素为10 a,最后一个元素为10 b,元素个数为n的对数等比数列;
(2)如果b的值为pi,则该函数产生到pi之间n个对数等比数列。
例如:

2.1.4 利用文本文件生成矩阵
MATLAB语言中的矩阵还可以由文本文件生成,即先建立txt数据文件,然后在命令窗口直接调用该文件,就能产生数据矩阵。需要注意,txt文件中不含变量名称,文件名为矩阵变量名,每行数值个数相等。
这种生成矩阵方法的优点是可以将数据存储在文本文件中,利用load函数,直接将数据读入MATLAB工作空间中,自动生成矩阵,而不需要手动输入数据。
【例2-1】 利用文本文件建立矩阵A,把下面代码另存至工作目录中,文件名为A.txt文件,如图2-1所示。


图2-1 文本文件数据

2.1.5 利用M文件生成矩阵
对于一些比较大的常用矩阵,MATLAB语言可以为它专门建立一个M文件,在命令窗口中直接调用文件,此种方法比较适合大型矩阵创建,便于修改。需要注意,M文件中的矩阵变量名不能与文件名相同,否则会出现变量名和文件名混乱的情况。
【例2-2】 利用M文件生成如下大矩阵A,文件名为exam_2_2.m:

2.1.6 特殊矩阵的生成
MATLAB语言中内置了许多特殊矩阵的生成函数,可以通过这些函数自动生成具有不同特殊性质的矩阵。表2-1是MATLAB语言中常见的特殊矩阵函数。
表2-1 常见的特殊矩阵函数

1.单位矩阵
MATLAB语言生成单位矩阵的函数是eye,其调用格式如下:

其中:
(1)A1=eye(n)表示生成n×n的单位矩阵;
(2)A2=eye(m,n)表示生成m×n的单位矩阵。
例如:

2.0矩阵
MATLAB语言生成所有元素为0的矩阵的函数是zeros,其调用格式如下:

其中:
(1)A1=zeros(n)表示生成n×n的0矩阵;
(2)A2=zeros(m,n)表示生成m×n的0矩阵。
例如:

3.1矩阵
MATLAB语言生成所有元素为1的矩阵的函数是ones,其调用格式如下:

其中:
(1)A1=ones(n)表示生成n×n的1矩阵;
(2)A2=ones(m,n)表示生成m×n的1矩阵。
例如:

4.魔方矩阵
魔方矩阵是指行和列,正和反斜对角线元素之和都相等的矩阵,MATLAB语言可以用magic函数生成魔方矩阵,其调用格式如下:

其中,A=magic(n)表示生成n×n的魔方矩阵,n>0,且n≠2。例如:

显然,由B和C的结果可知,矩阵A是一个魔方矩阵。
5.0~1均匀分布随机矩阵
MATLAB语言生成0~1均匀分布的随机矩阵的函数是rand,其调用格式如下:

其中:
(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均匀分布的随机矩阵。
例如:

6.正态分布随机矩阵
MATLAB语言生成均值为0,单位方差的正态分布的随机矩阵的函数是randn,其调用格式如下:

其中:
(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的正态分布的随机矩阵。
例如:

需要指出的是,rand和randn产生的都是随机数,用户所得结果可能与本书的例题不同。
7.对角矩阵
MATLAB语言生成对角矩阵的函数是diag,其调用格式如下:

其中:
(1)A=diag(v,k)表示生成以向量v元素作为矩阵A的第k条对角线元素的对角矩阵;
(2)当k=0时,v为A的主对角线,当k>0时,v为A的主对角线上方第k条对角线的元素,当k<0时,v为A的主对角线下方第k条对角线的元素。
例如:

若A是一个矩阵,则diag(A)是提取矩阵A的对角线矩阵。例如:

8.三角矩阵
MATLAB语言生成三角矩阵的函数是tril和triu,其调用格式如下:

其中:
(1)A1=tril(A,k)表示生成矩阵A中第k条对角线的下三角部分的矩阵;
(2)A1=triu(A,k)表示生成矩阵A中第k条对角线的上三角部分的矩阵;
(3)k=0为A的主对角线,k>0为A的主对角线以上,k<0为A的主对角线以下。
例如:
