Matlab特殊矩阵
有一类具有特殊形式的矩阵称为特殊矩阵。常见的特殊矩阵有零矩阵、幺矩阵、单位矩阵等,这些特殊矩阵在应用中具有通用性;
还有一类特殊矩阵在专门学科中得到应用,如有名的魔方矩阵、范德蒙(Vandermonde)矩阵、希尔伯特(Hilbert)矩阵等。
MATLAB提供了相应的函数,可以更方便地生成特殊矩阵。
一.通用的特殊矩阵
常用的产生通用特殊矩阵的函数有以下几个。
(1)zeros:产生全0矩阵,即零矩阵。
>> zeros(3)
ans =
0 0 0
0 0 0
0 0 0
(2)ones:产生全1矩阵,即幺矩阵。
>> ones(3)
ans =
1 1 1
1 1 1
1 1 1
(3)eye:产生单位矩阵。
>> eye(3)
ans =
1 0 0
0 1 0
0 0 1
(4)rand:产生(0,1)区间均匀分布的随机矩阵。
>> rand(3)
ans =
0.8147 0.9134 0.2785
0.9058 0.6324 0.5469
0.1270 0.0975 0.9575
(5)randn:产生均值为0,方差为1的标准正态分布随机矩阵。
>> randn(3)
ans =
2.7694 0.7254 -0.2050
-1.3499 -0.0631 -0.1241
3.0349 0.7147 1.4897
这几个函数的调用格式相似,下面以产生零矩阵的zeros函数为例进行说明。其调用格式如下:
其中,第一种格式产生m×m零矩阵。第二种格式产生m×n零矩阵,当m=n时,等同于zeros(m)。第三种格式产生与矩阵A同样大小的零矩阵。例如:
例1 建立随机矩阵。
(1)在区间[20,50]内均匀分布的5阶随机矩阵。
(2)均值为0.6,方差为0.1的5阶正态分布随机矩阵。
>> x=20+(50-20)*rand(5)
x =
43.7662 48.0198 39.6643 21.3851 48.5067
48.7848 40.3621 25.1356 22.9140 21.0334
39.6722 42.7322 41.1814 44.7037 33.1623
21.0714 42.2940 20.9550 40.8449 31.4468
45.4739 31.7668 28.3077 29.5130 42.9655
>> y=0.6+sqrt(0.1)*randn(5)
y =
0.6989 0.9457 0.2479 0.5287 0.9480
0.3265 0.9508 0.5978 0.9533 1.0883
0.5905 0.3269 1.0847 0.2556 0.6272
0.5479 0.6245 0.3566 0.6103 0.1283
0.7985 0.2161 0.7174 0.7747 0.3653
二.用于专门学科的特殊矩阵
1.魔方矩阵
魔方矩阵有一个有趣的性质,其每行、每列及两条对角线上的元素和都相等。
对于n阶魔方阵,其元素由1、2、3、…、n²共n²个整数组成,每行、每列及两条对角线上的元素和都等于n(n²+1)/2。
MATLAB提供了函数**magic(n)**,其功能是生成一个n阶魔方阵。
>> magic(3)
ans =
8 1 6
3 5 7
4 9 2
例2 将[101,125]范围内的25个整数填入一个5行5列的表格中,使其每行每列及对角线的和均为565。
>> M=100+magic(5)
M =
117 124 101 108 115
123 105 107 114 116
104 106 113 120 122
110 112 119 121 103
111 118 125 102 109
2.范德蒙矩阵
范德蒙(Vandermonde)矩阵的一般形式为:
范德蒙矩阵最后一列全为1,倒数第二列为一个指定的向量,其他各列是其后一列与倒数第二列对应元素的乘积。
可以用一个指定向量生成一个范德蒙矩阵。
在MATLAB中,函数**vander(V)**生成以向量V为基础向量的范德蒙矩阵。
例如,生成上述范德蒙矩阵的命令如下:
>> vander([1;2;3;5])
ans =
1 1 1 1
8 4 2 1
27 9 3 1
125 25 5 1
3.希尔伯特矩阵
希尔伯特(Hilbert)矩阵是一种数学变换矩阵,它的每个元素
在MATLAB中,生成希尔伯特矩阵的函数是**hilb(n)**。
希尔伯特矩阵是一个高度病态的矩阵,即任何一个元素发生微小变动,整个矩阵的值和逆矩阵都会发生很大变化,病态程度和阶数相关。
在MATLAB中,有一个专门求n阶希尔伯特矩阵的逆矩阵的函数invhilb(n)。
例3 求4阶希尔伯特矩阵及其逆矩阵。
>> 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
>> H=invhilb(4)
H =
16 -120 240 -140
-120 1200 -2700 1680
240 -2700 6480 -4200
-140 1680 -4200 2800
>> format %恢复默认输出格式
4.托普利兹矩阵
托普利兹(Toeplitz)矩阵除第一行和第一列外,其他每个元素都与左上角的元素相同。
生成托普利兹矩阵的函数是**toeplitz(x,y)**,它生成一个以x为第一列,y为第一行的托普利兹矩阵。这里x、y均为向量,两者不必等长。
**toeplitz(x)**用向量x生成一个对称的托普利兹矩阵。例如:
>> toeplitz(1:6)
ans =
1 2 3 4 5 6
2 1 2 3 4 5
3 2 1 2 3 4
4 3 2 1 2 3
5 4 3 2 1 2
6 5 4 3 2 1
5.伴随矩阵
设多项式p(x)为
p
x
=
a
n
x
n
+
a
n
−
1
x
n
−
1
+
.
.
.
+
a
1
x
+
a
0
p_x=a_nx^n+a_{n-1}x^{n-1}+...+a_1x+a_0
px=anxn+an−1xn−1+...+a1x+a0
称矩阵
为多项式p(x)的伴随矩阵,p(x)称为A的特征多项式,方程p(x)=0的根称为A的特征值。
MATLAB生成伴随矩阵的函数是**compan§,**其中p是一个多项式的系数向量,高次幂系数排在前,低次幂排在后。
例如,求
x
3
−
7
x
+
6
x^3-7x+6
x3−7x+6
的伴随矩阵
>> p=[1,0,7,6]
p =
1 0 7 6
>> compan(p)
ans =
0 -7 -6
1 0 0
0 1 0
6.帕斯卡矩阵
二次项
(
x
+
y
)
n
(x+y)^n
(x+y)n
展开后的系数随n的增大组成一个三角形表,称为杨辉三角形。由杨辉三角形表组成的矩阵称为帕斯卡(Pascal)矩阵。
帕斯卡矩阵的第一行元素和第一列元素都为1,其余位置的元素是该元素的左边元素与上一行对应位置元素相加,即A(i,j)=A(i,j-1)+A(i-1,j)。
函数**pascal(n)**生成一个n阶帕斯卡矩阵。
>> pascal(3)
ans =
1 1 1
1 2 3
1 3 6
例4 求(x+y)5的展开式。
>> pascal(6)
ans =
1 1 1 1 1 1
1 2 3 4 5 6
1 3 6 10 15 21
1 4 10 20 35 56
1 5 15 35 70 126
1 6 21 56 126 252
3 6
例4 求(x+y)5的展开式。
pascal(6)
ans =
1 1 1 1 1 1
1 2 3 4 5 6
1 3 6 10 15 21
1 4 10 20 35 56
1 5 15 35 70 126
1 6 21 56 126 252
*Matlab学习笔记内容来源于《MATLAB程序设计与应用 第三版》刘卫国主编*