0

我使用 MathNet Numerics 的 Evd<> 类来获取矩阵的特征向量,但结果证明它是类型的Vector<Complex>,我无法将其转换为Vector<double>,这是我的操作所需要的。

这就是我得到特征向量的方式:

DenseMatrix processedData = someData;
Evd<> eigen = processedData.evd();
Vector<Complex> eigenvector = (Vector<Complex>)eigen.EigenValues;

当我尝试强制转换为 ' Vector<double>' 时,程序不会接受它。有没有办法得到矩阵的特征向量Vector<double>

注意:我之前问过这个问题,但忽略了格式化我的代码,所以<double>没有出现,所以答案不是我想要的。

4

1 回答 1

0

一个 NxN 实矩阵必然有 N 个复特征值,如果 N 是奇数,则从 1 到 N 的任意值都是实数,如果 N 是偶数,则从 0 到 N 是实数。

要创建一个(可能更小)Vector<double>仅包含来自复特征值向量的实特征值:

  1. 枚举向量中的每个复杂项
  2. 通过检查IsReal属性过滤掉所有不真实的。
  3. 对于那些是真实的,提取真实的组件,
  4. DenseVector<double>从您的可枚举构造一个新的。

(或者,您可以只在与真实特征值相对应的位置创建具有SparseVector<double>相同维度的值,如果这样更有用的话。我不确定您想对特征值做什么。)

于 2014-07-13T06:12:28.043 回答