特征向量歧义-如何执行特定的符号约定

时间:2018-10-23 22:01:58

标签: python matrix eigenvector

我正在用Python编写一个程序,该程序使用numpy.linalg.eigh对角线化厄米矩阵(哈密顿矩阵)。我对角化了许多这样的矩阵,并将所得的特征向量矩阵用于某些其他矩阵的多重unit变换。 “特征向量矩阵”是指一个矩阵,其列是原始矩阵的特征向量。

不幸的是,由于特征向量符号的含糊性,我遇到了一个潜在的问题(即,特征向量仅被定义为一个常数,而归一化仍不能固定特征向量的符号)。具体来说,我要计算的结果取决于连续unit变换产生的干涉图样。因此,我预计符号歧义将成为问题。

我的问题:

对特征向量实施特定符号约定的最佳方法(或行业标准)是什么?

我已经想到/遇到以下问题:

  1. 确保每个特征向量的第一系数为正。问题:其中一些系数为零或数值误差为零。
  2. 确保最大幅度的第一个系数为正。问题:某些特征向量在数值误差内具有相同大小的多个系数。然后,数值误差“随机地”确定哪个系数“更大”。
  3. 确保系数之和为正。问题:一些系数的大小相等但符号相反,从而使符号仍然不明确/由数值误差确定。 (我也看到这种方法的其他问题)。
  4. 在特征向量上添加一个小数(例如1E-16),确保第一个系数为正,然后减去该数。问题:也许对我来说并不重要,但这使我不安,因为我不确定它可能导致什么问题。
  5. (受EigenshuffleSign correction in SVD and PCA启发)选取参考向量,并确保每个特征向量与该向量的点积均为正。问题:如何选择向量?随机向量增加了特征向量不正交的可能性(在数值误差范围内),但不能保证。或者,可以选择一组随机向量(均具有正系数)以增加向量空间“跨度”足够好的可能性。

我试图找到什么是“标准”约定,但是我很难找到特别有用的任何东西,尤其是在Python中。 SVD(Sign correction in SVD and PCA)有一个解决方案,但是我没有任何可比较的数据向量。有Eigenshuffle(适用于Matlab,我正在使用Python),但是我的矩阵通常不是彼此的连续小修改(尽管有些修改)。

我倾向于解决方案5,因为它看起来很直观;我们只是确保所有特征向量都在同一个高维“象限”中。另外,假设系统的维数不太大(我的系统的维数为9),则具有两个或三个具有正系数的随机参考向量应该几乎可以以很高的概率覆盖所有特征向量。

0 个答案:

没有答案