Java EJML获取矩阵特征向量';实际价值

Java EJML获取矩阵特征向量';实际价值,java,matrix,linear-algebra,eigenvector,ejml,Java,Matrix,Linear Algebra,Eigenvector,Ejml,我试图将一个非正定矩阵转换成一个正定矩阵,以便能够进行cholesky分解。使用EJML(我认为这是一个很好的库)时,我在尝试获取矩阵的特征向量时遇到了麻烦 EJML为存在虚值的每个特征向量返回一个空值。与JBlas等其他java库不同,它不提供任何提取实际值的功能(至少不是显而易见的功能) 根据EJML javadoc(): MatrixType获取特征向量(整数索引) 用于检索实值特征向量。如果特征向量与复特征值关联,则返回null 参数: 索引-特征值-特征向量对的索引 返回: 如果相关特

我试图将一个非正定矩阵转换成一个正定矩阵,以便能够进行cholesky分解。使用EJML(我认为这是一个很好的库)时,我在尝试获取矩阵的特征向量时遇到了麻烦

EJML为存在虚值的每个特征向量返回一个空值。与JBlas等其他java库不同,它不提供任何提取实际值的功能(至少不是显而易见的功能)

根据EJML javadoc():

MatrixType获取特征向量(整数索引)

用于检索实值特征向量。如果特征向量与复特征值关联,则返回null

参数:

索引-特征值-特征向量对的索引

返回:

如果相关特征值为实,则返回特征向量,否则返回null

为了重现我的问题,考虑下面的算法:

DenseMatrix64F origMatrix = RandomMatrices.createRandom(size, size, -2, 2, rand);

Original Matrix (non positive definite):

0.543  -1.405   1.580  
1.227   1.686  -0.064  
1.080  -1.689   0.645 

EigenDecomposition<DenseMatrix64F> eig = DecompositionFactory.eig(size, true);
eig.decompose(origMatrix);

int eigValNum = eig.getNumberOfEigenvalues();  

for(int i = 0; i < eigValNum; i++){
    DenseMatrix64F eigMat = eig.getEigenVector(i);
    if(eigMat != null){
        //Store all vectors inside a matrix
    }
}

Eigenvector Matrix:

0.000   0.000   0.573  
0.000   0.000  -0.299  
0.000   0.000  -0.763  
densematrix x64f origMatrix=randomMatrix.createRandom(大小,大小,-2,2,rand);
原始矩阵(非正定):
0.543  -1.405   1.580  
1.227   1.686  -0.064  
1.080  -1.689   0.645 
特征分解eig=DecompositionFactory.eig(大小,真);
eig.分解(origMatrix);
int eigValNum=eig.getNumberOfCharacteristals();
对于(int i=0;i

据我所知,特征向量矩阵的前两列是空的,因为存在一个虚值,这使得EJML返回一个空值。我需要一种方法或技术,允许我在不丢失过程中的所有向量的情况下保留虚值并提取实值。

EJML不支持复杂的特征向量。为了计算复特征向量,必须提供对复矩阵和复特征值分解的支持,而EJML没有提供。您可以在其网站上提出功能请求

非常感谢您的回答,这可能很简单,就像检查自己复杂矩阵的可用性一样。我希望你的答案在将来的某个时候能对其他人有所帮助。尽管仍然不受支持,但该库的作者表示,它可以尽早添加复杂的矩阵支持。资料来源: