Matlab矩阵处理之一
一、特殊矩阵
1.一些通用的特殊矩阵
zeros函数:产生全0矩阵,即零矩阵;
ones函数:产生全1矩阵,即幺矩阵;
eye函数:产生对角线为1的矩阵。当矩阵是方阵时,得到一个单位矩阵;
rand函数:产生(0,1)区间均匀分布的随机矩阵;
randn函数:产生均值为0,方差为1的标准正态分布随机矩阵。
1.1zeros函数的调用格式:
zeros(m):产生m×m零矩阵;
zeros(m,n):产生m×n零矩阵;
zeros(size(A)):产生与矩阵A同样大小的零矩阵。
A=zeros(2,3)
A =
0 0 0
0 0 0
zeros(size(reshape(A,3,2)))
ans =
0 0
0 0
0 0
注:reshape重组数组;将23的数组重塑为32的数组,size求矩阵的大小。
例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;
μ+σx:得到均值为μ、方差为σ^2的随机数。
A=fix(10+(99-10+1)*rand(5)) %%生成10-99随机整数矩阵
B=0.6+sqrt(0.1)*randn(5) %%产生均值为0.6、方差为0.1的5阶正态分布随机矩阵
C=eye(5) %%单位矩阵
(A+B)C==CA+B*C
A =
24 64 50 84 19
81 33 17 58 96
38 68 30 99 10
57 72 92 17 79
24 77 23 49 83
B =
1.0361 0.5121 0.1013 0.9565 0.0465
0.2654 0.8218 0.7606 0.7107 0.5097
0.4518 -0.0488 0.6892 0.5054 0.3371
0.5138 0.4881 0.6106 0.6072 0.2903
0.9474 0.3396 0.1783 0.5171 0.2343
C =
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
ans =
5×5 logical 数组
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
2、魔方矩阵(Magic square)
n阶魔方阵由1,2,3,…,n2共n2个整数组成,且每行、每列以及主、副对角线上各n个元素之和都相等;
n阶魔方阵每行每列元素的和为(1+2+3+…+ n2)/n=(n+n3)/2;
n>2时有很多不同的n阶魔方阵,MATLAB函数magic(n)产生一个特定的魔方阵。
例2 产生8阶魔方阵,求其每行每列元素的和
M=magic(6)
sum(M(1,:))%%第一行的和
sum(M(:,1))%%第一列的和
(6+6^3)/2
M =
35 1 6 26 19 24
3 32 7 21 23 25
31 9 2 22 27 20
8 28 33 17 10 15
30 5 34 12 14 16
4 36 29 13 18 11
ans =
111
ans =
111
ans =
111
3.范德蒙矩阵
范德蒙矩阵的最后一列全为1,即向量v各元素的零次方,倒数第二列为指定的向量v,即向量v各元素的一次方, 其他各列是其后列与倒数第二列的点乘积;
在MATLAB中,函数vander(V)生成以向量V为基础的范得蒙矩阵。
A=vander(1:5)
A =
1 1 1 1 1
16 8 4 2 1
81 27 9 3 1
256 64 16 4 1
625 125 25 5 1
注:范德蒙矩阵常用在各种通信系统的纠错编码中,例如,常用的Reed-Solomon编码即以范德蒙矩阵为基础。感兴趣的同学可自行查阅相关资料
4.希尔伯特矩阵
希尔伯特矩阵的元素为H(i,j)=1/(i+j-1);
在MATLAB中,生成n阶希尔伯特矩阵的函数是hilb(n)。
format rat
H=hilb(4)
H =
1 1/2 1/3 1/4
1/2 1/3 1/4 1/5
1/3 1/4 1/5 1/6
1/4 1/5 1/6 1/7
注:format rat :使用分数来表示数值。
希尔伯特矩阵是著名的病态矩阵,即任何一个元素发生较小的变动,整个矩阵的值和逆矩阵都会发生很大变化。病态程度和矩阵的阶数相关,随着阶数的增加病态越严重。
5.伴随矩阵
设多项式p(x)为a(n)x^n+a(n-1)x(n-1)+…+a1x+a0,则多项式可转为伴随矩阵
p(x)称为A的特征多项式,方程p(x)=0的根称为A的特征值。
MATLAB生成伴随矩阵的函数是compan(p),其中p是一个多项式的系数向量,高次幂系数排在前,低次幂排在后。例如,生成多项式x3-2*x2-5x+6的伴随矩阵。
p=[1,-2,-5,6];
A=compan(p)
A =
2 5 -6
1 0 0
0 1 0
可以求出伴随矩阵的特征值,该特征值等于多项式方程的根。
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;
函数pascal(n)生成一个n阶帕斯卡矩阵。
例3.生成5阶帕斯卡矩阵,验证它的逆矩阵的所有元素也为整数。
format rat
P=pascal(5)
P =
1 1 1 1 1
1 2 3 4 5
1 3 6 10 15
1 4 10 20 35
1 5 15 35 70
inv(P)
ans =
5 -10 10 -5 1
-10 30 -35 19 -4
10 -35 46 -27 6
-5 19 -27 17 -4
1 -4 6 -4 1