类 ComplexEigenDecomposition

java.lang.Object
org.hipparchus.linear.ComplexEigenDecomposition
直接已知子类:
OrderedComplexEigenDecomposition

public class ComplexEigenDecomposition extends Object
给定矩阵A,它计算复特征分解AV = VD。

复特征分解与EigenDecompositionSymmetric不同,因为它将特征向量计算为复特征向量(如果适用)。

请注意,在复数情况下,即使构成V矩阵列的特征向量是独立的,你也不总是有\(V \times V^{T} = I\),甚至不一定是对角矩阵。一个例子是方阵 \[ A = \left(\begin{matrix} 3 & -2\\ 4 & -1 \end{matrix}\right) \] 它有两个共轭特征值 \(\lambda_1=1+2i\) 和 \(\lambda_2=1-2i\),对应的特征向量是 \(v_1^T = (1, 1-i)\) 和 \(v_2^T = (1, 1+i)\)。 \[ V\timesV^T = \left(\begin{matrix} 2 & 2\\ 2 & 0 \end{matrix}\right) \] 这不是单位矩阵。因此,尽管 \(A \times V = V \times D\),但 \(A \ne V \times D \time V^T\),这对于实特征分解是成立的。

还要注意,为了与Wolfram语言的特征向量保持一致,当特征值的几何重数小于代数重数时(因此常规特征向量矩阵应该是非方阵),我们添加零向量。通过这些额外的零向量,特征向量矩阵变为方阵。例如,对于方阵 \[ A = \left(\begin{matrix} 1 & 0 & 0\\ -2 & 1 & 0\\ 0 & 0 & 1 \end{matrix}\right) \] 其特征多项式是 \((1-\lambda)^3\),因此它有一个特征值 \(\lambda=1\),代数重数为3。然而,这个特征值只导致两个特征向量 \(v_1=(0, 1, 0)\) 和 \(v_2=(0, 0, 1)\),因此它的几何重数只有2,而不是3。因此我们添加第三个零向量 \(v_3=(0, 0, 0)\),就像Wolfram语言一样。

从Schur变换计算复特征值。基于特征值和逆幂法计算复特征向量。参见:https://en.wikipedia.org/wiki/Inverse_iteration https://en.wikiversity.org/wiki/Shifted_inverse_iteration http://www.robots.ox.ac.uk/~sjrob/Teaching/EngComp/ecl4.pdf http://www.math.ohiou.edu/courses/math3600/lecture16.pdf
  • 字段详细资料

    • DEFAULT_EIGENVECTORS_EQUALITY

      public static final double DEFAULT_EIGENVECTORS_EQUALITY
      默认阈值,低于该阈值将被视为相等的特征向量。
      另请参阅:
    • DEFAULT_EPSILON

      public static final double DEFAULT_EPSILON
      内部使用的epsilon的默认值。
      另请参阅:
    • DEFAULT_EPSILON_AV_VD_CHECK

      public static final double DEFAULT_EPSILON_AV_VD_CHECK
      用于最终AV=VD检查的内部使用的epsilon标准。
      另请参阅:
  • 构造器详细资料

    • ComplexEigenDecomposition

      public ComplexEigenDecomposition(RealMatrix matrix)
      分解的构造函数。

      此构造函数使用默认值DEFAULT_EIGENVECTORS_EQUALITYDEFAULT_EPSILONDEFAULT_EPSILON_AV_VD_CHECK

      参数:
      matrix - 实矩阵。
    • ComplexEigenDecomposition

      public ComplexEigenDecomposition(RealMatrix matrix, double eigenVectorsEquality, double epsilon, double epsilonAVVDCheck)
      分解的构造函数。

      用于确保使用逆幂法找到的L∞-归一化特征向量彼此不同的eigenVectorsEquality阈值。如果 \(min(|e_i-e_j|,|e_i+e_j|)\) 小于此阈值,则算法认为再次找到了已知向量,因此放弃它并尝试使用不同的起始向量进行新的逆幂法。此值应远大于用于收敛的epsilon

      参数:
      matrix - 实矩阵。
      eigenVectorsEquality - 低于此阈值将被视为相等的特征向量
      epsilon - 用于内部测试的Epsilon(例如奇异,特征值比率等)
      epsilonAVVDCheck - 用于最终AV=VD检查的Epsilon标准
      从以下版本开始:
      1.8
  • 方法详细资料

    • getEigenvalues

      public Complex[] getEigenvalues()
      获取特征值。
      返回:
      特征值。
    • getEigenvector

      public FieldVector<Complex> getEigenvector(int i)
      获取特征向量。
      参数:
      i - 哪个特征向量。
      返回:
      特征向量。
    • matricesToEigenArrays

      protected void matricesToEigenArrays()
      从矩阵重置特征值和特征向量。

      此方法旨在由子类(主要是OrderedComplexEigenDecomposition)调用,重新排序矩阵元素。它从D和V矩阵重新构建特征值和特征向量数组。

      从以下版本开始:
      2.1
    • hasComplexEigenvalues

      public boolean hasComplexEigenvalues()
      确认是否存在复特征值。
      返回:
      如果存在复特征值,则为true。
    • getDeterminant

      public double getDeterminant()
      计算行列式。
      返回:
      行列式。
    • getV

      public FieldMatrix<Complex> getV()
      获取V。
      返回:
      V。
    • getD

      public FieldMatrix<Complex> getD()
      获取D。
      返回:
      D。
    • getVT

      public FieldMatrix<Complex> getVT()
      获取VT。
      返回:
      VT。
    • findEigenValues

      protected void findEigenValues(RealMatrix matrix)
      使用Schur变换计算特征值。
      参数:
      matrix - 用于计算特征值的实矩阵。
    • findEigenVectors

      protected void findEigenVectors(FieldMatrix<Complex> matrix)
      使用逆幂法计算特征向量。
      参数:
      matrix - 用于计算特征向量的实矩阵。
    • checkDefinition

      protected void checkDefinition(RealMatrix matrix)
      在运行时检查分解的定义。
      参数:
      matrix - 要分解的矩阵。