matlab-note-2
matlab-note-2
MATLAB矩阵处理
特殊矩阵
通用的特殊矩阵
zero矩阵:产生全0矩阵,即零矩阵
ones矩阵:产生全1矩阵,即幺矩阵
eye函数:产生对角线为1的矩阵。当矩阵是方阵时,得到一个单位矩阵。
rand函数:产生(0,1)区间均匀分布的随机矩阵。
randn函数:产生均值为0,方差为1的标准正态分布随机矩阵。
输入的参数为矩阵的维数。
1 | A = [1, 2, 3; 2, 3, 4]; |
- rand函数:产生(0,1)开区间均匀分布的随机数x。
- fix(a+(b-a+1)*x):产生[a,b]区间上均匀分布的随机整数。
- randn函数:产生均值为0、方差为1的标准正态分布随机数x。
- μ+σx:得到均值为μ、方差为σ2的随机数。
1 | A = fix(10 + (99 - 10 + 1) * rand(5)); |
用于专门学科的特殊矩阵
魔方矩阵(即幻方)
- n阶魔方阵由1,2,3,…,n2共n2个整数组成,且每行、每列以及主、副对角线上各n个元素之和都相等。
- n阶魔方阵每行每列元素的和为$(1+2+3+…+ n2)/n$=$(n+n3)/2$
- n>2时有很多不同的n阶魔方阵,MATLAB函数magic(n)产生一个特定的魔方阵。
1 | M = magic(8); |
范德蒙矩阵
范德蒙(Vandermonde)矩阵是法国数学家范德蒙提出的一种特殊矩阵。范得蒙矩阵的最后一列全为1,即向量v各元素的零次方,倒数第二列为指定的向量v,即向量v各元素的一次方,其他各列是其后列与倒数第二列的点乘积。
1 | A = vander(1:5) |
范德蒙矩阵常用在各种通信系统的纠错编码中,例如,常用的Reed-Solomon编码即以范德蒙矩阵为基础。
希尔伯特矩阵
希尔伯特矩阵的元素为$H(i,j)=1/(i+j-1)$。
1 | format rat |
format rat用于将输出格式设置为分数形式
希尔伯特矩阵是著名的病态矩阵,即任何一个元素发生较小的变动,整个矩阵的值和逆矩阵都会发生很大变化。病态程度和矩阵的阶数相关,随着阶数的增加病态越严重。
伴随矩阵
例如生成多项式$x3-sx2-5x+6$的伴随矩阵。
MATLAB生成伴随矩阵的函数是compan§,其中p是一个多项式的系数向量,高次幂系数排在前,低次幂排在后。
1 | p = [1, -2, -5, 6]; |
帕斯卡矩阵(杨辉三角)
根据二项式定理,$(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 | format rat |
矩阵变换
- 对角阵:只有对角线上有非零元素的矩阵。
- 数量矩阵:对角线上的元素相等的对角矩阵。
- 单位矩阵:对角线上的元素都为1的对角矩阵。
对角阵
- 提取矩阵对角线元素
diag(A):提取矩阵A主对角线元素,产生一个列向量。
diag(A,k):提取矩阵A第k条对角线的元素,产生一个列向量。- 构造对角矩阵
diag(V):以向量V为主对角线元素,产生对角矩阵。
diag(V,k):以向量V为第k条对角线元素,产生对角矩阵。
1 | 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]; |
三角阵
- 上三角阵:矩阵的对角线以下的元素全为零的矩阵。
- 下三角阵:对角线以上的元素全为零的矩阵。
上三角矩阵
- triu(A):提取矩阵A的主对角线及以上的元素。
- triu(A,k):提取矩阵A的第k条对角线及以上的元素
1 | triu(ones(4), -1) |
下三角矩阵
1 | tril(ones(4), -1) |
矩阵的转置
转置运算符是小数点后面接单引号(.‘)。
共轭转置,其运算符是单引号(’),它在转置的基础上还要取每个数的复共轭。
1 | A = [1, 3, 3 + 4i, 1 - 2i]; |
矩阵的旋转
rot90(A,k):将矩阵A逆时针方向旋转90度的k倍,当k=1时可以省略。
1 | A = [1, 3, 2; -3, 2, 1; 4, 1, 2]; |
矩阵的翻转
对矩阵实施左右翻转是将原矩阵的第一列和最后一列调换,第二列和倒数第二列调换,…,依此类推。
fliplr(A):对矩阵A实施左右翻转。
flipud(A):对矩阵A实施上下翻转。
1 | A = magic(5); |
矩阵的求逆
inv(A):求A的逆矩阵
1 | A = [1, 2, 3; 1, 4, 9; 1, 8, 27]; |
矩阵求值
方阵的行列式
把一个方阵看作一个行列式,并对其按行列式的规则求值,这个值就称为所对应的行列式的值。
det(A):求方阵A的行列式的值。
1 | format rat |
矩阵的秩
矩阵线性无关的行数或列数称为矩阵的秩。
rank(A):求矩阵A的秩。
1 | for n = 3:20 |
矩阵的迹
矩阵的迹等于矩阵对角线元素之和,也等于矩阵特征值之和。
trace(A):求矩阵A的迹。
1 | A = [1, 3, 2; -3, 2, 1; 4, 1, 2]; |
向量和矩阵的范数
矩阵或向量的范数用来度量矩阵或向量在某种意义下的长度。
向量的3种常用范数:
-
向量元素的绝对值之和。
norm(V,1) -
向量元素平方和的平方根。
norm(V)或norm(V,2) -
所有向量元素绝对值中的最大值。
norm(V,inf)
矩阵的3种常用范数:
-
矩阵列元素的绝对值之和的最大值。
norm(V,1) -
A’A矩阵的最大特征根的平方根。
norm(V)或norm(V,2) -
所有矩阵行元素绝对值之和中的最大值。
norm(V,inf)
1 | x = [2, 0, 1; -1, 1, 0; -3, 3, 0] |
矩阵的条件数
矩阵的条件数等于A的范数与A的逆矩阵的范数的乘积。
条件数越接近于1 ,矩阵性能越好,反之,矩阵性能越差。
矩阵的条件数与矩阵的范数一一对应,运用cond函数求解。在MATLAB中,计算矩阵A的3种条件数的函数是:
- cond(A,1):计算A的1—范数下的条件数。
- cond(A)或cond(A,2):计算A的2—范数数下的条件数。
- cond(A,inf):计算A的∞—范数下的条件数。
1 | for n = 2:10 |
矩阵的特征值与特征向量
设A是n阶方阵,如果存在常数λ和n维非零列向量x,使得等式Ax=λx成立,则称λ为A的特征值,x是对应特征值λ的特征向量。
在MATLAB中,计算矩阵的特征值和特征向量的函数是eig,常用的调用格式有两种:
-
E=eig(A):求矩阵A的全部特征值,构成向量E.
-
[X,D]=eig(A):求矩阵A的全部特征值,构成对角阵D,并产生矩阵X,X各列是相应的特征向量。
1 | A = [1, 1, 0; 1, 0, 5; 1, 10, 2] |
稀疏矩阵
矩阵的存储方式
完全存储方式
完全存储方式:将矩阵的全部元素按列存储。
稀疏存储方式
稀疏存储方式:稀疏存储方式只存储矩阵的非零元素的值及其位置,即行号和列号。
注意,采用稀疏存储方式时,矩阵元素的存储顺序并没有改变,也是按列的顺序进行存储。
当矩阵的规模很大时,采用稀疏存储方式可以大大节约存储空间。
完全存储方式与稀疏存储方式之间的转化
A=sparse(S):将矩阵S转化为稀疏存储方式的矩阵A。
S=full(A):将矩阵A转化为完全存储方式的矩阵S。
1 | A = sparse(eye(5)) |
直接建立稀疏存储矩阵
sparse(m,n):生成一个$m*n$的所有元素都是0的稀疏矩阵。
sparse(u,v,S):其中u,v,S是三个等长的向量。S是要建立的系数矩阵的非0元素,u(i),v(i)分别是S(i)的行和列下标。
注意正常矩阵坐标先列后行,而本函数输入刚好相反
1 | A = sparse([1, 2, 2], [2, 1, 4], [4, 5, -7]) |
稀疏存储方式的产生
直接建立稀疏存储矩阵
使用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 | A = [2, 2, 1; 2, 1, -1; 2, 4, 3] |
带状稀疏矩阵
带状稀疏矩阵是指所有非零元素集中在对角线上的矩阵。
- [B,d]=spdiags(A):从带状稀疏矩阵A中提取全部非零对角线元素赋给矩阵B及其这些非零对角线的位置向量d。
- A=spdiags(B,d,m,n):产生带状稀疏矩阵的稀疏存储矩阵A,其中m、n为原带状稀疏矩阵的行数和列数,矩阵B的第i列即为原带状稀疏矩阵的第i条非零对角线,向量d为原带状稀疏矩阵所有非零对角线的位置。
1 | 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] |
单位矩阵的稀疏存储
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.