java - EJML获取矩阵特征向量的实值

标签 java matrix linear-algebra eigenvector ejml

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

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

根据EJML javadoc(here):

MatrixType getEigenVector(int index)

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

参数:

index - Index of the eigenvalue eigenvector pair.

返回:

If the associated eigenvalue is real then an eigenvector is returned, null otherwise.

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

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  

据我了解,特征向量矩阵上的前两列为空,因为存在虚数,这使得EJML返回NULL值。我需要一种方法或技术,使我能够留出虚数的余量并提取实数,而不会丢失该过程中的所有 vector 。

最佳答案

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

关于java - EJML获取矩阵特征向量的实值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25996202/

相关文章:

r - 简化双for循环

c++ - 在 UMFPACK 中,我们需要多久进行一次符号和数值分解?

matlab - 使用 Matlab 查找矩阵的相关行/列?

python - 矩阵向量乘法

java - 动态显示我的本地计算机位置的图像

java - 为什么行为停止在 autocompleteField 内使用 propertyModel

java - 模式.编译 ("(.*?):")

java - JpaRepository findAll() 将不会返回具有空字段的行

matlab - 如何将不均匀矩阵组合成单个矩阵?

linux - 如何根据另一列过滤矩阵