Алгоритм математики для вычисления определителя матрицы n * n: - PullRequest
8 голосов
/ 28 января 2012

Я работаю над алгоритмом, который вычисляет определитель любой n * n матрицы, вот мой код:

 Laplace[matrix_List] := Module[{a = matrix, newmatrix, result = 0},
     If [Length[a] == 1, result = Total[Total[a]],
         For [i = 1, i <= Length[a], i++,
              newmatrix = Drop[a, {i}, {1}];
              result = result + (-1)^(i + 1) *
                       Total[Total[Take[a, {i}, {1}]]]*
                       Laplace[newmatrix]; 
         ]
     ]; result]

Это работает рекурсивно, это работает для матрицы 2 * 2 (я проверилс Det []), но он не работает для любой матрицы более высокой степени, чем 2!

Я бы хотел решить это решение самостоятельно - я хочу реализовать это сам, а не просто использовать Det- но я был бы признателен, если бы кто-нибудь мог объяснить, что не так с рекурсией здесь?

Ответы [ 2 ]

1 голос
/ 17 июля 2012

Вы не должны вычислять определитель рекурсивным способом, это занимает много времени. Самый простой способ - взять первый столбец и посмотреть, есть ли элемент, отличный от 0. Если нет, то определитель равен 0. В противном случае возьмите этот элемент и для каждой строки в матрице, отличной от выбранной. Элемент вычитает строку выбранного элемента, умноженную на симметрию первого элемента текущей строки. Это вычитание должно оставить строку со значением 0 в качестве первого элемента. Затем вы можете удалить первый столбец и строку выбранного элемента и умножить определитель порядка n-1 на (-1) ^ (line_index + column_index) * selected_element.

0 голосов
/ 14 февраля 2017
    mat = {{a11,a12,a13,a14]}, {a21,a22,a23,a24}, {a31,a32,a33,a34}, {a41,a42,a43,a44}};
det = Sum[Signature[p[[j]]]*
    Product[mat[[i, p[[j, i]]]], {i, 1, Length[mat]}], {j, 1, 4!}]

это даст правильный результат!det===Det[mat]

Удачи

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