x x^t矩阵不是正定的,尽管应该是正面的

  • 本文关键字: numpy linear-algebra
  • 更新时间 :
  • 英文 :


我有一个矩阵M其中 M.shape = (679, 512)

我想找到 M M^T的特征向量和特征值,它的共价矩阵,在数学中应该是积极的。我发现他们使用:

import numpy as np
v, w = np.linalg.eig(np.matmul(M, M.T))

但是,由于某些原因,我将我的特征值/特征向量视为:

>>> v
array([ 1.17577206e+10+0.0000000e+00j,  1.05090161e+10+0.0000000e+00j,
        7.01098189e+09+0.0000000e+00j,  5.19451802e+09+0.0000000e+00j, 
    ...
    1.03985971e-12+0.0000000e+00j, -3.04194468e-13+6.9097571e-13j,
   -3.04194468e-13-6.9097571e-13j,  1.77363116e-13+0.0000000e+00j,
   -1.20885913e-13+0.0000000e+00j, -4.95627438e-14+0.0000000e+00j,
   -1.56456859e-16+0.0000000e+00j], dtype=complex64)

这怎么可能?M M^T不应该是积极的半明确的,只给出积极和真实的特征值吗?如何获得非真实特征值?

def is_positive_def(x):
    return np.all(np.linalg.eigvals(x) > 0)

" m m m^t不应该是正确定的,只给出积极而真实的特征值吗?是的,这在数学上是正确的。实际上,您可以使用numpy.linalg.eigh,而不是numpy.linalg.eig,它将返回真正的特征值和特征向量。

请注意,在几个地方,您错误地说明了这一说法,并说M m^t是积极的。那是不正确的。如果M具有形状(679,512(,则特征值的679-512 = 167为0;m m^t是半明确的,不是正定的。

在特征值的数值计算中,所有0的理论值将不会由eigeigh精确计算。第一个167特征值将是 close 零,而数值误差可能导致其中一些值为负。当我对随机M进行计算(具体来说,M = np.random.gamma(8, size=(679, 512))时,M m m^t的最大特征值约为2.227e7,最小的是-5.822e-100,最小的幅度为3.881e-13。请注意,5.822e---10/2.227E7(即np.abs(v.min()) / v.max()(约为2.61e-17,因此所有这些小特征值实际上相对于最大的特征值。。

相关内容

  • 没有找到相关文章

最新更新