抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

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
2
3
4
5
6
7
8
9
A = [1 2 3 4];
B = zeros(2);
C = ones(2);
D = [A; B C]
% D =
%
% 1 2 3 4
% 0 0 1 1
% 0 0 1 1

,或空格衔接,以实现矩阵的横向拼接,如上例中的矩阵与矩阵

;或换行衔接,以实现矩阵的纵向拼接,如上例中的矩阵与拼接矩阵


引用矩阵中的某些元素

对矩阵的每个维度均指定一个索引,即可引用相应的数据。

索引可以是标量(一个数)、向量(只能包含正整数)和:(表示全部)。

1
2
3
4
5
6
7
8
9
10
A = [1  2  3  4
5 6 7 8
9 10 11 12];

A(2,2) % 第2行第2列,即元素6
A(3,[2,4]) % 第3行第2和第4列,即[10 12]
A(1:3,3) % 第3列第1行至第4行,即[3;7;11]
A(3,:) % 第3行所有元素,即[9 10 11 12]
A(:,4) % 第4列所有元素,即[4;8;12]


矩阵变形

  • 变换维度:通过函数reshape(X,m,n)实现:将中的数据按列取出,再根据指定的维度,从左至右按列填充

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    t = 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
    2
    C = 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
v = 1:3;
A = diag(v) % 生成以向量v为对角线的对角阵
% 1 0 0
% A = 0 2 0
% 0 0 3

v = diag(A) % 提取矩阵A的对角线,生成列向量
% 1
% v = 2
% 3

A = diag(v,2) % 生成以向量v为主对角线上第2条对角线的对角阵
% 0 0 1 0 0
% 0 0 0 2 0
% A = 0 0 0 0 3
% 0 0 0 0 0
% 0 0 0 0 0

v = diag(A,2) % 提取主对角线上第2条对角线,生成列向
% 1
% v = 2
% 3

提取上/下三角阵

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
A = ones(3);
tril(A) % 提取下三角阵
% 1 0 0
% 1 1 0
% 1 1 1

tril(A,1) % 从主对角线上第一条对角线开始提取下三角阵
% 1 1 0
% 1 1 1
% 1 1 1

triu(A) % 提取上三角阵
% 1 1 1
% 0 1 1
% 0 0 1

triu(A,-1) % 从主对角线下第一条对角线开始提取上三角阵
% 1 1 1
% 1 1 1
% 0 1 1

几个函数虽然功能不同,但第二个参数中对角线的定位规则一致,正数代表主对角线上的对角线,负数代表下面的对角线,提取时取闭区间


矩阵运算

加减运算

要求进行运算的矩阵形状一致(即各维度长度一致),计算时对应位置相加减即可,有交换律和结合律。

乘运算

若有三个矩阵,则对矩阵中的任意一个元素,有

其中矩阵的列数(第二维度)需要等于矩阵的行数(第一维度)。

矩阵乘运算不满足交换律


点乘运算

两个形状一致的矩阵,对应位相乘,得到一个形状不变的矩阵。


除法运算 - 左除

线性方程组,若非奇异,即它的逆矩阵存在,则可解出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
2
s = svd(A);  % 返回矩阵A的奇异值列向量s
[U,S,V] = svd(A); % 返回矩阵A的奇异值分解因子U、S和V

评论