作爲當前的任務,我需要計算120 * 120矩陣的特徵值和特徵向量。首先,我在Java(Apache Commons Math庫)和Python 2.7(Numpy庫)中以簡單的2乘2矩陣測試了這些計算。我有本徵矢量的值不匹配的問題,如示於下:使用Java和Python計算特徵向量的差異
//Java
import org.apache.commons.math3.linear.EigenDecomposition;
import org.apache.commons.math3.linear.MatrixUtils;
import org.apache.commons.math3.linear.RealMatrix;
public class TemporaryTest {
public static void main(String[] args) {
double[][] testArray = {{2, -1}, {1, 1}};
RealMatrix testMatrix = MatrixUtils.createRealMatrix(testArray);
EigenDecomposition decomposition = new EigenDecomposition (testMatrix);
System.out.println("eigenvector[0] = " + decomposition.getEigenvector(0));
System.out.println("eigenvector[1] = " + decomposition.getEigenvector(1));
}
特徵向量的輸出被示爲{real_value + imaginary_value; real_value + imaginary_value}:在Python
//Java output
eigenvector[0] = {-0.8660254038; 0}
eigenvector[1] = {0.5; 1}
相同的代碼,但使用numpy的庫:
# Python
import numpy as np
from numpy import linalg as LA
w, v = LA.eig(np.array([[2, -1], [1, 1]]))
print (v[:, 0])
print (v[:, 1])
在Python特徵向量的輸出被類似地示出,[真實+ IMAG真實+ IMAG]:
[ 0.35355339+0.61237244j 0.70710678+0.j ]
[ 0.35355339-0.61237244j 0.70710678-0.j ]
我擔心的是,爲什麼這些載體不同?有什麼我失蹤了嗎? Ty的任何形式的幫助或建議
Java輸出中的那些向量不是特徵向量。 'getEigenvector(i)'返回一個'RealVector',但是你的矩陣有複雜的特徵值和特徵向量。我不知道Apache Commons Math Library是如何表示複雜的特徵向量的;希望熟悉圖書館的人能夠幫助你將由Java函數返回的實際值轉化爲實際複雜的特徵向量。 –
我同意,但正如你所看到的,即使是真正的值不匹配: -/ – borgmater
Java的甚至不規範化.. – user3684792