Как рассчитать определитель большой матрицы без переполнения? - PullRequest
3 голосов
/ 10 ноября 2019

Доброе утро!

У меня есть 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 дает переполнение, и я не знаю, как решить эту проблему. Это означает, что поплавок и нет. Можете ли вы помочь здесь? Пожалуйста, только в Python или NumPy.

1 Ответ

3 голосов
/ 10 ноября 2019

Вы можете обратиться к нему, позвонив "numpy.linalg.slogdet" вместо "numpy.linalg.det". Как уже указывалось, здесь

slogdet может использоваться всякий раз, когда det приводит к переполнению / недостаточному заполнению.

Надеюсь, это сработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...