matlab-note-2

matlab-note-2

Charles Lv7

matlab-note-2

image-20230208172927537

MATLAB矩阵处理

特殊矩阵

通用的特殊矩阵

zero矩阵:产生全0矩阵,即零矩阵
ones矩阵:产生全1矩阵,即幺矩阵
eye函数:产生对角线为1的矩阵。当矩阵是方阵时,得到一个单位矩阵。
rand函数:产生(0,1)区间均匀分布的随机矩阵。
randn函数:产生均值为0,方差为1的标准正态分布随机矩阵。

输入的参数为矩阵的维数。

1
2
3
4
A = [1, 2, 3; 2, 3, 4];
zeros(2, 2)
zeros(2)
zeros(size(A))
  • rand函数:产生(0,1)开区间均匀分布的随机数x。
  • fix(a+(b-a+1)*x):产生[a,b]区间上均匀分布的随机整数。
  • randn函数:产生均值为0、方差为1的标准正态分布随机数x。
  • μ+σx:得到均值为μ、方差为σ2的随机数。
1
2
3
4
A = fix(10 + (99 - 10 + 1) * rand(5));
B = 0.6 + sqrt(0.1) * randn(5);% μ+σx
C = eye(5);
(A + B) * C == C * A + B * C

用于专门学科的特殊矩阵

魔方矩阵(即幻方)
  1. n阶魔方阵由1,2,3,…,n2共n2个整数组成,且每行、每列以及主、副对角线上各n个元素之和都相等。
  2. n阶魔方阵每行每列元素的和为$(1+2+3+…+ n2)/n$=$(n+n3)/2$
  3. n>2时有很多不同的n阶魔方阵,MATLAB函数magic(n)产生一个特定的魔方阵。
1
2
3
M = magic(8);
sum(M(1, :))
sum(M(:, 1))
范德蒙矩阵

范德蒙(Vandermonde)矩阵是法国数学家范德蒙提出的一种特殊矩阵。范得蒙矩阵的最后一列全为1,即向量v各元素的零次方,倒数第二列为指定的向量v,即向量v各元素的一次方,其他各列是其后列与倒数第二列的点乘积。

1
A = vander(1:5)

范德蒙矩阵常用在各种通信系统的纠错编码中,例如,常用的Reed-Solomon编码即以范德蒙矩阵为基础。

希尔伯特矩阵

希尔伯特矩阵的元素为$H(i,j)=1/(i+j-1)$。

1
2
format rat
H = hilb(4)

format rat用于将输出格式设置为分数形式

希尔伯特矩阵是著名的病态矩阵,即任何一个元素发生较小的变动,整个矩阵的值和逆矩阵都会发生很大变化。病态程度和矩阵的阶数相关,随着阶数的增加病态越严重。

伴随矩阵

image-20230208183231351

例如生成多项式$x3-sx2-5x+6$的伴随矩阵。

MATLAB生成伴随矩阵的函数是compan§,其中p是一个多项式的系数向量,高次幂系数排在前,低次幂排在后。

1
2
p = [1, -2, -5, 6];
A = compan(p)
帕斯卡矩阵(杨辉三角)

根据二项式定理,$(x+y)^n$展开后的系数随着n的增大组成一个三角形表,这个三角形称为杨辉三角形,把二项式系数依次填写在矩阵的左侧对角线上,然后提取左侧的n行n列元素即为n阶帕斯卡(Pascal)矩阵。

帕斯卡矩阵的第一行元素和第一列元素都为1,其余位置的元素是该元素的左边元素与上面元素相加,即$P(i,j)=P(i,j-1)+P(i-1,j)$,且P(i,1)=1,P(1,j)=1。

1
2
format rat
P = pascal(5)

矩阵变换

  • 对角阵:只有对角线上有非零元素的矩阵。
  • 数量矩阵:对角线上的元素相等的对角矩阵。
  • 单位矩阵:对角线上的元素都为1的对角矩阵。

对角阵

  1. 提取矩阵对角线元素
    diag(A):提取矩阵A主对角线元素,产生一个列向量。
    diag(A,k):提取矩阵A第k条对角线的元素,产生一个列向量。
  2. 构造对角矩阵
    diag(V):以向量V为主对角线元素,产生对角矩阵。
    diag(V,k):以向量V为第k条对角线元素,产生对角矩阵。
1
2
3
A = [7, 0, 1, 0, 5; 3, 5, 7, 4, 1; 4, 0, 3, 0, 2; 1, 1, 9, 2, 3; 1, 8, 5, 2, 9];
D = diag(1:5);
D * A

三角阵

  • 上三角阵:矩阵的对角线以下的元素全为零的矩阵。
  • 下三角阵:对角线以上的元素全为零的矩阵。
上三角矩阵
  • triu(A):提取矩阵A的主对角线及以上的元素。
  • triu(A,k):提取矩阵A的第k条对角线及以上的元素
1
triu(ones(4), -1)
下三角矩阵
1
tril(ones(4), -1)

矩阵的转置

转置运算符是小数点后面接单引号(.‘)。
共轭转置,其运算符是单引号(’),它在转置的基础上还要取每个数的复共轭。

1
2
3
A = [1, 3, 3 + 4i, 1 - 2i];
A.'
A'

矩阵的旋转

rot90(A,k):将矩阵A逆时针方向旋转90度的k倍,当k=1时可以省略。

1
2
3
A = [1, 3, 2; -3, 2, 1; 4, 1, 2];
rot90(A)
rot90(A, 2)

矩阵的翻转

对矩阵实施左右翻转是将原矩阵的第一列和最后一列调换,第二列和倒数第二列调换,…,依此类推。

fliplr(A):对矩阵A实施左右翻转。
flipud(A):对矩阵A实施上下翻转。

1
2
3
4
A = magic(5);
B = flipud(A);
D = diag(B);
sum(D)

矩阵的求逆

inv(A):求A的逆矩阵

1
2
3
4
A = [1, 2, 3; 1, 4, 9; 1, 8, 27];
b = [5; -2; 6];
x = inv(A) * b
x = A \ b

矩阵求值

方阵的行列式

把一个方阵看作一个行列式,并对其按行列式的规则求值,这个值就称为所对应的行列式的值。

det(A):求方阵A的行列式的值。

1
2
3
4
format rat
A = [1, 3, 2; -3, 2, 1; 4, 1, 2];
det(inv(A))
1 / det(A)

矩阵的秩

矩阵线性无关的行数或列数称为矩阵的秩。

rank(A):求矩阵A的秩。

1
2
3
4
5
6
7
for n = 3:20
r(n) = rank(magic(n));
end

bar(r)
grid on
axis([2, 21, 0, 20])

矩阵的迹

矩阵的迹等于矩阵对角线元素之和,也等于矩阵特征值之和。

trace(A):求矩阵A的迹。

1
2
3
A = [1, 3, 2; -3, 2, 1; 4, 1, 2];
b = trace(A)
t = sum(diag(A))

向量和矩阵的范数

矩阵或向量的范数用来度量矩阵或向量在某种意义下的长度。

向量的3种常用范数:

  1. 向量元素的绝对值之和。
    norm(V,1)

  2. 向量元素平方和的平方根。
    norm(V)或norm(V,2)

  3. 所有向量元素绝对值中的最大值。
    norm(V,inf)

矩阵的3种常用范数:

  1. 矩阵列元素的绝对值之和的最大值。
    norm(V,1)

  2. A’A矩阵的最大特征根的平方根。
    norm(V)或norm(V,2)

  3. 所有矩阵行元素绝对值之和中的最大值。
    norm(V,inf)

1
2
3
x = [2, 0, 1; -1, 1, 0; -3, 3, 0]
n = norm(x)
m = norm(x, 1)

矩阵的条件数

矩阵的条件数等于A的范数与A的逆矩阵的范数的乘积。
条件数越接近于1 ,矩阵性能越好,反之,矩阵性能越差。
矩阵的条件数与矩阵的范数一一对应,运用cond函数求解。

在MATLAB中,计算矩阵A的3种条件数的函数是:

  1. cond(A,1):计算A的1—范数下的条件数。
  2. cond(A)或cond(A,2):计算A的2—范数数下的条件数。
  3. cond(A,inf):计算A的∞—范数下的条件数。
1
2
3
4
5
6
for n = 2:10
c(n) = cond(hilb(n))
end

format long
c'

矩阵的特征值与特征向量

设A是n阶方阵,如果存在常数λ和n维非零列向量x,使得等式Ax=λx成立,则称λ为A的特征值,x是对应特征值λ的特征向量。

在MATLAB中,计算矩阵的特征值和特征向量的函数是eig,常用的调用格式有两种:

  1. E=eig(A):求矩阵A的全部特征值,构成向量E.

  2. [X,D]=eig(A):求矩阵A的全部特征值,构成对角阵D,并产生矩阵X,X各列是相应的特征向量。

1
2
3
4
A = [1, 1, 0; 1, 0, 5; 1, 10, 2]
[X, D] = eig(A)
A * X(:, 1)
D(1) * X(:, 1)

稀疏矩阵

矩阵的存储方式

完全存储方式

完全存储方式:将矩阵的全部元素按列存储。

稀疏存储方式

稀疏存储方式:稀疏存储方式只存储矩阵的非零元素的值及其位置,即行号和列号。

注意,采用稀疏存储方式时,矩阵元素的存储顺序并没有改变,也是按列的顺序进行存储。

当矩阵的规模很大时,采用稀疏存储方式可以大大节约存储空间。

完全存储方式与稀疏存储方式之间的转化

A=sparse(S):将矩阵S转化为稀疏存储方式的矩阵A。

S=full(A):将矩阵A转化为完全存储方式的矩阵S。

1
2
A = sparse(eye(5))
B = full(A)
直接建立稀疏存储矩阵

sparse(m,n):生成一个$m*n$的所有元素都是0的稀疏矩阵。

sparse(u,v,S):其中u,v,S是三个等长的向量。S是要建立的系数矩阵的非0元素,u(i),v(i)分别是S(i)的行和列下标。

注意正常矩阵坐标先列后行,而本函数输入刚好相反

1
2
A = sparse([1, 2, 2], [2, 1, 4], [4, 5, -7])
B = full(A)

稀疏存储方式的产生

直接建立稀疏存储矩阵

使用spconvert函数直接建立稀疏存储矩阵,其调用方式为:
B=spconvert(A)
A为一个mx3或mx4的矩阵,其每行表示一个非零元素,m是非零元素的个数。

  • A(i,1)表示第i个非零元素所在的行。
  • A(i,2)表示第i个非零元素所在的列。
  • A(i,3)表示第i个非零元素值的实部。
  • A(i,4)表示第i个非零元素值的虚部。

若矩阵的全部元素都是实数,则无需第四列。

1
2
A = [2, 2, 1; 2, 1, -1; 2, 4, 3]
B = spconvert(A)
带状稀疏矩阵

带状稀疏矩阵是指所有非零元素集中在对角线上的矩阵。

  • [B,d]=spdiags(A):从带状稀疏矩阵A中提取全部非零对角线元素赋给矩阵B及其这些非零对角线的位置向量d。
  • A=spdiags(B,d,m,n):产生带状稀疏矩阵的稀疏存储矩阵A,其中m、n为原带状稀疏矩阵的行数和列数,矩阵B的第i列即为原带状稀疏矩阵的第i条非零对角线,向量d为原带状稀疏矩阵所有非零对角线的位置。
1
2
3
A = [11, 0, 0, 12, 0, 0; 0, 21, 0, 0, 22, 0; 0, 0, 31, 0, 0, 32; 41, 0, 0, 42, 0, 0; 0, 51, 0, 0, 52, 0]
[B, d] = spdiags(A)
A = spdiags(B, d, 5, 6)

单位矩阵的稀疏存储

speye(m,n):返回一个$m*n$的稀疏存储单位矩阵。

1
speye(3)
  • Title: matlab-note-2
  • Author: Charles
  • Created at : 2023-02-03 16:44:34
  • Updated at : 2023-08-22 09:24:33
  • Link: https://charles2530.github.io/2023/02/03/matlab-note-2/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments