【发布时间】:2019-03-14 14:55:26
【问题描述】:
假设我有一个常数矩阵 A,我想计算 pow(A, n)。如in this question 所述,我可以计算它的特征值分解(或更一般地说,它的不变子空间和广义模态矩阵)以加快处理速度。
如果 A 是大小为 k 的方阵,则该算法通过平方取幂的复杂度为 O(k log n),准备成本(计算模态矩阵)为 O(k^3)。
我正在考虑的问题是精度损失。计算特征值等将我们带出整数域到浮点数。尽管最后我们知道 pow(A, n) 必须包含所有整数条目,但上面概述的算法只计算浮点数。
另一种方法是通过平方仅利用求幂,但这只会给我们一个 O(k^3 log n) 算法。
有没有办法准确地 - 无需转换为浮点数 - 快速计算 pow(A, n)?
【问题讨论】:
-
如果这会导致有人可以在纸上执行但这是高度可选的算法,那就更好了
-
即使您使用(固定大小)整数,由于溢出导致的信息丢失也是一个问题。所以通常你需要使用任意精度的整数。您也可以使用任意精度有理数来计算特征值,从而避免固定精度浮点的精度损失。
-
@ChrisDodd 考虑矩阵
[1 1]超过[1 0]。它的特征值为(1+sqrt(5))/2和(1 - sqrt(5))/2。任意精确的理性不会拯救你。
标签: algorithm integer precision matrix-multiplication