我正在研究一个涉及获取特定矩阵的分数幂的问题。
对于主对角线上有2的矩阵A和超对角线上的-1(1D中Dirichlet拉普拉斯算子的有限差分矩阵),使用MATLAB的sqrtm(A)
函数和对矩阵(A = V\D*V
)进行对角化并计算V\D^(1/2)*V
,即使矩阵大到1000x1000。这让我觉得我可以计算MATLAB没有内置函数的其他分数幂V\D^(1/n)*V
。
然而,当我在2D中考虑Dirichlet Laplacian的矩阵A时,即使矩阵小到100x100,MATLAB的sqrtm函数和我在上面使用的对角化过程之间也存在显着差异。特别是,MATLAB的sqrtm函数更好,如果我以其他方式执行,我的结果没有任何意义。
我想知道是否有人可以解释为什么会发生这种情况,如果有办法解决它,以便我可以在MATLAB中计算大矩阵的分数幂。
编辑:我在A = V*D/V
之后犯了一个大错误,而不是像我上面写的那样V\D*V
(在我的代码中)。事实证明,MATLAB通过执行A^(1/n)
使用此算法来计算V*D^(1/n)/V
。在答案 here
答案 0 :(得分:1)
如果您不是在讨论稀疏矩阵的特定算法,那么它只是
expm(1.0/n*logm(A))