Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Eigen Java-Hipparchus特征向量与C++;特征向量有不同的结果 在比较java HiPARCHUS和C++特征向量的结果时,得到的结果不同。它们在大多数情况下被转置,还有两个元素不匹配。为什么库返回不同的值_Eigen_Eigenvector - Fatal编程技术网

Eigen Java-Hipparchus特征向量与C++;特征向量有不同的结果 在比较java HiPARCHUS和C++特征向量的结果时,得到的结果不同。它们在大多数情况下被转置,还有两个元素不匹配。为什么库返回不同的值

Eigen Java-Hipparchus特征向量与C++;特征向量有不同的结果 在比较java HiPARCHUS和C++特征向量的结果时,得到的结果不同。它们在大多数情况下被转置,还有两个元素不匹配。为什么库返回不同的值,eigen,eigenvector,Eigen,Eigenvector,爪哇河马 import org.hipparchus.linear.Array2DRowRealMatrix; import org.hipparchus.linear.EigenDecomposition; import org.hipparchus.linear.RealVector; ... double[][] example_matrix = { { 1, 2, 3 }, { 3, 2, 1 }, { 2, 1, 3 } }; RealMatrix P = new Arra

爪哇河马

import org.hipparchus.linear.Array2DRowRealMatrix;
import org.hipparchus.linear.EigenDecomposition;
import org.hipparchus.linear.RealVector;
...
double[][] example_matrix = {
  { 1, 2, 3 },
  { 3, 2, 1 },
  { 2, 1, 3 }
};
RealMatrix P = new Array2DRowRealMatrix(example_matrix , true);
EigenDecomposition eigenDecomposition = new EigenDecomposition(P);
RealVector[] eigenvectors = new RealVector[3];
for (int i = 0; i < 3; i++) {
  System.out.println(eigenDecomposition.getEigenvector(i));
}

// prints:
// {-0.7641805281; 0.6105725033; 0.2079166628}
// {0.5776342875; 0.5776342875; 0.5776342875}
// {-0.0235573892; -0.9140029063; 0.6060826741}
import org.hipparchus.linear.Array2droArralMatrix;
导入org.hipparchus.linear.EigenDecomposition;
导入org.hipparchus.linear.RealVector;
...
双[][]示例_矩阵={
{ 1, 2, 3 },
{ 3, 2, 1 },
{ 2, 1, 3 }
};
RealMatrix P=新的Array2DroArralMatrix(示例_矩阵,真);
特征分解特征分解=新特征分解(P);
RealVector[]特征向量=新的RealVector[3];
对于(int i=0;i<3;i++){
System.out.println(特征分解.获取特征向量(i));
}
//印刷品:
// {-0.7641805281; 0.6105725033; 0.2079166628}
// {0.5776342875; 0.5776342875; 0.5776342875}
// {-0.0235573892; -0.9140029063; 0.6060826741}
C++特征值

Eigen::Matrix<double, 3, 3> matrix;
matrix <<
    1, 2, 3,
    3, 2, 1,
    2, 1, 3;
Eigen::EigenSolver<Eigen::Matrix<double, 3, 3>> eigen_decomposition{ matrix };
eigen_decomposition.compute(matrix, true);
const auto eigen_vectors = eigen_decomposition.eigenvectors().real();
std::cout << eigen_vectors.matrix() << "\n"

// prints:
// -0.764181    0.57735 -0.0214754
//  0.610573    0.57735  -0.833224
//  0.207917    0.57735   0.552518
特征::矩阵;

矩阵虽然不完全相同,但两者的结果实际上都是正确的:

  • Java Hipparchus中,特征向量未标准化(向量范数不是1!):这在最后一个例子中尤其明显。如果你这样做,你会看到它对应于最后一列的结果特征给你。物理上,这并不重要,因为特征向量的任何标量倍数也是一个特征向量。相反,该库似乎对特征向量所跨越的矩阵进行了归一化处理:特征向量。行列式为1的矩阵保留体积,因此它看起来是一个合乎逻辑的选择

  • 另一方面,特征向量。绘制的矩阵将特征向量作为列提供给您。对我来说,将单个特征向量归一化似乎是一个同样合理的选择


在本征示例代码中,如果我改为调用
本征分解.pseudoeignvectors().real(),结果仍然是转置的,但与Hipparchus结果匹配。