线性代数 - 矩阵对角化

今天听 \(\texttt{m}\color{red}{\texttt{yee}}\) 嘴的,赶紧来补个学习笔记。

我们有点时候需要计算一个较小矩阵的 \(n\) 次幂,但直接求幂非常不方便,这是会考虑矩阵对角化,将 \(M\) 改写为 \(\mathcal{PDP^{-1}}\),这样 \(M^n\) 次就可以写为 \((\mathcal{PDP^{-1}})=\mathcal{PD^nP^{-1}}\),转化为快速计算 \(\mathcal{D^n}\)

求解方法

我们定义一个矩阵 \(\mathcal{A}\) 的特征向量为 \(\alpha\),相应特征值为 \(\gamma\),他们满足:

\[\mathcal{A}\alpha=\gamma\alpha \]

其中 \(\alpha\) 是定义在 \(K^n\) 次空间内的非零向量,\(\gamma\) 是一个常数,可以将上面的式子写成矩阵的形式:

\[\begin{bmatrix}a_{1,1}&a_{1,2}&\cdots&a_{1,m}\\a_{2,1}&a_{2,2}&\cdots&a_{2,m}\\\vdots&\vdots&\ddots&\vdots\\a_{n,1}&a_{n,2}&\cdots&a_{n,m}\end{bmatrix}\times\begin{bmatrix}b_1\\b_2\\\vdots\\b_n\end{bmatrix}=\begin{bmatrix}\gamma b_1\\\gamma b_2\\\vdots\\\gamma b_n\end{bmatrix} \]

矩阵对这个向量只起到拉扯作用。

对于上面的定义式 \(\mathcal{A}\alpha=\gamma\alpha\),我们在右边乘上一个 \(I\) 单位矩阵对答案不会有任何影响,并可以作以下变形:

\[\mathcal{A}\alpha=\gamma\mathcal{I}\alpha\\ (\mathcal{A}-\gamma\mathcal{I})\alpha=\vec{0}\\ \]

观察上面的式子,可以发现 \(\mathcal{A}-\gamma\mathcal{I}\) 一定不存在矩阵的逆(证明:如果存在,可以在等式左右两端各乘上一个逆,那么得到 \(\alpha=\vec{0}\),但由于 \(\alpha\not=\vec{0}\),矛盾,所以不行)。

由于不存在矩阵的逆,所以一定有 \(\text{det}(\mathcal{A}-\gamma\mathcal{I})=0\)!!!

那么根据行列式的定义式:

\[\text{det}(M)=\sum_{\{p\}}(-1)^{\sigma(\{p\})}\prod_{i=1}^na_{i,p_i} \]

我们不妨手动计算行列式,其中不失有对二、三阶矩阵行列式的快速计算方法:

  • 二阶矩阵行列式:主对角线元素之积减去另外两个元素的乘积。
  • 三阶矩阵行列为:主对角线三乘三减去副对角线三乘三,\(a_{11}a_{22}a_{33}+a_{12}a_{23}a_{31}+a_{13}a_{21}a_{32}-a_{13}a_{22}a_{31}-a_{12}a_{21}a_{33}-a_{11}a_{23}a_{32}\)

为了防止忘记减去 \(\gamma\),我们将 \(\mathcal{A}-\gamma\mathcal{I}\) 写成矩阵形式,这就是我们需要求解的矩阵:

\[\begin{bmatrix}a_{1,1}-\gamma&a_{1,2}&\cdots&a_{1,m}\\a_{2,1}&a_{2,2}-\gamma&\cdots&a_{2,m}\\\vdots&\vdots&\ddots&\vdots\\a_{n,1}&a_{n,2}&\cdots&a_{n,m}-\gamma\end{bmatrix} \]

那么写出行列式表达式,我们得到了关于 \(\gamma\) 的一个方程,对它求解我们就得到了 \(\le n\)\(\gamma\) 值。

对于每一个 \(\gamma\),代回上面 \((\mathcal{A}-\gamma\mathcal{I})\alpha=\vec{0}\) 的式子,我们就可以计算出 \(n\)\(\alpha\) 的表达式,我们的要求是这 \(n\)\(\alpha\) 线性无关!!

结果已经出现,假设对角化后结果为 \(\mathcal{A}=\mathcal{PDP^{-1}}\),那么:

\[\mathcal{P}=\begin{bmatrix}\alpha_1&\alpha_2&\cdots&\alpha_n\end{bmatrix}\\\mathcal{D}=\begin{bmatrix}\gamma_1&0&\cdots&0\\0&\gamma_2&\cdots&0\\\vdots&\vdots&\ddots&\vdots\\0&0&\cdots&\gamma_n\end{bmatrix} \]

\(\mathcal{P^{-1}}\) 就是 \(\mathcal{P}\) 的逆,可以手动计算!!由于 \(\gamma\)\(\alpha\) 时可能会有多个解,只要相应 \(\gamma\) 对应相应 \(\alpha\) 即可。

注意其中每一个 \(\alpha\) 都是列向量,所以 \(\mathcal{P}\) 是一个 \(n\times n\) 的方阵。

这样就可以快速求出 \(\mathcal{A}\) 的表达式啦!!

例题

hdu 6956 Pass!

\(n\) 个小朋友在玩球!!最开始球在 \(1\) 号小朋友手上,每次游戏小朋友都会将球等概率传给除了自己的任何一个小朋友。

设经过 \(t\) 次传球后将球传回 \(1\) 号小朋友的方案数对 998244353 取模的值为 \(x\)

现在给定 \(x\),求最小的 \(t\),满足方案数取模后为 \(x\),如果无解输出 -1

\(1\le T\le 100,2\le n\le 10^6,0\le x<998244353\)

先考虑一个正向暴力的做法:

\[dp_{i,j}=\dfrac{\sum_{k=1}^{n}[j\not=k]dp_{i-1,k}}{n-1}\\ \]

\(f_i\) 表示在第 \(i\) 次传球后球在 \(1\) 的概率,\(g_i\) 表示不在 \(1\) 的概率,一定有 \(f_i+g_i=1\)

\[g_{i}=(n-2)\times g_{i-1}+(n-1)\times f_{i-1}\\ f_i=g_{i-1}\\ \begin{bmatrix}f_0\\g_0\end{bmatrix}=\begin{bmatrix}1\\0\end{bmatrix}\\ \begin{bmatrix}f_i\\g_i\end{bmatrix}=\begin{bmatrix}0&1\\n-1&n-2\end{bmatrix}\times \begin{bmatrix}f_{i-1}\\g_{i-1}\end{bmatrix}=\begin{bmatrix}0&1\\n-1&n-2\end{bmatrix}^i\times \begin{bmatrix}1\\0\end{bmatrix} \]

根据上面的推导,我们对等式右边的矩阵对角化,可以解出 \(\gamma_1=n-1,\gamma_2=-1\)

\[\alpha_1=\begin{bmatrix}n-1\\1\end{bmatrix}\\ \alpha_2=\begin{bmatrix}1\\-1\end{bmatrix}\\ \]

写出对角化之后的矩阵:

\[\mathcal{P}=\begin{bmatrix}n-1&1\\1&-1\end{bmatrix}\\ \mathcal{D}=\begin{bmatrix}n-1&0\\0&-1\end{bmatrix}\\ \mathcal{P^{-1}}=\begin{bmatrix}gugugu\end{bmatrix} \]

posted @ 2022-07-23 21:26  EricQian06  阅读(267)  评论(0编辑  收藏  举报