如何使用MathNet Numerics将特征值作为矢量列出的数量级?

时间:2014-07-12 03:00:23

标签: c# vector eigenvector mathnet

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

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

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

当我尝试选择“Vector<double>”时,程序不会接受它。 有没有办法在Vector<double>

中获取矩阵的特征向量

2 个答案:

答案 0 :(得分:2)

如果您想使用Math.NET Numerics v3显式声明所有类型(而不是使用var,有选择地),则需要打开以下命名空间:

using System.Numerics
using MathNet.Numerics
using MathNet.Numerics.LinearAlgebra
using MathNet.Numerics.LinearAlgebra.Factorization

通常不需要打开特定于类型的命名空间,例如MathNet.Numerics.LinearAlgebra.Double,因为建议仅在引用矩阵或向量时使用通用Matrix<T>类型。这样就没有必要在他们之间施放(正如你在你的例子中所做的那样)。

然后示例如下:

Matrix<double> processedData = Matrix<double>.Build.Random(5,5);
Evd<double> eigen = processedData.Evd();
Vector<Complex> eigenvector = eigen.EigenValues;

答案 1 :(得分:1)

它不仅仅是同一类的EigenVectors属性吗?

public abstract class Evd<T> : ISolver<T>
where T : struct, IEquatable<T>, IFormattable
{
    /// <summary>
    /// Gets or sets the eigen values (λ) of matrix in ascending value.
    /// </summary>
    public Vector<Complex> EigenValues { get; private set; }

    /// <summary>
    /// Gets or sets eigenvectors.
    /// </summary>
    public Matrix<T> EigenVectors { get; private set; }
}

文档:http://numerics.mathdotnet.com/api/MathNet.Numerics.LinearAlgebra.Factorization/Evd%601.htm#EigenVectors

真实的NxN矩阵将具有多达N个(不一定是唯一的)实特征值和相应的特征向量,因此两者都需要以数组的形式返回; 复杂 NxN矩阵将具有与相应的特征向量完全相同的N(不一定是唯一的)特征值。