Я пытаюсь сделать преобразование из не положительно определенной матрицы в положительно определенную, чтобы иметь возможность сделать разложение холецкого. Работая с EJML, которую я считаю хорошей библиотекой, я столкнулся с проблемой при попытке получить собственные векторы матрицы.
EJML возвращает нулевое значение для каждого собственного вектора, где существует мнимое значение. Он не предлагает никаких функций (по крайней мере, не очевидных) для извлечения реального значения, в отличие от других библиотек java, таких как JBlas.
Согласно EJML javadoc (здесь):
MatrixType getEigenVector(int index)
Используется для получения действительных собственных векторов. Если собственный вектор связан с комплексным собственным значением, вместо него возвращается null.
Параметры:
index - индекс пары собственных векторов собственных значений.
Возвращает:
Если связанное собственное значение действительно, то возвращается собственный вектор, в противном случае - нуль.
Чтобы воспроизвести мою проблему, рассмотрим следующий алгоритм:
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. Мне нужен метод или техника, которые позволят мне отбрасывать мнимые значения и извлекать действительные, не теряя при этом весь вектор.