Matlab系列教程4-矩阵,包括基本的矩阵创建、编辑和运算操作。
矩阵是由个数排成的行列数表,记成
含有个维行向量,个维列向量。
矩阵创建
创建 - 直接输入
用[]
定义矩阵,同一行的元素用,
或空格分割,不同行的元素用;
或回车分割
矩阵的大小不需要预先定义,若[]
中不写元素,表示空矩阵
创建 - 从文件中读取
可以将较为常用的矩阵写入.m
文件,调用时直接运行该文件,即可在工作台看到相应矩阵。除此之外,可以使用load
命令调用.txt
等类型的文件。
创建 - 用函数生成特殊矩阵
可以用某些函数生成具有某些特点的矩阵,常用函数如下
函数 | 说明 |
---|---|
eye(n) eye(m,n) eye(size(A)) |
创建指定大小的单位矩阵 |
ones(n) ones(m,n) ones(size(A)) |
创建指定大小矩阵,其中元素均为1 |
zeros(n) zeros(m,n) zeros(size(A)) |
创建指定大小矩阵,其中元素均为0 |
rand(n) rand(m,n) rand(size(A)) |
创建指定大小矩阵,其中元素服从范围内的均匀分布 |
randn(n) randn(m,n) randn(size(A)) |
创建指定大小矩阵,其中元素服从标准正态分布 |
compan(P) |
创建系数向量为的多项式的伴随矩阵 |
diag(v) |
创建以向量中的元素为对角线的对角阵 |
hilb(n) |
创建一个的Hilbert矩阵 |
magic(n) |
创建一个阶幻方 |
sparse(A) |
将矩阵转化为稀疏矩阵形式,即由的非零元素和下标构成稀疏矩阵 |
矩阵编辑
矩阵拼接
1 | A = [1 2 3 4]; |
用,
或空格衔接,以实现矩阵的横向拼接,如上例中的矩阵与矩阵
用;
或换行衔接,以实现矩阵的纵向拼接,如上例中的矩阵与拼接矩阵
引用矩阵中的某些元素
对矩阵的每个维度均指定一个索引,即可引用相应的数据。
索引可以是标量(一个数)、向量(只能包含正整数)和:
(表示全部)。
1 | A = [1 2 3 4 |
矩阵变形
-
变换维度:通过函数
reshape(X,m,n)
实现:将中的数据按列取出,再根据指定的维度,从左至右按列填充1
2
3
4
5
6
7
8
9
10
11
12t = 1:12;
A = reshape(t, 2, 6)
% A =
% 1 3 5 7 9 11
% 2 4 6 8 10 12
B = reshape(A, 4, 3)
% B =
% 1 5 9
% 2 6 10
% 3 7 11
% 4 8 12也可以仅指定一个维度,让函数自适应另一个维度的大小
1
2C = reshape(B, 3, []); % 重构为3*4的矩阵
D = reshape(C, [], 2); % 重构为6*2的矩阵 -
旋转与翻转
函数 说明 rot90(X)
rot90(X,k)
将矩阵逆时针方向旋转 fliplr(X)
将矩阵左右翻转 flipud(X)
将矩阵上下翻转 flipdim(X,dim)
dim=1
时对行翻转,dim=2
时对列翻转
三角阵/对角阵的抽取
提取对角线/用对角线构造对角阵
1 | v = 1:3; |
提取上/下三角阵
1 | A = ones(3); |
几个函数虽然功能不同,但第二个参数中对角线的定位规则一致,正数代表主对角线上的对角线,负数代表下面的对角线,提取时取闭区间。
矩阵运算
加减运算
要求进行运算的矩阵形状一致(即各维度长度一致),计算时对应位置相加减即可,有交换律和结合律。
乘运算
若有三个矩阵,则对矩阵中的任意一个元素,有
即
其中矩阵的列数(第二维度)需要等于矩阵的行数(第一维度)。
矩阵乘运算不满足交换律。
点乘运算
两个形状一致的矩阵,对应位相乘,得到一个形状不变的矩阵。
除法运算 - 左除
线性方程组,若非奇异,即它的逆矩阵存在,则可解出X=inv(D)*B=D\B
条件:的阶数等于的行数。(非奇异表明是方阵)
除法运算 - 右除
线性方程组,若非奇异,即它的逆矩阵存在,则可解出X=B*inv(D)=B/D
条件:的列数等于的阶数。
- 除号偏向哪边,哪边要求非奇异
- 使用除法运算解线性方程组比使用
inv
求逆的方法更迅速,且拥有更小的残差
常用矩阵运算函数
函数 | 说明 |
---|---|
cond(A) |
返回2-范数逆运算的条件数,即最大奇异值与最小奇异值之比 |
condest(A) |
返回 1-范数条件数的下限 |
det(A) |
返回矩阵的行列式(一个值) |
eig(A) |
返回矩阵的特征值/特征向量 |
inv(A) |
返回矩阵的逆 |
norm(A,p) |
返回矩阵的范数,p 可以为1 2 Inf 'fro' ,不填默认为2 |
normest(A) |
返回矩阵的2-范数,相当于norm(A,2) |
rank(A) |
返回矩阵的秩 |
orth(A) |
矩阵的正交化运算,返回适用于矩阵范围的标准正交基,列数等于秩 |
rcond(A) |
返回1-范数的逆条件数 |
trace(A) |
返回矩阵对角线之和,即矩阵的迹 |
expm(A) |
矩阵指数运算,每个元素变为 |
logm(A) |
矩阵对数运算,每个元素变为 |
sqrtm(A) |
矩阵开方运算,返回使 |
cdf2rdf |
将复数对角矩阵转换成实数块对角矩阵 |
rsf2csf |
将实数块对角矩阵转换成复数对角矩阵 |
rref |
将矩阵转换成逐行递减的阶梯矩阵 |
funm |
一般的矩阵函数 |
关于矩阵的条件数与“病态”:
矩阵的条件数用于刻画矩阵的“病态”程度,定义为:
它是一个不小于1的实数,当时,说矩阵是“病态”的,反之则是“良态”的。
奇异值分解 SVD
SVD分解是指将一个的矩阵表示为三个矩阵乘积的形式:,其中为阶方阵,为阶方阵,为阶对角阵,其对角线元素为矩阵的奇异值且满足:
其中为矩阵的秩。
1 | s = svd(A); % 返回矩阵A的奇异值列向量s |