n^3矩阵快速幂与一点稀疏矩阵上的算法

Frobenius 标准型

又常称有理标准型 .

前面忘了后面忘了.

总之, 是说一个矩阵 \(A\) 可以分解成

\(PBP^{-1}\)

其中 \(B= \left[ \begin{array}{ccc} C_0 & & & \\ & C_1 & & \\ & & \ddots & \\ & & & C_{n-1}\\ \end{array} \right] \)

其中 \(C_i\) 形如 \( \left[ \begin{array}{ccc} 0 & 0 & \cdots & 0 & *\\ 1 & 0 & \cdots & 0 & *\\ 0 & 1 & \cdots & 0 & *\\ \vdots & \vdots & \ddots & \vdots &\vdots\\ 0 & 0 & \cdots & 1& *\\ \end{array} \right] \)

(有些文献的 \(C\) 可能是此处写法的转置.)

这可以算对角化思想的某种推广(但可对角化矩阵的 Frobenius 标准型是仅由一大块 \(C\) 组成的), 与 Jordan标准型 相比, 这个东西不依赖多项式因子分解 .

若得到了一个矩阵的 Frobenius 标准型 , 那 \(A^k = PB^kP^{-1}\) .(注意到 \(PP^{-1}=P^{-1}P=I\), 其中 \(I\) 表示单位矩阵)

\(B^k= \left[ \begin{array}{ccc} (C_0)^k & & & \\ & (C_1)^k & & \\ & & \ddots & \\ & & & (C_{n-1})^k\\ \end{array} \right] \)

\(C_i\) 的矩阵快速幂易于转换为线性递推并快速完成, 在此不再赘述.

计算 Frobenius 标准型

已知 \(n\times n\) 的矩阵 \(A\) .

考虑一个非零列向量 \(x\), 计算 \(Ax,A^2x,A^3x\cdots A^{k-1}x\), 直到 \(A^kx\) 可以由 \(x,Ax,A^2x,A^3x\cdots A^{k-1}x\) 线性表示 .

若此时已有 \(k=n\) .

考虑取 \(B=P^{-1}AP\) .

其中 \(P={x,Ax,A^2x\cdots A^{k-1}x}\) .

此时有 \(P^{-1}A^{k}x=\left[ \begin{array}{ccc} f_{0} \\ f_{1} \\ \vdots \\ f_{n-1}\\ \end{array} \right] \) 其中 \(f_i=[i = k]\) , 也就是仅有第 \(k\) 行的元素非零 .

\(AP={Ax,A^2x,A^3x\cdots A^{k}x}\) .

因此 \(B=P^{-1}AP=\left[ \begin{array}{ccc} 0 & 0 & \cdots & 0 & *\\ 1 & 0 & \cdots & 0 & *\\ 0 & 1 & \cdots & 0 & *\\ \vdots & \vdots & \ddots & \vdots &\vdots\\ 0 & 0 & \cdots & 1& *\\ \end{array} \right] \) .

我们就得到了分解 \(A=PBP^{-1}\) .

但对于某些矩阵, 我们可能无论如何都没法找到一个满足要求的 \(x\) .

由此我们考虑找一个新的向量 \(x_1\), 把旧的 \(x\) 记作 \(x_0\), 计算 \(Ax_1,A^2x_1,A^3x_1\cdots A^{k_1-1}x_1\), 直到 \(A^{k_1}x_1\) 可以由 \(x_0,Ax_0,A^2x_0,A^3x_0\cdots A^{k_0-1}x_0\) , \(x_1,Ax_1,A^2x_1\cdots A^{k_1-1}x_1\) 线性表示 .

直到 \(\sum\limits_{i}k_i=n\) .

此时令 \(P=x_0,Ax_0\cdots A^{k_0-1}x_0\) , \(x_1,Ax_1\cdots A^{k_1-1}x_1\) , \(\cdots\) , \(x_{l-1},Ax_{l-1}\cdots A^{k_{l-1}-1}x_{l-1}\) .

\(B=P^{-1}AP\) .

得到 \(B= \left[ \begin{array}{ccc} C_0 & 0|* & \cdots & 0|* \\ & C_1 & \cdots & 0|* \\ & & \ddots & \vdots \\ & & & C_{l-1}\\ \end{array} \right] \)

\(C_i\) 的特征多项式 \(P_i\) .

\(B\) (\(A\)) 的特征多项式即 \(\prod\limits_iP_i\) .

对于模数较大的情况, 随机一个向量这个生成的过程大概率能保证 \(P_{i}|\cdots|P_2|P_1|P_0\)

也就是后续加入的多项式是前面多项式的因子 .

\(P_1(A)x_1=r(A)x_0\)

\(Q(x)=P_0(x)/P_1(x)\)

\(0=P_0(A)x_1=Q(A)P_1(A)x_1=Q(A)r(A)x_0\)

因此有 \(P_0|Qr\) , \(Qr=P_0(r/P_1)\) , 则有 \(P_1|r\) .

\(s=P_1/r\) 考虑 \(x_1'=x_1-sx_0\)

则有 \(P_1(A)x_1'=P_1(A)(x_1-sx_0)=P_1(A)x_1-r(A)x_0=0\) .

因此尝试加入 \(x_1\) 并计算出 \(x_1'\) , 然后实际上加入 \(x_1'\) 就不存在多余的 \(*\) 部分, 对于后面的\(x_2,x_3\cdots x_{l-1}\)可以类似处理 .

这就是所谓的 "正交化" .(两向量正交即内积为零)

根据这个流程容易得到分解 .

稀疏矩阵特征多项式

参考资料

https://www.cnblogs.com/Elegia/p/alternative_charpoly.html

https://codeforces.com/blog/entry/124815

posted @ 2024-06-20 07:17  QedDust  阅读(15)  评论(0)    收藏  举报