我正在帮助我的朋友创建代码来执行重叠狄拉克算子,并且遇到了一个我不知道该怎么做的部分。
我需要计算厄米特矩阵的特征值和相应的特征向量(我的测试是针对 n = 4),以便我可以实现矩阵符号函数在哪里是一个特征向量矩阵,是复杂的转置, 和是一个具有特征值符号的矩阵在它的对角线上。
任何资源或现有算法/库的帮助来解决这个问题(或至少做出近似)将不胜感激。我的目标编程语言是 Scala。
我正在帮助我的朋友创建代码来执行重叠狄拉克算子,并且遇到了一个我不知道该怎么做的部分。
我需要计算厄米特矩阵的特征值和相应的特征向量(我的测试是针对 n = 4),以便我可以实现矩阵符号函数在哪里是一个特征向量矩阵,是复杂的转置, 和是一个具有特征值符号的矩阵在它的对角线上。
任何资源或现有算法/库的帮助来解决这个问题(或至少做出近似)将不胜感激。我的目标编程语言是 Scala。
抱歉,我耽搁了这么久才回答这个问题,但我想回答这个问题,以防其他人有问题
我通过使用 jBLAS 库 ( http://mikiobraun.github.io/jblas/ )找到了解决此问题的方法
计算符号函数,如果您在 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)