在Java中计算稀疏矩阵的复特征向量

时间:2017-06-04 21:08:52

标签: eigenvalue eigenvector apache-commons-math jama mtj

我正在尝试计算潜在大且稀疏的非对称NxN矩阵(N> 10 ^ 6)的特征值和特征向量。我不需要所有这些,但也许是第一个。理想情况下,我想从Java中这样做,但如果需要,可以转移到C,C ++或Python。

我的矩阵可能具有复杂的特征值和特征向量。例如,请参阅this Wolfram Alpha sample的结果。

我找到了几种使用大量Java库的方法,并为它们编写了一些评估代码:

但我面临的问题是这些库没有返回(或者至少我没有办法得到)复值的特征向量。它们中的大多数确实返回复数值的本征,但不返回复杂的本征向量。它们通常以“实数矢量”或“实矩阵”的形式提供后者,其中列为每个特征向量。

事实上我需要复杂形式的特征值,如果有的话。

现在,我最近开始研究Spectra(C ++)seems to support my use case。但是我想首先询问并且可能会丢弃我方面的误解或者我可能已经从Java领域跳过的东西,因为我希望尽可能地继续使用单一平台/语言。

我有什么需要研究的吗?另外,如果我最终离开Java完成这项任务,我可以调查Spectra的其他任何替代方案吗?谢谢!

2 个答案:

答案 0 :(得分:0)

万一有人偶然发现了这一点,我终于采用了C ++方式,因为没有一个Java库提供了我需要的复杂特征向量。

我最终使用Spectra和Eigen实现了C ++所需的大部分内容。然后我使用SWIG构建了一系列本机包装类。

答案 1 :(得分:0)

对于将来遇到相同问题的每个人:有一个名为Jeigen的Java库可以做到这一点。实际上,它是Eigen C ++库的Java包装器,原始海报已经在他自己的答案中提到过。

您可以找到Jeigen here