类 EigenDecompositionSymmetric

java.lang.Object
org.hipparchus.linear.EigenDecompositionSymmetric

public class EigenDecompositionSymmetric extends Object
计算对称实矩阵的特征分解。

矩阵A的特征分解是一组两个矩阵:\(V\) 和 \(D\),使得 \(A V = V D\),其中 $\(A\)$、\(V\) 和 \(D\) 都是 \(m \times m\) 矩阵。

这个类在精神上类似于JAMA库中的EigenvalueDecomposition类,但有以下变化:

  • 添加了一个getVt方法,
  • 添加了一个getEigenvalue方法来获取单个特征值,
  • 添加了一个getEigenvector方法来获取单个特征向量,
  • 添加了一个getDeterminant方法,
  • 添加了一个getSolver方法。

由于 \(A\) 是对称的,因此 \(A = V D V^T\),其中特征值矩阵 \(D\) 是对角线矩阵,特征向量矩阵 \(V\) 是正交的,即 A = V.multiply(D.multiply(V.transpose())),且 V.multiply(V.transpose()) 等于单位矩阵。

矩阵 \(V\) 的列代表特征向量,即 \(A V = V D\),即 A.multiply(V) 等于 V.multiply(D)。矩阵 \(V\) 可能病态,甚至是奇异的,因此方程 \(A = V D V^{-1}\) 的有效性取决于 \(V\) 的条件。

该实现基于A. Drubrulle、R.S. Martin和J.H. Wilkinson在Wilksinson和Reinsch(1971年)的论文“隐式QL算法”中的论文,手册自动计算,卷2,线性代数,Springer-Verlag,纽约。
另请参阅:
  • 字段详细资料

    • DEFAULT_EPSILON

      public static final double DEFAULT_EPSILON
      用于内部epsilon的默认epsilon值
      另请参阅:
  • 构造器详细资料

    • EigenDecompositionSymmetric

      public EigenDecompositionSymmetric(RealMatrix matrix)
      计算给定对称实矩阵的特征分解。

      此构造函数使用默认epsilon和递减顺序的特征值。

      参数:
      matrix - 要分解的矩阵。
      抛出:
      MathIllegalStateException - 如果算法无法收敛。
      MathRuntimeException - 如果对一般矩阵的分解导致具有零范数的矩阵
    • EigenDecompositionSymmetric

      public EigenDecompositionSymmetric(RealMatrix matrix, double epsilon, boolean decreasing) throws MathRuntimeException
      计算给定实矩阵的特征分解。

      支持自3.1以来的一般矩阵的分解。

      参数:
      matrix - 要分解的矩阵。
      epsilon - 用于内部测试的epsilon(例如奇异、特征值比率等)。
      decreasing - 如果为true,则特征值将按递减顺序排序
      抛出:
      MathIllegalStateException - 如果算法无法收敛。
      MathRuntimeException - 如果对一般矩阵的分解导致具有零范数的矩阵
      从以下版本开始:
      3.0
    • EigenDecompositionSymmetric

      public EigenDecompositionSymmetric(double[] main, double[] secondary)
      计算对称三对角矩阵的特征分解。

      假定Householder矩阵为单位矩阵。

      此构造函数使用默认epsilon和递减顺序的特征值。

      参数:
      main - 对称三对角形式的主对角线。
      secondary - 三对角形式的次对角线。
      抛出:
      MathIllegalStateException - 如果算法无法收敛。
    • EigenDecompositionSymmetric

      public EigenDecompositionSymmetric(double[] main, double[] secondary, double epsilon, boolean decreasing)
      计算对称三对角矩阵的特征分解。假定Householder矩阵为单位矩阵。
      参数:
      main - 对称三对角形式的主对角线。
      secondary - 三对角形式的次对角线。
      epsilon - 用于内部测试的epsilon(例如奇异、特征值比率等)。
      decreasing - 如果为true,则特征值将按递减顺序排序
      抛出:
      MathIllegalStateException - 如果算法无法收敛。
      从以下版本开始:
      3.0
  • 方法详细资料

    • getV

      public RealMatrix getV()
      获取分解的矩阵V。V是正交矩阵,即其转置也是其逆。V的列是原始矩阵的特征向量。不对V的列形成的系统轴的方向做任何假设(例如,在3维空间中,V可以形成左手系或右手系)。
      返回:
      V矩阵。
    • getD

      public DiagonalMatrix getD()
      获取分解的对角矩阵D。D是对角矩阵。
      返回:
      D矩阵。
      另请参阅:
    • getEpsilon

      public double getEpsilon()
      获取用于内部测试(例如奇异、特征值比率等)的epsilon值。
      返回:
      epsilon值。
    • getVT

      public RealMatrix getVT()
      获取分解的矩阵V的转置。V是正交矩阵,即其转置也是其逆。V的列是原始矩阵的特征向量。不对V的列形成的系统轴的方向做任何假设(例如,在3维空间中,V可以形成左手系或右手系)。
      返回:
      V矩阵的转置。
    • getEigenvalues

      public double[] getEigenvalues()
      获取原始矩阵的特征值的副本。
      返回:
      原始矩阵的特征值的副本。
      另请参阅:
    • getEigenvalue

      public double getEigenvalue(int i)
      返回原始矩阵的第i个特征向量的副本。
      参数:
      i - 特征值的索引(从0开始计数)
      返回:
      原始矩阵的第i个特征值的实部。
      另请参阅:
    • getEigenvector

      public RealVector getEigenvector(int i)
      获取原始矩阵的第i个特征向量的副本。

      请注意,如果第i个是复数,则此方法将抛出异常。

      参数:
      i - 特征向量的索引(从0开始计数)。
      返回:
      原始矩阵的第i个特征向量的副本。
      另请参阅:
    • getDeterminant

      public double getDeterminant()
      计算矩阵的行列式。
      返回:
      矩阵的行列式。
    • getSquareRoot

      public RealMatrix getSquareRoot()
      计算矩阵的平方根。此实现假定矩阵是正定的。
      返回:
      矩阵的平方根。
      抛出:
      MathRuntimeException - 如果矩阵不对称或不是正定的。
    • getSolver

      public DecompositionSolver getSolver()
      获取用于在精确线性意义下找到\(A \times X = B\)解的求解器。
      返回:
      一个求解器