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}\)可以类似处理 .
这就是所谓的 "正交化" .(两向量正交即内积为零)
根据这个流程容易得到分解 .