类 ComplexEigenDecomposition
- 直接已知子类:
-
OrderedComplexEigenDecomposition
复特征分解与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-
字段概要
修饰符和类型字段说明static final double
默认阈值,低于该阈值将被视为相等的特征向量。static final double
内部使用的epsilon的默认值。static final double
用于最终AV=VD检查的内部使用的epsilon标准。 -
构造器概要
构造器说明ComplexEigenDecomposition
(RealMatrix matrix) 分解的构造函数。ComplexEigenDecomposition
(RealMatrix matrix, double eigenVectorsEquality, double epsilon, double epsilonAVVDCheck) 分解的构造函数。 -
方法概要
修饰符和类型方法说明protected void
checkDefinition
(RealMatrix matrix) 在运行时检查分解的定义。protected void
findEigenValues
(RealMatrix matrix) 使用Schur变换计算特征值。protected void
findEigenVectors
(FieldMatrix<Complex> matrix) 使用逆幂法计算特征向量。getD()
获取D。double
计算行列式。Complex[]
获取特征值。getEigenvector
(int i) 获取特征向量。getV()
获取V。getVT()
获取VT。boolean
确认是否存在复特征值。protected void
从矩阵重置特征值和特征向量。
-
字段详细资料
-
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
分解的构造函数。此构造函数使用默认值
DEFAULT_EIGENVECTORS_EQUALITY
,DEFAULT_EPSILON
和DEFAULT_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
获取特征值。- 返回:
- 特征值。
-
getEigenvector
获取特征向量。- 参数:
-
i
- 哪个特征向量。 - 返回:
- 特征向量。
-
matricesToEigenArrays
protected void matricesToEigenArrays()从矩阵重置特征值和特征向量。此方法旨在由子类(主要是
OrderedComplexEigenDecomposition
)调用,重新排序矩阵元素。它从D和V矩阵重新构建特征值和特征向量数组。- 从以下版本开始:
- 2.1
-
hasComplexEigenvalues
public boolean hasComplexEigenvalues()确认是否存在复特征值。- 返回:
- 如果存在复特征值,则为true。
-
getDeterminant
public double getDeterminant()计算行列式。- 返回:
- 行列式。
-
getV
获取V。- 返回:
- V。
-
getD
获取D。- 返回:
- D。
-
getVT
获取VT。- 返回:
- VT。
-
findEigenValues
使用Schur变换计算特征值。- 参数:
-
matrix
- 用于计算特征值的实矩阵。
-
findEigenVectors
使用逆幂法计算特征向量。- 参数:
-
matrix
- 用于计算特征向量的实矩阵。
-
checkDefinition
在运行时检查分解的定义。- 参数:
-
matrix
- 要分解的矩阵。
-