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

Computing the complex eigenvectors of a sparse matrix in Java

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

我的矩阵可能同时具有复杂的特征值和特征向量。例如,查看 this Wolfram Alpha sample.

的结果

我找到了几种使用多个 Java 库来完成此操作的方法,并为它们编写了一些评估代码:

但我面临的问题是这些库没有 return(或者至少我没有办法获得)复值特征向量。他们中的大多数人 return 复值特征值 ,但不是复数特征值 向量 。他们通常以 "vector of reals" 或 "real matrix" 的形式提供后者,每个特征向量都有列。

事实上,我确实需要复数形式的特征值(如果有的话)。

现在,我最近开始研究 Spectra (C++) which seems to support my use case。但是我想先问一下,也许可以消除我这边的误解,或者我可能从 Java 土地上跳过的事情,因为我想尽可能继续使用单个 platform/language。

有什么我应该调查的吗?另外,如果我最终放弃了 Java 来完成这项任务,我还可以研究 Spectra 的其他替代方案吗?谢谢!

以防万一有人偶然发现这个问题,我最终选择了 C++ 方式,因为 Java 库中的 none 提供了我需要的复杂特征向量。

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

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

你可以找到 Jeigen here