文章目录
在matlab中,一般情况下矩阵就是指一个长方形的数组,这里分为两种情况:一是单一元素的标量,二是只有一行或者一列的矩阵,也就是向量。
一、矩阵的创建与合并
一个二维、长方形形状的数据,可以用易于使用的矩形形式来存储,这些数据可以是数字、字符、逻辑形态(true或false),甚至是Matlab的结构数组类型。Matlab使用二维的矩阵来存储单个数值或者线性数列,也同时支持多于二维的数据结构。
1.1 创建简单矩阵
Matab是基于矩阵的计算环境。所有用户输入的数据都将会以矩阵的形式或者是多维数组来存储。即使是一个数值型的标量,例如100,也会以矩阵的形式来存储。
>> a = 100;%单个标量的输入
>> whos
Name Size Bytes Class Attributes
a 1x1 8 double
从上例中可以知晓标量a的存储格式为1X1的矩阵,占用了8字节的内存空间,数据的类型是双精度浮点数。
创建二维矩阵的语法格式:row = [E1,E2,...,En]
>> b = [12 62 93 -8 22];%单行矩阵
>> whos
Name Size Bytes Class Attributes
b 1x5 40 double
在mtalab中也可以用“初值:步长:终值”方式创建2~20区间内以2为步长的向量。注:步长可正、可负或者小数。
>> c = 2:2:20;
>> c
c =
2 4 6 8 10 12 14 16 18 20
若创建多行多列矩阵,则用分号作为行之间的分隔符即可。
A = [row1; row2; ...; rown]
例如创建一个3行5列的矩阵:
>> d = [12 62 93 -8 22;16 2 87 43 91;-4 17 -72 95 6];
>> d
d =
12 62 93 -8 22
16 2 87 43 91
-4 17 -72 95 6
1.2 创建特殊矩阵
使用函数可以直接创建不同的特殊矩阵。注:函数名称区分大小写。
以下是常见特殊矩阵的创建函数。
函数名称 | 函数功能 |
---|---|
zeros | 创建所有元素为0的矩阵 |
diag | 创建对角矩阵 |
ones | 创建所有元素为1的矩阵 |
eye | 创建单位矩阵 |
magic | 创建魔方矩阵 |
rand | 随机产生均匀分布的矩阵 |
randn | 随机产生正态分布的矩阵 |
创建一个4行4列所有元素都为1的矩阵、创建一个2*3的均匀分布随机数矩阵:
>> ones(4)
ans =
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
>> rand(2,3)
ans =
0.8147 0.1270 0.6324
0.9058 0.9134 0.0975
1.3 矩阵的合并
- 水平合并:
C = [A B]
要求:每个子矩阵的行数必须相同。 - 竖直合并:
C = [A;B]
要求:每个子矩阵的列数必须相同。
二、矩阵的寻访与赋值
寻访有以下三种标识方法,全下标标识法由于几何概念清楚,引述简单,因此在矩阵的寻访中用的最多;单下标标识法的优势实在特定情境下使用更为简洁;逻辑1标识法在速度方面具有一定的优势,综合以上,根据不同的场景需求选择不用的寻访方式。
- 全下标标识法:即指出某一元素在第几行第几列
- 单下标标识法:只用一个下标来标明元素在矩阵中的位置
- 逻辑1标识法:逻辑1标识法用一个基于原矩阵A相对位置的逻辑数组B来对矩阵A进行寻访;此方法应用在查找矩阵中的大于或者小于某值的元素的问题。
例如:创建一个测试矩阵,然后采用不同的标识方式进行寻访。
>> a = [1 2 3; 4 5 6];%创建测试矩阵
>> a
a =
1 2 3
4 5 6
>> b = a(2,3);%采用全下标标识法寻访
b =
6
>> c = a(5);%采用单下标标识法寻访
c =
3
>> d = a>4;%返回逻辑下标
d =
2×3 logical 数组
0 0 0
0 1 1
>> e = a(d);%采用逻辑1标识法寻访
e =
5
6
赋值
利用上述的寻访方式,可以轻松做到给矩阵赋值,如下就是分别利用全下标标识和单下标方式进行赋值。
>> a = magic(4)
a =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
>> a(3,4)=0
a =
16 2 3 13
5 11 10 8
9 7 6 0
4 14 15 1
>> a(:,1)=1
a =
1 2 3 13
1 11 10 8
1 7 6 0
1 14 15 1
>> a(14)=16
a =
1 2 3 13
1 11 10 16
1 7 6 0
1 14 15 1
三、进行数组运算的常用函数
本节整理了matlab进行数组运算的一些常用函数,包括基本数学函数、三角函数以及适用向量的常用函数,方便大家查阅。
3.1matlab常用的基本数学函数
函数 | 说明 |
---|---|
abs(x) | 绝对值或向量的长度 |
sqrt(x) | 开平方 |
round(x) | 四舍五入至最近的整数 |
fix(x) | 无论正负,向0的方向取最近的整数 |
floor(x) | 用舍去法区区最近的整数 |
ceil(x) | 用进一法去最近的整数 |
pow2(x) | 2的指数 |
exp(x) | 自然指数 |
log(x) | 以e为底,即自然对数 |
log2(x) | 以2为底的对数 |
log10(x) | 以10为底的对数 |
3.2matlab常用的三角函数
函数 | 说明 |
---|---|
sin(x) | 正弦函数 |
cos(x) | 余弦函数 |
tan(x) | 正切函数 |
asin(x) | 反正弦函数 |
acos(x) | 反余弦函数 |
atan(x) | 反正切函数 |
3.3适用于向量的常用函数
函数 | 说明 |
---|---|
min(x) | 向量x的元素最小值 |
max(x) | 向量x的元素最大值 |
mean(x) | 向量x的元素平均值 |
median(x) | 向量x的元素中位数 |
std(x) | 向量x的元素标准差 |
diff(x) | 向量x的相邻元素的差 |
sort(x) | 向对量x的元素进行排序 |
prod(x) | 向量x的元素总乘积 |
dot(x) | 向量x和y的内积 |
cross(x) | 向量x和y的外积 |
sum(x) | 向量x的元素总和 |
cumsum(x) | 向量x的累积元素总和 |
cumprod(x) | 向量x的累积元素总乘积 |
四、查询矩阵信息
本节是对查询矩阵信息的相关函数做了整理,具体包括矩阵的形状信息和常见的判断矩阵中数据结构函数。
4.1查询矩阵形状信息的函数
函数名称 | 函数功能 |
---|---|
length | 返回矩阵最长的一维长度 |
size | 返回矩阵各维的长度 |
numel | 返回矩阵的元素个数 |
ndims | 返回矩阵的维数 |
>> rand('state',0);%设置随机种子
a = rand(5);%生成5*5的随机矩阵
a =
0.9501 0.7621 0.6154 0.4057 0.0579
0.2311 0.4565 0.7919 0.9355 0.3529
0.6068 0.0185 0.9218 0.9169 0.8132
0.4860 0.8214 0.7382 0.4103 0.0099
0.8913 0.4447 0.1763 0.8936 0.1389
>> a(4,:) = [];%删除第4行
a =
0.9501 0.7621 0.6154 0.4057 0.0579
0.2311 0.4565 0.7919 0.9355 0.3529
0.6068 0.0185 0.9218 0.9169 0.8132
0.8913 0.4447 0.1763 0.8936 0.1389
>> size(a);%4行5列的矩阵
ans =
4 5
>> b = mean(a);%获取每列的平均值
b =
0.6699 0.4204 0.6264 0.7879 0.3407
>> c = min(a)
c =
0.2311 0.0185 0.1763 0.4057 0.0579
4.2判断矩阵中数据结构的函数
以下就不再举例,有需要就直接到表格中获取相关函数。
函数名称 | 函数功能 |
---|---|
isempty | 判断输入矩阵是否为空 |
isscalar | 判断输入矩阵是否是1x1的标量 |
issparse | 判断输入矩阵是否是稀疏矩阵 |
isvector | 判断输入矩阵是否是向量 |
五、多维数组
在实际应用的过程中,经常需要构造多于二维的数组,我们就多于二维的数组统称为多维数组。名称上将数组的第1维称为“行”,第2维称为“列”,并将第3维称为“页”。
5.1多维数组的创建
有以下4种方式可以创建多维数组:
- 直接通过“全下标”元素赋值的方式创建
- 由若干同样大小的二维数组组合成为多维数组
- 由函数ones、zeros、rand、randn等直接创建特殊的多维数组
- 借助cat、repmat、reshape等函数构建多维数组
例如创建一个3x3x3的数组,并用全下标的方式赋值:
>> a(3,3,3)=1;%创建3*3*3数组,未赋值元素默认设置为0
a(:,:,1) =
0 0 0
0 0 0
0 0 0
a(:,:,2) =
0 0 0
0 0 0
0 0 0
a(:,:,3) =
0 0 0
0 0 0
0 0 1
以下是利用特殊函数创建多维数组:
>> c(:,:,1)=magic(4);
c(:,:,2)=ones(4);
c(:,:,3)=zeros(4);
val(:,:,1) =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
val(:,:,2) =
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
val(:,:,3) =
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
5.2 访问
要访问多维数组中的元素,可以使用整数下标,就像在向量和矩阵中一样。例如,找到 A 中下标为 2,1,2 的元素,它位于 A 的第二页上的第二行第一列。
>> A(:,:,1)=[1 2 3; 4 5 6; 7 8 9];
A(:,:,2)=[10 11 12; 13 14 15; 16 17 18];
val(:,:,1) =
1 2 3
4 5 6
7 8 9
val(:,:,2) =
10 11 12
13 14 15
16 17 18
>> B = A(2:1:2)
B =
4
未完待续。。。