由于此地板涉嫌违规,因此它将折叠在系统中以隐藏此地板并显示此地板
既然MATLAB被命名为矩阵实验室,说明该软件在矩阵计算方面有非常好的表现。 在MATLAB中,一个矩阵通常指矩形数组。 特殊情况下,有单个元素的标量和一行或一列矩阵(即向量)。 MATLAB还有其他存储数值数据和非数值数据的方式,但对于初学者来说,将所有情况都视为矩阵更容易使用。 MATLAB的设计理念是一切操作尽可能自然。 其他编程语言在处理数据的过程中,一次只能处理一个数字,而MATLAB则允许用户快速方便地采用矩阵进行操作。
1 .矩阵的创建和组合
MATLAB最基本的数据结构是矩阵。 二维矩形形状的数据可以以易于使用的矩阵形式存储。 这些数据可以是数字、字符、逻辑状态(true或false ),也可以是MATLAB结构数组类型。 MATLAB使用二维矩阵存储单个数字或线性数列。 MATLAB同时支持二维以上的数据结构。
1.1创建简单矩阵
MATLAB是一个基于矩阵的计算环境。 用户输入的所有数据都存储为矩阵或多维数组。 即使是数值型标量,例如100也会存储为矩阵。
【例2-1】单一标量的输入示例。
A=100; 在%中输入数值a
可以使用whos % whos命令查看存储在Workspace中的变量信息
Name Size Bytes Class Attributes
a 1x1 8双精度
从该例可知,标量a的存储形式是11的矩阵,消耗8字节的存储区域,数据类型是倍精度浮点数。
创建MATLAB矩阵的最简单方法是使用名为方括号[]的MATLAB矩阵创建标识符。 要创建行向量,只需在大括号中键入相应的元素,然后使用空格或逗号作为分隔符来分隔相邻的元素。
row=[E1,E2,En]
row=[E1 E2 . En]
要在矩阵中输入以下行,请使用分号作为行距分隔符:
A=[row1; row2; rown]
例如,创建一个包含五个元素的单行矩阵,可以在命令行中输入以下命令:
A=[12 62 93 -8 22];
【例2-2】制作以2~20区间2为步骤的向量。
在MATLAB中,可以使用“初始值:步长:最终值”创建向量。 在本示例中,可以在命令窗口中键入以下内容:
a=2:2:20
按回车键后,命令窗口中将显示以下内容:
a=
2 4 6 8 10 12 14 16 18 20
另外,步长也可以是正数、负数或小数。 如果用户未指定公式步骤项,则MATLAB的缺省步骤为1。 例如:
b=1:10
b=
1 2 3 4 5 6 7 8 9 10
另外,如果用户指定的区间不是步骤的整数倍,则以初始值为基准依次添加步骤来生成序列,如以下c所示。
c=3:5:15
c=
3 8 13
【例2-3】以形成3行5列矩阵的方法为例进行说明。 另外,在矩阵输入时,矩阵的各行必须有相同数量的元素。
A=[12 62 93 -8 22; 16 2 87 43 91; -4 17-72 95 6]
A=
12 62 93 -8 22
16 2 87 43 91
-4 17 -72 95 6
方括号标识符只能创建包含00、11、1n、Mn等类型的二维矩阵。 创建多维矩阵时,请继续关注公众号文章。 如果需要读取和赋值矩阵中的特定元素,也请继续关注。
在矩阵中输入带符号的数字时,请注意在符号后面加上值,不要在两者之间添加空格。 从下面的比较可以看出有什么区别。
【例2-4】矩阵内的带符号数值输入例。
以下两个表达式的示例说明符号和数字之间是否存在空格不会影响计算结果。
7 -2 5
ans=
10
7 - 2 5
ans=
10
但是,以下两个示例说明,如果在输入矩阵时符号和数字之间存在空格,则结果会不同。 读者在这方面要注意,以免计算结果出错。
[7 - 2 5]
ans=
10
[7 -2 5]
ans=
7 -2 5
1.2特殊矩阵的建立
MATLAB中嵌入了许多函数,可以直接用于创建各种特殊矩阵。 例如创
建zxddg矩阵和受伤的柚子矩阵。表2-1中列出了一些常用的特殊矩阵的创建函数。这里需要再次强调一下,函数名称对于大小写是敏感的,在MATLAB中函数名称一般是全部小写的,如果转换了其中一个字母的大小写那么可能调用的就是另一个函数或者会发生调用错误。表2-1 常用特殊矩阵的创建函数
函数名称 函数功能 函数名称 函数功能
zeros 产生一个所有元素为零的矩阵 pascal 生成PASCAL矩阵
diag 产生一个对角矩阵 rand 随机产生均匀分布的矩阵
ones 生成所有元素全为1的矩阵 randn 随机产生正态分布的矩阵
eye 生成单位矩阵 randperm 产生一个由指定整数元素随机分布构成的矩阵
magic 生成魔方矩阵
【例2-5】 特殊矩阵创建函数示例。
>> ones(4) % 创建所有元素为1的矩阵
ans =
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
>> eye(5) % 创建单位矩阵
ans =
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
>> rand(2,3) % 创建2´3的均匀分布随机数矩阵
ans =
0.8147 0.1270 0.6324
0.9058 0.9134 0.0975
>> randperm(7) % 创建由1∶7构成的随机数列
ans =
5 1 2 7 3 4 6
需要指出的是:每次运行随机函数都会得到不同的结果,这是因为默认状态下随机数的种子都不同。这也是随机数的意义所在。若要用函数产生相同的矩阵以验证操作的结果,可以按如下方法设置随机种子状态:
>>rand('state', 0);
>> randperm(7)
ans =
2 7 4 3 6 5 1
通过如此设置,读者就可以得到和本书中相同的结果。
1.3 矩阵的合并
矩阵的合并是指将两个或者多个矩阵合并到一起构成一个新的矩阵。前面提到的矩阵标识符方括号[],不仅可以用来创建新的矩阵,还可以用来将若干个矩阵合并到一起。
表达式C = [专一的魔镜]将矩阵A和B在水平方向上合并到一起,而表达式C = [A; B]则将矩阵A和B在竖直方向上合并到一起。
【例2-6】 求矩阵A和B在竖直方向上合并到一起后得到的矩阵C。
>> rand('state', 0); % 设置随机种子,便于读者验证
>> A = ones(2, 5) * 6; % 元素全部为6的2´5矩阵
>> B = rand(3, 5); % 3´5 的随机数矩阵
>> C = [A; B]
C =
6.0000 6.0000 6.0000 6.0000 6.0000
6.0000 6.0000 6.0000 6.0000 6.0000
0.9501 0.4860 0.4565 0.4447 0.9218
0.2311 0.8913 0.0185 0.6154 0.7382
0.6068 0.7621 0.8214 0.7919 0.1763
需要指出的是:在矩阵的合并过程中要保持新生成的矩阵为长方形,否则MATLAB将会报错。也就是说,如果要在水平方向上合并矩阵,那么每个子矩阵的行数必须相同;如果要在竖直方向上合并矩阵,那么每个子矩阵的列数必须相同。
如图2-1所示,图中具有相同行数的矩阵可以水平合并,而行数不同的矩阵是不能水平合并的。