给定一个半正定矩阵M,我想求它的最小非零特征值。在python中,这段代码看起来很诱人
import numpy as np
(w,v) = np.linalg.eigh(M)
minw = np.amin(w)
if (np.isclose(minw,0) and minw > 0):
print M, minw
下面是一个小输入矩阵的例子。在
^{pr2}$不幸的是,如果您尝试此操作,您将得到8.90238403828e-16
。一般来说,我不知道如何判断非常小的数字是否等于零。在
如何找到矩阵的最小非零特征值(并确保它真的是非零)?在
很可能是函数中的浮动问题。解决办法将取决于问题的严重程度。您可以尝试循环结果并使用函数(numpy)查找最小值:
,使两个值在一个公差内具有相似性。这不是一个干净的解决方案,但它通常被认为是一个安全的比较。至于“eigh”代码本身也许是收敛的问题,但我真的说不出来。在
你首先要检查矩阵的可逆性。一种方法是用
numpy.linalg.det
计算行列式。如果它不可逆,你可以将这个矩阵投影到与核正交的空间中。投影矩阵现在是可逆的,具有最小值的特征值是原始矩阵的最小非零特征值。在相关问题 更多 >
编程相关推荐