如何在不溢出的情况下计算大矩阵的行列式?

How do calculate a determinant of an large matrix without getting an overflow?

早上好!

我有一个 nxn 矩阵,其中 n 大到足以让我溢出。

我试图用数学方法解决这个问题,它适用于小 n,但现在我从指数中溢出。

为了更好地解释这里的代码:

    # create a quadratic Matrix matrix with shape 500x500
    matrix = [[ 1.03796037 -0.00898546 -0.00410423 ... -0.0453022   0.02608995
      -0.01146299]
     ...

     [-0.01146299 -0.04572196  0.07370042 ...  0.03203931  0.07298667
       0.98693473]]

    # calculate the mean of matrix
    mean = matrix.mean()
    # calculate n
    n = matrix.shape[0]
    # divide the mean from the matrix and calculate the determinant 
    determinant = np.linalg.det(matrix/mean)
    # use now det(c*M) = c^n*det(M)
    solution = mean**n*determinant

    >>>> inf

这个方法可以防止 np.linalg.det() 函数溢出,但是 mean**n 的幂计算会溢出,我不知道如何解决这个问题。意思是 btw 一个 float 和 n 一个 int 你能帮忙吗?请仅在 Python 或 numpy.

您可以通过调用“numpy.linalg.slogdet”而不是“numpy.linalg.det”来解决它。正如已经指出的 here

slogdet can be used whenever the det has led to overflowing/underflowing.

希望有用。