我试图找出对应于最小特征值的特征值和特征向量。我有一个矩阵A
(nx2),我计算了B = transpose(A) * a
。当我使用c ++本征函数compute()
并打印矩阵B
的特征值时,它显示如下:
(4.4, 0)
(72.1, 0)
打印输出的特征向量:
(-0.97, 0) (0.209, 0)
(-0.209, 0) (-0.97, 0)
我很困惑。我想,特征向量不能为零。那么,对于最小的特征值4.4,是相应的特征向量(-0.97, -0.209)
?
P.S。 - 我打印时
mysolution.eigenvalues()[0]
打印(4.4, 0)
。当我打印
mysolution.eigenvectors().col(0)
打印(-0.97, 0) (0.209, 0)
。这就是为什么我猜我可以假设对于特征值4.4,相应的特征向量是(-0.97, -0.209)
。
答案 0 :(得分:0)
我猜你是对的。
但是,没有一个特征值为空。您似乎正在处理复杂的数字。
是否可以选择复杂的浮点矩阵来进行计算?类似于MatrixX2cf
或MatrixX2cd
。
答案 1 :(得分:0)
每个方阵都有一组特征值。但即使矩阵本身只包含实数,特征值和-vectors也可能包含复数(例如,取(0 1; -1 0))
如果Eigen对你的矩阵结构一无所知(即它是对称/自伴的吗?它是正交/单一吗?)但仍想为你提供精确的特征值,唯一可以容纳所有可能的特征值的一般类型是复数。
因此,Eigen总是返回复数,其表示为a + bi的对(a,b)。如果矩阵是自伴的,则Eigen将仅返回实数,即SelfAdjointView用于访问矩阵。
如果你知道你的矩阵只有真正的特征值,那么你可以通过eigenvalue.real
提取实部,因为Eigen返回std::complex值。