前言
线性代数问题是科学技术中最常见的问题,矩阵在工程数学中应用得非常广泛,因此学会创建出自己想要的矩阵是非常重要的,本文讲解利用MATLAB创建常用的矩阵。
1.零矩阵
零矩阵是指所有元素为零的矩阵,在MATLAB利用函数 zeros()创建
% zeros(n)创建一个n*n的零矩阵
A=zeros(4)
% zeros(n,m)创建一个n*m的零矩阵
B=zeros(1,3)
2.幺矩阵
幺矩阵是指所有元素为1的矩阵,在MATLAB利用函数 ones()创建
% ones(n)创建一个n*n的幺矩阵
A=ones(4)
% ones(n,m)创建一个n*m的幺矩阵
B=ones(1,3)
3.单位矩阵
单位矩阵是指主对角线上为1,其他元素均为0的矩阵,在MATLAB利用函数 eye()创建
% eye(n)创建一个n*n单位矩阵
A=eye(4)
% eye(n,m)创建一个n*m的扩展单位矩阵
B=eye(3,8)
4.随机元素矩阵
随机元素矩阵是指矩阵的各个元素都是随机产生的。在MATLAB中可以利用rand()来生成[0,1]之间的随机数。
% rand(n)创建一个n*n的随机矩阵,元素在0到1之间
A=rand(4)
% rand(n,m)创建一个n*m的随机矩阵,元素在0到1之间
B=rand(3,8)
% a*rand(n,m)+b创建一个n*m的随机矩阵,元素在b到a+b之间
C=10*rand(n,m)-5 %元素在[-5,5]内
在MATLAB中还可以利用randn()来生成服从标准正态分布的随机数。
5.Hankel矩阵
Hankel矩阵的一般形式是
H
=
[
c
1
c
2
.
.
.
c
m
c
2
c
3
.
.
.
c
m
+
1
.
.
.
.
.
.
c
n
c
n
+
1
.
.
.
c
n
+
m
−
1
]
\pmb H=\begin{bmatrix}c_1&c_2&...&c_m\\c_2&c_3&...&c_{m+1}\\...&&...\\c_n&c_{n+1}&...&c_{n+m-1}\end{bmatrix}
H=
c1c2...cnc2c3cn+1............cmcm+1cn+m−1
Hankel矩阵如果是方阵则为对称矩阵,其特点是每条反对角线上所有元素都相同。
在MATLAB中利用hankel(c,r)函数生成Hankel矩阵。
函数 | 使用说明 |
---|---|
H=hankel(c,r) | c向量为H矩阵的第一列元素取值,r向量为H矩阵的最后一行元素取值 |
例程:
c=[1,2,3];
r=[3,4,5,6];
H1=hankel(c,r)
H1=hankel(c)
运行结果:
H1 =
1 2 3 4
2 3 4 5
3 4 5 6
H2 =
1 2 3
2 3 0
3 0 0
6.对角矩阵
对角矩阵是指非对角线的所有元素为0的矩阵,对角矩阵是一个方阵。
在MATLAB中,利用函数diag()来生成一个对角矩阵,blkdiag()构造一个块对角矩阵。
函数 | 使用说明 |
---|---|
A=diag(v) | 生成主对角线元素为向量v的对角矩阵A |
v=diag(A) | 返回矩阵A的主对角线上的元素 |
A=diag(v,k) | 生成第k条对角线为v的矩阵 |
v=diag(A,k) | 提取矩阵A的第k条对角线,返回向量v |
A=blkdiag(A1,A2,…,An) | 构造一个块对角矩阵 |
例程1:
v=[1 2 3];
A=diag(v)
B=diag(v,1)
运行结果:
A =
1 0 0
0 2 0
0 0 3
B =
0 1 0 0
0 0 2 0
0 0 0 3
0 0 0 0
例程2:
A1=[1,1;1,1];
A2=[2,2;2,2];
A3=[3,3;3,3;3,3]
A=blkdiag(A1,A2,A3)
运行结果:
A =
1 1 0 0 0 0
1 1 0 0 0 0
0 0 2 2 0 0
0 0 2 2 0 0
0 0 0 0 3 3
0 0 0 0 3 3
0 0 0 0 3 3
7.友矩阵
假设有一个首一化的多项式
p
(
s
)
=
s
n
+
a
1
s
n
−
1
+
.
.
.
+
a
n
−
1
s
+
a
n
p(s)=s^n+a_1s^{n-1}+...+a_{n-1}s+a_n
p(s)=sn+a1sn−1+...+an−1s+an
则可以写出一个友矩阵
A
=
[
−
a
1
−
a
2
.
.
.
−
a
n
−
1
−
a
n
1
0
.
.
.
0
0
0
1
.
.
.
0
0
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
0
0
.
.
.
1
0
]
A=\begin{bmatrix}-a_1&-a_2&...&-a_{n-1}&-a_n\\1&0&...&0&0\\0&1&...&0&0\\...&...&...&...&...\\0&0&...&1&0\end{bmatrix}
A=
−a110...0−a201...0...............−an−100...1−an00...0
在MATLAB可以利用函数compan(a)生成友矩阵。
函数 | 使用说明 |
---|---|
A=compan(a) | 生成以向量a为降幂排列的多项式相对应的友矩阵 |
例程: 生成多项式 P ( s ) = 2 s 4 + 3 s 2 + 6 s + 3 P(s)=2s^4+3s^2+6s+3 P(s)=2s4+3s2+6s+3对应的友矩阵
P=[2 3 6 3];
A=compan(P)%给出向量P,自动归一化建立友矩阵
运行结果:
A =
-1.5000 -3.0000 -1.5000
1.0000 0 0
0 1.0000 0
8.范德蒙矩阵
V
=
[
c
1
n
−
1
c
1
n
−
2
.
.
.
c
1
1
c
2
n
−
1
c
2
n
−
2
.
.
.
c
2
1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
c
n
n
−
1
c
n
n
−
2
.
.
.
c
n
1
]
V=\begin{bmatrix}c^{n-1}_1&c^{n-2}_1&...&c_1&1\\c^{n-1}_2&c^{n-2}_2&...&c_2&1\\...&...&...&...&...\\c^{n-1}_n&c^{n-2}_n&...&c_n&1\end{bmatrix}
V=
c1n−1c2n−1...cnn−1c1n−2c2n−2...cnn−2............c1c2...cn11...1
上述的矩阵V被称为范德蒙矩阵。
在MATLAB中利用vander()函数构造范德蒙矩阵。
函数 | 使用说明 |
---|---|
V=vander( c ) | 生成以向量c一次列的范德蒙矩阵 |
例程: |
c=[2 3 4 5];
V=vander(c)
运行结果:
V =
8 4 2 1
27 9 3 1
64 16 4 1
125 25 5 1
9.稀疏矩阵
稀疏矩阵是指大部分元素都是零,仅有少部分元素非零的矩阵。
在MATLAB中可以利用函数sparse()创建稀疏矩阵。
函数 | 使用说明 |
---|---|
A=sparse(p,q,w) | 其中p,q为非零元素的行号和列号组成的向量,w为相应位置的矩阵元素构成的向量 |
p,q,w三个向量的长度要保持一致,否者会报错
10.符号矩阵
上面提到的矩阵都是数值矩阵,在MATLAB中也可以用函数sym()创建符号矩阵。
例程:
A1=sym('a%d%d',[1,4])
A2=sym('a%d',[1,4])
A3=sym('f%d',[4,1])
A4=sym('a%d',4)
运行结果:
A1 =
[ a11, a12, a13, a14]
A2 =
[ a1, a2, a3, a4]
A3 =
f1
f2
f3
f4
A4 =
[ a11, a12, a13, a14]
[ a21, a22, a23, a24]
[ a31, a32, a33, a34]
[ a41, a42, a43, a44]
符号矩阵也可以进行加减乘的运算。
例程:
A=sym('a%d',3)
B=sym('b%d',3)
C=A+B
D=A*B
运行结果:
A =
[ a11, a12, a13]
[ a21, a22, a23]
[ a31, a32, a33]
B =
[ b11, b12, b13]
[ b21, b22, b23]
[ b31, b32, b33]
C =
[ a11 + b11, a12 + b12, a13 + b13]
[ a21 + b21, a22 + b22, a23 + b23]
[ a31 + b31, a32 + b32, a33 + b33]
D =
[ a11*b11 + a12*b21 + a13*b31, a11*b12 + a12*b22 + a13*b32, a11*b13 + a12*b23 + a13*b33]
[ a21*b11 + a22*b21 + a23*b31, a21*b12 + a22*b22 + a23*b32, a21*b13 + a22*b23 + a23*b33]
[ a31*b11 + a32*b21 + a33*b31, a31*b12 + a32*b22 + a33*b32, a31*b13 + a32*b23 + a33*b33]
总结
函数 | 使用说明 |
---|---|
A=zeros(n,m) | 创建一个n*m的零矩阵 |
A=ones(n,m) | 创建一个n*m的幺矩阵 |
A=eye(n) | 创建一个n*n的单位矩阵 |
H=hankel(c,r) | c向量为H矩阵的第一列元素取值,r向量为H矩阵的最后一行元素取值 |
A=diag(v) | 生成主对角线元素为向量v的对角矩阵A |
v=diag(A) | 返回矩阵A的主对角线上的元素 |
A=diag(v,k) | 生成第k条对角线为v的矩阵 |
v=diag(A,k) | 提取矩阵A的第k条对角线,返回向量v |
A=blkdiag(A1,A2,…,An) | 构造一个块对角矩阵 |
A=compan(a) | 生成以向量a为降幂排列的多项式相对应的友矩阵 |
V=vander( c ) | 生成以向量c一次列的范德蒙矩阵 |
A=sparse(p,q,w) | 其中p,q为非零元素的行号和列号组成的向量,w为相应位置的矩阵元素构成的向量 |
A=sym(‘a%d’,4) | 生成4行4列的符号矩阵 |
A=sym(‘a%d’,[n,m]) | 生成n行m列的符号矩阵 |