一个矩阵的维数为r x c
,其中r
为行向量的个数,c
是列向量的个数。
1.行向量与列向量
(1)创建行向量
>> v=[1 2 3 4]
v =
1 2 3 4
>> w=[1,2,3,4]
w =
1 2 3 4
(2)冒号运算符和Linspace函数
若向量中的值有规律,可用冒号运算符循环访问
>> v=1:9
v =
1 2 3 4 5 6 7 8 9
>> v=1:2:9
v =
1 3 5 7 9
- 其中
v=1:2:9
中的2
为步长 - 在此情况下,不需要用 [ ] 来定义向量
linspace
函数创建一个线性间隔的空间,linspace(x,y,n)
创建一个从x
到y
有n
个值的向量
>> linspace(3,100,4)
ans =
3.0000 35.3333 67.6667 100.0000
logsapce
函数创建一个对数间隔的向量,logspace(x,y,n)
创建一个从x^10
到y^10
有n
个值的向量,
若n被忽略,则默认为100个点。
(3)引用与修改元素
MATLAB中索引从1开始
1 2 3 4 5 6 7 8 9 10
>> v
v =
1 3 5 7 9
>> v(3)
ans =
5
>> c=v(2:5)
c =
3 5 7 9
任何向量都可以通过索引送入另一个向量,索引不需要按顺序
>> v([1 5 3])
ans =
1 9 5
- 向量
[1 5 3]
被称为索引向量,指定的是原始向量 - 通过指定向量中的索引或下标,可以改变向量元素中存储的值:
v[4]=10
- 通过引用一个现状还不存在的向量,可以拓展一个向量
- 如果向量的结尾和指定的元素之间还有空,则用
0
填充
(4)创建列向量
可以通过将值放在方括号中,用分号( ;)隔开
>> b=[1;2;3;4;5]
b =
1
2
3
4
5
没有直接的方法使用冒号运算符得到列向量,但可以通过转置
>> r=1:3
r =
1 2 3
>> c=r.'
c =
1
2
3
c'
——共轭转置c.'
——转置
2.矩阵变量
(1)创建矩阵变量
行向量的值用空格或逗号隔开,不同的行用分号隔开
>> mat=[1,2,3;4,5,6]
mat =
1 2 3
4 5 6
- 每行值的个数必须相等
- 行里能使用冒号运算符
- 不同行间也可以使用回车键替代分号
(2)创建特殊矩阵的函数
①zeros函数
产生全0矩阵,即零矩阵
>> zeros(3)
ans =
0 0 0
0 0 0
0 0 0
②ones函数
产生全1的矩阵,即幺矩阵
>> ones(3)
ans =
1 1 1
1 1 1
1 1 1
③eye函数
产生对角线为1的矩阵。当矩阵为方阵时,得到一个单位矩阵
>> eye(3)
ans =
1 0 0
0 1 0
0 0 1
④rand函数
产生(0,1)区间均匀分布的随机矩阵
>> rand(3)
ans =
0.8147 0.9134 0.2785
0.9058 0.6324 0.5469
0.1270 0.0975 0.9575
也可以传递两个参数明确指定行列数
>> rand(2,3)
ans =
0.9649 0.9706 0.4854
0.1576 0.9572 0.8003
⑤randi函数
使用randi
能够生成随机整数矩阵,并且可以指定范围与生成矩阵的维数
>> randi([20,30],2,3)
ans =
21 30 30
24 28 27
>> randi([10,20],2)
ans =
10 20
19 17
⑥randn函数
产生均值为0,方差为1的标准正态分布随机矩阵
>> randn(3)
ans =
-0.2414 -0.8649 0.6277
0.3192 -0.0301 1.0933
0.3129 -0.1649 1.1093
⑦magic函数
幻方矩阵:产生行、列、对角线和相等的方阵
>> magic(3)
ans =
8 1 6
3 5 7
4 9 2
⑧diag函数
取得矩阵的对角线元素,或生成以该向量为对角的矩阵
>> magic(4)
ans =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
>> diag(ans)
ans =
16
11
6
1
>> diag(ans)
ans =
16 0 0 0
0 11 0 0
0 0 6 0
0 0 0 1
通过diag(a,n)
中的n
也可以控制取得对角线平行线上的元素
>> diag(magic(4),1)
ans =
2
10
12
类似的有:
triu(A)
函数,生成上三角矩阵(为A中对应元素),其余元素为0
tril(A)
函数,生成下三角矩阵,其余元素为0
(3)引用与修改矩阵元素
①下标索引
>> mat=[2:4;3:5]
mat =
2 3 4
3 4 5
>> mat(2,3)
ans =
5
>> mat(1:2,2:3)
ans =
3 4
4 5
注意创建矩阵时使用方括号 [ ]
引用矩阵时使用圆括号()
利用冒号 :
,可以引用矩阵所有的行和列
mat =
2 3 4
3 4 5
>> mat(1,:)
ans =
2 3 4
②线性索引
MATLAB在内存中存储矩阵是以列为主的顺序分配的(逐列式的),故线性索引提取元素时是按列进行的。
a =
100 77
28 14
>> a(1)
ans =
100
>> a(2)
ans =
28
>> a(3)
ans =
77
>> a(4)
ans =
14
③修改
一个矩阵的任何子集都能修改,只要将要赋给的子集与被修改的子集具有相同数量的行和列即可。
>> a(3)=11
a =
100 11
28 14
也可以改变一个矩阵的整行或整列
>> a(2,:)=[2 3]
a =
100 11
2 3
(4)维数
①length函数
length函数返回向量中元素的个数
b =
1 2 3 4
>> length (b)
ans =
4
对于一个矩阵,length函数返回行、列向量中较大的那个
c =
1 2 3
4 5 6
>> length(c)
ans =
3
②size函数
size函数返回行、列向量的个数
>> size(c)
ans =
2 3
也可以用一个向量来接受这两个返回量
>> [m,n]=size(c)
m =
2
n =
3
③numel函数
返回数组(向量或矩阵)所有元素的个数
c =
1 2 3
4 5 6
>> numel(c)
ans =
6
MATLAB还有一个内置表达end,用来提取向量中的最后一个元素
>> c(1,end)
ans =
3
>> c(end)
ans =
6
④reshape函数
reshape函数可以改变一个矩阵的维数
>> magic(4)
ans =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
>> reshape(ans,2,8)
ans =
16 9 2 7 3 6 13 12
5 4 11 14 10 15 8 1
下面介绍几个特殊的改变矩阵维数的函数:
fliplr
函数从左到右“翻转”矩阵;
flipud
函数上下”翻转“矩阵;
rot90
函数逆时针90°旋转矩阵
repmat
用来创建一个矩阵:repmat(mat,m,n)
a =
1 2
3 4
>> fliplr(a)
ans =
2 1
4 3
>> fliplr(ans)
ans =
1 2
3 4
>> rot90(ans)
ans =
2 4
1 3
>> repmat(ans,3,2)
ans =
2 4 2 4
1 3 1 3
2 4 2 4
1 3 1 3
2 4 2 4
1 3 1 3
(5)空向量
>> evec=[]
evec =
[]
>> length (evec)
ans =
0
可以通过连接给空向量添加值
>> evec=[evec 4]
evec =
4
>> evec=[evec 11]
evec =
4 11
空向量可用于删除向量中的元素
b =
1 2 3 4
>> b(2)=[]
b =
1 3 4
3.矩阵的基本运算
(1)矩阵的加减法
矩阵与标量的加减等于矩阵中所有元素与此标量的加减.
c =
1 2 3
4 5 6
>> c+2
ans =
3 4 5
6 7 8
(2)矩阵的乘法
①正常乘(*)
C = A*B 是 A 和 B 的矩阵乘积。如果 A 是 m×p 矩阵,B 是 p×n 矩阵,则 C 是通过以下公式定义的 m×n 矩阵:
②数乘(*)
用这个常数去乘矩阵的每一个元素
c =
1 2 3
4 5 6
>> 3*c
ans =
3 6 9
12 15 18
③点乘(.*)
要求两个矩阵有相同的维数,对应元素相乘
d =
3 6 9
12 15 18
>> c
c =
1 2 3
4 5 6
>> x=d.*c
x =
3 12 27
48 75 108
④标量积(dot)
返回 A 和 B 的标量点积(内积)
语法:
C = dot(A,B)
C = dot(A,B,dim)
dim
:按指定维数dim求两矩阵的标量积
沿其运算的维度,指定为正整数标量。如果未指定值,则默认值是大小不等于 1 的第一个数组维度。
考虑两个二维输入数组:A 和 B:
dot(A,B,1)
将 A 和 B 的列视为向量,并返回对应列的点积。
dot(A,B,2)
将 A 和 B 的行视为向量,并返回对应行的点积。
如果 dim
大于 ndims(A)
,则 dot
返回 conj(A).*B
。
⑤向量积(cross)
返回 A 和 B 的叉积
cross(A,B)
cross(A,B,dim)
⑥混合积
dot(A,cross(B,C))
⑦卷积(conv)
conv(A,B)
⑧解卷积
[q,r]=deconv(B,A)
⑨张量积(kron)
kron(A,B)
(3)矩阵的除法
①左除( \ )
当A、B是线性方程组AX=B中的系数矩阵和常数矩阵时,A \ B是方程组AX=B的解
②右除
当A、B是线性方程组XA=B中的系数矩阵和常数矩阵时,B \ A是方程组XA=B*的解
③元素左除
A .\ B 是指B的个元素除以A的对应元素
④元素右除
A ./ B 是指A的个元素除以B的对应元素
4、逻辑向量
(1) 逻辑表达式
逻辑向量使用产生真/假的关系表达式
a =
5 8
4 8
>> isg=a>6
isg =
2×2 logical 数组
0 1
0 1
结果是一个0、1组成的向量,可以在该isg向量上进行数值运算,但其类型是逻辑型。
这个逻辑向量可以用来索引原始向量:
>> a(isg)
ans =
8
8
(2)逻辑内置函数
①true、false函数
可以创建全逻辑1或0的向量或矩阵
>> false(2)
ans =
2×2 logical 数组
0 0
0 0
>> true (1,5)
ans =
1×5 logical 数组
1 1 1 1 1
②any、all函数
任意元素为逻辑真(非零),any函数返回逻辑真
所有元素为非零时,all函数返回逻辑真
③find函数
find函数返回满足规定条件的索引下标
>> find(b>5)
ans =
4 5 6
>> find(a>4)
ans =
1
3
4
(对矩阵使用线性索引)
④isequal函数
两向量相等则返回1,否则返回0