Scala中Hermitian矩阵的特征值分解

计算科学 线性代数 算法 矩阵 特征值
2021-11-29 06:51:45

我正在帮助我的朋友创建代码来执行重叠狄拉克算子,并且遇到了一个我不知道该怎么做的部分。

我需要计算厄米特矩阵的特征值和相应的特征向量(我的测试是针对 n = 4),以便我可以实现矩阵符号函数epsilon(M)=Uepsilon(A)U在哪里U是一个特征向量矩阵,U是复杂的转置U, 和epsilon(A)是一个具有特征值符号的矩阵M在它的对角线上。

任何资源或现有算法/库的帮助来解决这个问题(或至少做出近似)将不胜感激。我的目标编程语言是 Scala。

1个回答

抱歉,我耽搁了这么久才回答这个问题,但我想回答这个问题,以防其他人有问题

我通过使用 jBLAS 库 ( http://mikiobraun.github.io/jblas/ )找到了解决此问题的方法

计算符号函数epsilon(M)=Uepsilon(A)U,如果您在 jBlas 中有一个现有的矩阵 matrixR:

val eigenvecs = Eigen.eigenvectors(matrixR)
val lambda = new DoubleMatrix(4,4, math.signum(eigenvecs(1).get(0,0).real),0,0,0,
  0,math.signum(eigenvecs(1).get(1,1).real),0,0,
  0,0,math.signum(eigenvecs(1).get(2,2).real),0,
  0,0,0,math.signum(eigenvecs(1).get(3,3).real)) //can be extended to larger matrices
val epsilon = eigenvecs(0).real.mmul(lambda).mmul(eigenvecs(0).real.transpose) //where epsilon = epsilon(M)