目录
二、MATLAB矩阵处理
2.1 特殊矩阵
2.1.1通用性的特殊矩阵
- zeros函数:产生全0矩阵,即零矩阵。
- ones函数:产生全1矩阵,即幺矩阵。
- eye函数:产生对角线为1的矩阵。当矩阵是方阵时,得到一个单位矩阵。
- rand函数:产生(1,0)区间均匀分布的随机矩阵。
- randn函数:产生均值为0,方差为1的标准正态分布随机矩阵。
zeros函数的调用格式:
- zeros(m):产生m×m零矩阵。
- zeros(m,n):产生m×n零矩阵。
- zeros(size(A)):产生与矩阵A同样大小的零矩阵。
例1 首先产生5阶两位随机整数矩阵A,再产生均值为0.6,方差为0.1的5阶正态分布随机矩阵B,最后验证(A+B)I= IA+BI(I为单位矩阵)
- rand函数:产生(0,1)开区间均匀分布的随机数x。
- fix(a+(b-a+1)* x):产生[a,b]区间上均匀分布的随机整数。
- randn函数:产生均值为0,方差为1的标准正态分布随机数x。
: 得到均值为
、方差为
的随机数。
若要产生均值为,方差为
的正态分布的n阶矩阵:
randn(n)
2.1.2用于专门学科的特殊矩阵
(1)魔方矩阵(Magic Square)
- n阶魔方阵有1,2,3……,
共
个整数组成,且每行、每列以及主、副对角线上各n个元素之和都相等。
- n阶魔方阵每行每列元素的和为(1+2+3……+
)/n=(n+
)/ 2
- n>2时有很多不同的n阶魔方阵,MATLAB函数magic(n)产生一个特定的魔方阵。
例2 产生8阶魔方阵,求其每行每列元素的和。
(2)范德蒙矩阵
对于向量V=[,
,……,
] , 范德蒙矩阵的一般形式为:
范德蒙矩阵的最后一列全为1,即向量V各元素的零次方,倒数第二例为指定的向量V,即向量各元素的一次方,其他各列是其后列与倒数第二列的点乘积。在MATLAB中,函数vander(V)为基础的范德蒙矩阵。
范德蒙矩阵常用在各种通信系统的纠错编码中,例如,常用的Reed—Solomon编码即以范德蒙矩阵为基础。
(3)希尔伯特矩阵
n阶希尔伯特矩阵的一般形式为:
希尔伯特矩阵的元素为H(i,j) = 1/(i+j-1)。
在MATLAB中,生成n阶希尔伯特矩阵的函数为hilb(n)。
希尔伯特矩阵是著名的病态矩阵,即任何一个元素发生较小的变动,整个矩阵的值和逆矩阵都会发生很大变化。病态程度和矩阵的阶数有关,随着阶数的增加病态越严重。
(4)伴随矩阵
设多项式p(x)为……
,则多项式伴随矩阵是:
p(x)称为A的特征多项式,方阵p(x)=0的根称为A的特征值。MATLAB生成伴随矩阵的函数是compan(p),其中p是一个多项式的系数向量,高次幂系数排在前,低次幂排在后。
例如,多项式 的伴随矩阵。
可以求出伴随矩阵的特征值,该特征值等于多项式方程的根。
(5)帕斯卡矩阵
- 根据二项式定理,(x+y)^n展开后的系数随着n的增大组成一个三角形表,这个三角形称为杨辉三角形。
- 把二项式系数依次填写在矩阵的左侧对角线上,然后提前左侧的n行n列元素即为n阶帕斯卡矩阵。
- 帕斯卡矩阵的第一行元素和第一列元素都为1,其余位置的元素是该元素的左边元素与上面元素相加,即P(i,j)=P(i,j-1)+P(i-1,j),且P(i,1)=1,P(1,i)=1。
- 函数pascal(n)生成一个n阶帕斯卡矩阵。
例三 生成5阶帕斯卡矩阵,验证他的所有元素都为整数。
2.2矩阵变换
2.2.1对角阵
- 对角阵:只有对角线上有非零元素的矩阵
- 数量矩阵:对角线上的元素相等的对角矩阵
- 单位矩阵:对角线上的元素都为1的对角矩阵
(1)提取矩阵的对角线元素
- diag(A):提取矩阵A主对角线元素,产生一个列向量。
- diag(A,k):提取矩阵A第k条对角线的元素,产生一个列向量。
(2)构造对角阵
- diag(V):以向量V为主对角线元素,产生对角矩阵。
- diag(V,k):以向量V为第k条对角线元素,产生对角矩阵。
例1 先建立5×5矩阵A,然后将A的第一行元素乘以1,第二行元素乘以2,……,第五行乘以5。
要将A的各列元素分别乘以对角线的对角线元素,如何实现?
2.2.2三角阵
- 上三角阵:矩阵的对角线以下的元素全为零的矩阵。
- 下三角阵:对角线以上的元素全为零的矩阵。
(1)上三角矩阵
- triu(A):提取矩阵A是主对角线即以上的元素。
- triu(A,k):提取矩阵A的第k条对角线及以上的元素
(2)下三角矩阵
在MATLAB中,提取矩阵A的下三角矩阵的函数tril,其用法与triu函数完全相同。
2.2.3矩阵的转置
- 转置运算符是小数点后面接单引号(.')。
- 共轭转置,其运算符是单引号('),它在转置的基础上还要取每个数的副共轭。
- 矩阵的转置:把源矩阵的第一行变成目标矩阵的第一列,第二行变成第二列,……,以此类推。
- 如果矩阵的元素是实数,那么转置和共轭转置的结果是一样的。
2.2.4矩阵的旋转
rot90(A,k):将矩阵A逆时针方向旋转90°的k倍,当k为1时可以省略。
2.2.5矩阵的翻转
对矩阵实施左右翻转是将原矩阵的第一列和最后一列调换,第二列和倒数第二列调换,……,依次类推。
- fliplr(A):对矩阵A实施左右翻转。
- flipud(A):对矩阵A实施上下翻转。
例2 验证魔方阵的主对角线、副对角线元素之和相等。
- 对矩阵A实施上下翻转得到矩阵B,这样矩阵A的副对角线就移到了B的对角线。
- 5阶魔方阵的主对角线、副对角线元素之和相等,都为65。
2.2.6矩阵求逆
- 对于一个方阵A,如果存在一个与其同阶的方阵B,使得AB=BA=I(I为单位矩阵),则称B为A的逆矩阵,当然,A也是B的逆矩阵。
- inv(A):求方阵A的逆矩阵。
2.3矩阵求值
2.3.1矩阵的行列式值
- 把一个方阵看作一个行列式,并对其按行列式的规则求值,这个值就称为所对应的行列式的值。
- det(A):求方阵A所对应的行列式的值。
例1 验证det()= 1 / det(A)。
2.3.2矩阵的秩
- 矩阵线性无关的行数或列数称为矩阵的秩。
- rank(A):求矩阵的A的秩。
例2 求3~20 阶魔方阵的秩。
-
奇数阶魔方矩阵秩为n,即奇数阶魔方阵是满秩矩阵。
-
一重偶数阶魔方阵秩为n/2 + 2(n是2的偶数,但非4的倍数)。
-
双重偶数阶魔方阵秩均为3(阶数是4的倍数)。
2.3.3矩阵的迹
- 矩阵的迹等于矩阵的对角线元素之和,也等于矩阵的特征值之和。
- trace(A):求矩阵A的迹。
2.3.4矩阵的范数
矩阵或向量的范数用来度量矩阵或向量在某种意义下的长度。
(1) 向量的3种常用范数
- 向量1——范数: 向量元素的绝对值之和。
-
向量2——范数:向量元素绝对值的平方和的平方根。
-
向量∞——范数:所有向量元素绝对值中的最大值。
在MATLAB中,求向量范数的函数为:
- norm(V)或norm(V,2):计算向量V的2——范数。
- norm(V,1):计算向量V的1——范数。
- norm(V,inf):计算向量V的∞——范数。
(2) 矩阵的范数
- 矩阵A的1——范数:所有矩阵列元素绝对值之和的最大值。
- 矩阵A的2——范数:A’A矩阵的最大特征值的平方根。
其中为A’A的最大特征值。
- 矩阵A的∞——范数:所有矩阵行元素绝对值之和的最大值。
MATLAB提供了求3种矩阵范数的函数,其函数调用格式与求向量的范数的函数完全相同。
2.3.5矩阵的条件数
- 矩阵A的条件数等于A的范数与A的逆矩阵的范数的乘积。
- 条件数越接近于1,矩阵的性能越好,反之,矩阵的性能越差。
在MATLAB中,计算矩阵A的3种条件数的函数是:
- cond(A,1):计算A的1——范数下的条件数。
- cond(A)或cond(A,2):计算A的2——范数数下的条件数。
- cond(A,inf):计算A的∞——范数下的条件数。
例3 求2~10阶希尔伯特矩阵的条件数。
2.4 矩阵的特征值与特征向量
2.4.1 矩阵特征值的数学定义
设A是n阶方阵,如果存在常数和n维非零列向量x,使得等式Ax=
x成立,则称
为A的特征值,x是对应特征值
的特征向量。
2.4.2 求矩阵的特征值与特征向量
在MATLAB中,计算矩阵的特征值和特征向量的函数是eig,常用调用格式有两种:
- E=eig(A):求矩阵A的全部特征值,构成向量E。
- [X,D]=eig(A):求矩阵A的全部特征值,构成对角阵D,并产生矩阵X,X各列是相应的特征向量。
A矩阵的特征值有R矩阵的特征值和S矩阵的特征值组成,关于A矩阵每个特征值的特征向量,前三个特征向量的前三个元素是R的特征向量,后两个特征向量的后两个元素是S的特征向量,运算结果与结论相符。
2.4.3 特征值的几何意义
- 定义变化矩阵A,再利用A对x进行变化,得到Y矩阵,最后分别绘制变换前后的图形,M原来是正体,变化后改为斜体。
- 启示:在构建字库时,不必单独创建斜体字库,而只需对正体字库进行适当的线性变换即可,这样可以大大节省存储空间。
2.5 稀疏矩阵
2.5.1 矩阵的存储方式
- 完全存储方式:将矩阵的全部元素按列存储。
- 稀疏存储方式:只存储矩阵的非零元素的值及其位置,即行号和列号。
注意:采用稀疏存储方式时,矩阵元素的存储顺序并没有改变,也是按列的顺序进行存储。
A矩阵的稀疏存储方式:
(1,1),1
(3,1),2
(2,2),5
(3,4),7
当矩阵的规模很大时,采用稀疏存储方式可大大节约存储空间。
2.5.2 稀疏存储方式的产生
(1)完全存储方式与稀疏存储方式之间的转化
- A=sparse(S):将矩阵S转化为稀疏存储方式的矩阵A。
- S=full(A):将矩阵A转化为完全存储方式的矩阵S。
(2) 直接建立稀疏存储矩阵
sparse函数的其他调用格式:
- sparse(m,n):生成一个m×n的所有元素都是零的稀疏矩阵。
- sparse(u,v,S):其中u、v、S是3个等长的向量。S是要建立的稀疏存储矩阵的非零元素,u(i)、v(i)分别是S(i)的行和列下标。
使用spconvert函数直接建立稀疏存储矩阵,其调用格式为:
B=spconvert(A)
其中,A为一个m×3或m×4的矩阵,其每行表示一个非零元素,m是非零元素的个数。
- A(i,1)表示第i个非零元素所在的行。
- A(i,2)表示第i个非零元素所在的列。
- A(i,3)表示第i个非零元素值的实部。
- A(i,4)表示第i个非零元素值的虚部。
若矩阵的全部元素都是实数,则无需第4列。
(3)带状稀疏矩阵的稀疏存储
- 稀疏矩阵有两种基本类型,无规则结构的稀疏矩阵与有规则结构的稀疏矩阵。
- 带状稀疏矩阵就是一种十分典型的具有规则结构的稀疏矩阵,它是指所有非零元素集中在对角线上的矩阵。
- [B,d]=spdiags(A):从带状稀疏矩阵A中提取全部非零对角线元素赋给矩阵B及其这些非零对角线的位置向量d。
- A=spdiags(B,d,m,n):产生带状稀疏矩阵的稀疏存储矩阵A,其中m、n为原带状稀疏矩阵的行数和列数,矩阵B的第i列即为原带状稀疏矩阵的第i条非零对角线,向量d为原带状稀疏矩阵所有非零对角线的位置。
利用带状稀疏矩阵非零对角线元素组成的矩阵B,以及对角线位置组成的向量d,命令执行后产生一个稀疏存储矩阵A。
总结
用spdiags函数产生带状稀疏矩阵的稀疏存储A:
A=spdiags(B,d,m,n)
其中,m、n为原带状矩阵的行数和列数。B为r×p矩阵,这里r=min(m,n),p为原带状矩阵所有非零对角线条数。矩阵B的第i列即为原带状矩阵的第i条非零对角线。取值方法是:若非零对角线上元素个数等于r,则取全部元素;若非零对角线上元素个数小于r,则应该用零补足到r个元素。补零的原则是:若m<n(行数<列数),则d<0时(主对角线以下)在前面补0,d>0时(主对角线以上)在后面补零;当m>=n(行数>=列数),则d<0时在后面补零;d>0时在前面补零。
(4)单位矩阵的稀疏存储
speye(m,n)返回一个m×n的稀疏单位矩阵。
2.5.3 稀疏矩阵的应用实例
求下列三对角线性方阵组的解。