本文整理一下关于矩阵的一些简单东西之类的
由于竞赛范围,主要考虑方阵
先考虑矩阵乘法
实际上,设(A=(a_{i j})_{n k}),(B=(b_{ij})_{km})
可以认为:
[A=
left{
egin{matrix}
a_{11} & a_{12} & cdots & a_{1k} \
a_{21} & a_{22} & cdots & a_{2k} \
vdots & vdots & ddots & vdots \
a_{n1} & a_{n2} & cdots & a_{nk} \
end{matrix}
ight}
]
的实际意义是
[egin{cases}
& x_{1}=a_{1}y_{1}+a_{1}y_{2}+cdots+a_{1}y_{k} \
& x_{2}=a_{2}y_{1}+a_{2}y_{2}+cdots+a_{2}y_{k} \
& vdots \
& x_{n}=a_{n}y_{1}+a_{n}y_{2}+cdots+a_{n}y_{k}
end{cases}
]
可以发现:上述的方程组是一个关于行和列的转化关系,(B)也有相同的结果:
[egin{cases}
& y_{1}=b_{1}z_{1}+b_{1}z_{2}+cdots+b_{1}z_{m} \
& y_{2}=b_{2}z_{1}+b_{2}z_{2}+cdots+b_{2}z_{m} \
& vdots \
& y_{k}=b_{k}z_{1}+b_{k}z_{2}+cdots+b_{k}z_{m}
end{cases}
]
当我们想要用(z)来表示(y)时,可以发现:
[x_{p}=sum_{i=1}^{k}{(a_{pi}×y_{i})}=sum_{i=1}^{k}{(a_{pi}×sum_{j=1}^{m}{(b_{ij}×z_{i})})}=sum_{j=1}^{m}{((sum_{i=1}^{k}{(a_{pi}×b_{ij})})×z_{i})}
]
由上面的转化过程我们可以求得系数
实际上我们设:
[sum_{i=1}^{k}{(a_{pi}×b_{ij})}=c_{ij}
]
(c_{ij})组成一个矩阵(C),由此定义:
[ C=AB
]
由上面我们引出矩阵加速
我们定义初始矩阵:
[left{
egin{matrix}
a_{1} \
a_{2} \
vdots \
a_{n}
end{matrix}
ight}
]
实际上我们可以认为:
[egin{cases}
& y_{1}=a_{1}x \
& y_{2}=a_{2}x \
& vdots \
& y_{n}=a_{n}x \
end{cases}
]
实际(x)就是单位(1)
我们用(y)表示数列中连续的(n)项,用(x)表示前面的一项和(y)中的前(n-1)项合成的连续(n)项
由递推公式可知:
[egin{cases}
& y_{1}=x_{2} \
& y_{2}=x_{3} \
& vdots \
& y_{n-1}=x_{n} \
& y_{n}=a_{1}x_{1}+a_{2}x_{2}+a_{3}x_{3}+cdots+a_{n}x_{n} \
end{cases}
]
转化为矩阵:
[A=
left{
egin{matrix}
0 & 1 & 0 & cdots & 0 \
0 & 0 & 1 & cdots & 0 \
vdots & vdots & vdots & ddots & vdots \
0 & 0 & 0 & cdots & 1 \
a_{1} & a_{2} & a_{3} & cdots & a_{n}
end{matrix}
ight}
]
这可以看做向后一项的递推关系(有的喜欢反着写
因为我们一开始讨论了矩阵乘法的一个意义就是关系的转化
显然可以通过矩阵快速幂跳跃到需要的地方
在此基础上,我们讨论由末项推首项的方法
为了解决这个问题,我们引入下面的概念
首先,单位矩阵是(n)阶的对角矩阵且对角上的数都为1:
[I=
left{
egin{matrix}
1 & 0 & cdots & 0 \
0 & 1 & cdots & 0 \
vdots & vdots & ddots & vdots \
0 & 0 & cdots & 1 \
end{matrix}
ight}
]
单位矩阵对于矩阵乘法显然有:
[A×I=A
]
我们同样用未知数的转化关系理解矩阵的话,实际我们想要做的就是找到一个(B)消除(A)的影响
[(A×I)×B=A×B=I
]
我们定义(B)为(A)的逆,记作(A^{-1})
在寻找(A^{-1})之前,我们先要理解一些有关变换的东西
首先,是否是所有的矩阵都有逆?
我们简单通过行列式理解一下
(I)的行列式为(1),又由于(A×B=C)所以(|A||B|=|C|)
显然,当(A=0)时,(A^{-1})不存在
上面的证明当然不严格,没有说明当(A
ot=0)时,(A^{-1})存在
OI需要理解那么深入?
我们继续引入初等矩阵来让你理解这个东西
初等矩阵就是(I)进过一次变换可以得到的矩阵,为了简单起见,我们只看初等行变换
我们通过矩阵分块不难发现,对于一个矩阵做一次初等行变换等于在其右侧乘上一个对应的初等矩阵
因此,我们的目标转化成了求出(A)变化成(I)的初等行变换
在这里做出高斯消元法的介绍(也称高斯消去法
高斯消元法是一个有效的将一个矩阵转化成单位矩阵的方法(如果可以的话
同时大部分时候都用来构造增广矩阵解线性方程组了
其实就一句话:先固定,后消去
固定是指固定(i)列的某一个不为(0)的数所在的行
消去是指用所固定的行的(k)倍和其他行相加,使得其他行的(i)为(0)
以三阶为例
[left{
egin{matrix}
4 & 2 & 1 \
1 & 4 & 3 \
2 & 4 & 6 \
end{matrix}
ight}
]
[left{
egin{matrix}
0 & -6 &-11 \
0 & 2 & 0 \
2 & 4 & 6 \
end{matrix}
ight}
]
[left{
egin{matrix}
0 & 0 &-11 \
0 & 2 & 0 \
2 & 0 & 6 \
end{matrix}
ight}
]
[left{
egin{matrix}
0 & 0 &-11 \
0 & 2 & 0 \
2 & 0 & 0 \
end{matrix}
ight}
]
上述是从最下面向上固定
可以发现:固定是为了除去其他行在这一列的数,可以证明固定必须是轮流的,不能一行多次
为了使得程序更加易于实现,做出一下的约定:
- 依次固定,(1-n)列
- 在固定(i)行时,找到(i-n)中绝对值最大的,与(i)行做交换,作为参考
- 用现在的(i)行的(k)倍去除去其他行的数
可以想到,当操作(2)取得的最大值为(0)时,最终的对角矩阵对角线有空缺,行列式为(0)无法转化成(I)
这对于我们求逆有什么用呢?
我们知道作一次初等变换等于右侧乘上一个初等矩阵
而高斯消元法的过程为
[A×P_{1}×P_{2}×cdots×P_{n}=I
]
所以
[P_{1}×P_{2}×cdots×P_{n}=A^{-1}
]
[I×P_{1}×P_{2}×cdots×P_{n}=A^{-1}
]
这意味着,我们高斯消元时,将(I)同(A)一起变换,(I)变换得到的就是(A^{-1})
这就解决了我们的问题
[A=
left{
egin{matrix}
0 & 1 & 0 & cdots & 0 \
0 & 0 & 1 & cdots & 0 \
vdots & vdots & vdots & ddots & vdots \
0 & 0 & 0 & cdots & 1 \
a_{1} & a_{2} & a_{3} & cdots & a_{n}
end{matrix}
ight}
]
显然可逆,其求幂过后的矩阵也可逆
某种意义上,这和高斯消元求线性方程的解的本质是相同的
事实上,求线性方程就是将常数矩阵和未知数矩阵一起变换
因此,在线性方程组的意义上讲:
求逆的过程就是将(x)表示(y)的式子转化成(y)表示(x)
求解的过程就是将未知数表示常数的式子转化成常数表示未知数
到此,你入门了矩阵