我正在尝试为Matrix.pow(int exp)
实施exp >= 0
方法
我当前的实现反复调用Matrix.mul(Matrix m)
方法,该方法适用于小指数。
然而,对于大型指数,解决方案会出现偏差。 Matrix类在内部使用双精度,我认为重复调用最终会导致精度损失。
我在看http://en.wikipedia.org/wiki/Exponentiation_by_squaring,这肯定会有所帮助,但我认为对于更大的指数来说,这仍然是一个问题。
是否有更好的方法对矩阵进行取幂?
答案 0 :(得分:1)
考虑使用BigDecimal而不是double,如果你使用java api,请确保你使用的方法使用BigDecimal而不是Double.you可以使用开源项目并像这样编辑它{{3} }。
答案 1 :(得分:1)
在大多数情况下,重复方块是解决问题的最佳方案。尝试一下,准确性比重复乘法更好。如果精度仍然不足,则有多种方法可以根据基质的类型来改善数值稳定性。例如。如果你有一个对称矩阵,你可以预先对角化并计算特征值的幂。这样,奇异矩阵仍然是单数。对于其他特殊类型的矩阵还有其他方法,如果你告诉我们你有什么样的矩阵,我可以详细说明。