Код для определения определителя с использованием Python без использования scipy.linalg.det - PullRequest
1 голос
/ 29 сентября 2010

Описание (это вопрос hwk):

Я не уверен, с чего начать. Я планирую использовать Расширение Лапласа, но я не уверен, как реализовать это для nxn матриц. Любая помощь будет оценена.

Примечание: у меня уже есть функция для генерации случайных матриц для матрицы nxn. Также сроки расчета не являются проблемой. Единственное, что у меня есть, - это как рассчитать определитель.

Пришлось удалить описание вопроса б / у из моей классовой политики.

Ответы [ 2 ]

3 голосов
/ 29 сентября 2010

Хорошо, вот подсказка.

  1. написать функцию для вычисления младших матриц. (подсказка, используйте ломтики)
  2. написать функцию для вычисления кофакторов (это должно вызвать первую функцию и определенную функцию)
  3. определенная функция вызывает функцию на втором шаге и складывает результаты вместе. (подсказка: используйте sum)

альт, у вас есть определитель.

Также не забывайте, что из-за того, как мы пишем списки в python, индексы меняются местами. Это если

M = [[1, 2, 3],
     [4, 5, 6],
     [7, 8, 9]]

тогда m 0,1 равно 2, а не 4, как это было бы в обычной записи. Вы можете думать об этом как о транспонировании или использовать zip

2 голосов
/ 05 октября 2016

Вот рекурсивный код Python для адъювантного метода для нахождения определителя матрицы.

def getMatrixMinor(m,i,j):
    return [row[:j] + row[j+1:] for row in (m[:i]+m[i+1:])]

def getMatrixDeternminant(m):
    #base case for 2x2 matrix
    if len(m) == 2:
        return m[0][0]*m[1][1]-m[0][1]*m[1][0]

    determinant = 0
    for c in range(len(m)):
        determinant += ((-1)**c)*m[0][c]*getMatrixDeternminant(getMatrixMinor(m,0,c))
    return determinant

Обратите внимание, что входные данные представляют собой массив массивов, представляющих матрицу nxn

...