Каков наилучший алгоритм для определения определителя матрицы? - PullRequest
25 голосов
/ 12 марта 2010

Может кто-нибудь сказать мне, какой алгоритм лучше всего найти значение определителя матрицы размера N x N?

Ответы [ 4 ]

27 голосов
/ 12 марта 2010

Здесь - обширное обсуждение.

Есть много алгоритмов.

Самый простой - взять разложение LU . Тогда с

 det M = det LU = det L * det U

и оба L и U являются треугольными, определитель является произведением диагональных элементов L и U. Это O(n^3). Существуют более эффективные алгоритмы.

9 голосов
/ 02 июля 2016

сокращение строк

Самый простой способ (и на самом деле неплохой) найти определитель матрицы nxn - это сокращение строк. Имея в виду несколько простых правил о детерминантах, мы можем решить в виде:

det ( A ) = α * det ( R ), где R - форма эшелона строк исходной матрицы A , а α - некоторый коэффициент.

Найти определитель матрицы в виде ряда эшелонов действительно легко; вы просто находите произведение диагонали. Решение определителя исходной матрицы A затем сводится к вычислению α, когда вы найдете форму ряда строк R .

Что нужно знать

Что такое форма эшелона рядов?

См. ссылку для простого определения
Примечание: Не для всех определений требуются 1 для ведущих записей, и в этом алгоритме нет необходимости.

Вы можете найти R, используя элементарные операции со строками

Обмен строк, добавление кратных для другой строки и т. Д.

Вы получаете α из свойств операций со строками для определителей

  1. Если B - это матрица, полученная умножением строки A на некоторую ненулевую константу ß, то

    дет ( B ) = ß * дет ( A )

    • Другими словами, вы можете по существу «выделить» константу из строки, просто вытянув ее перед определителем.
  2. Если B - это матрица, полученная путем замены двух строк на A , то

    дет ( B ) = -дет ( A )

    • Если вы поменяете местами, переверните знак.
  3. Если B - это матрица, полученная путем добавления кратного числа одной строки к другой строке в A , то

    det ( B ) = det ( A )

    • Определитель не изменяется.

Обратите внимание, что вы можете найти определитель, в большинстве случаев, только с правилом 3 (я думаю, что диагональ А не имеет нулей), а во всех случаях только с правилами 2 и 3. Правило 1 полезно для людей. делать математику на бумаге, пытаясь избежать дроби.

Пример

(я делаю ненужные шаги, чтобы более четко продемонстрировать каждое правило)
| 2 3 3 1 | <strong>A</strong>=| 0 4 3 -3 | | 2 -1 -1 -3 | | 0 -4 -3 2 | R<sub>2</sub> <-> R<sub>3</sub>, -α -> α (Rule 2) | 2 3 3 1 | -| 2 -1 -1 -3 | | 0 4 3 -3 | | 0 -4 -3 2 | R<sub>2</sub> - R<sub>1</sub> -> R<sub>2</sub> (Rule 3) | 2 3 3 1 | -| 0 -4 -4 -4 | | 0 4 3 -3 | | 0 -4 -3 2 | R<sub>2</sub>/(-4) -> R<sub>2</sub>, -4α -> α (Rule 1) | 2 3 3 1 | 4| 0 1 1 1 | | 0 4 3 -3 | | 0 -4 -3 2 | R<sub>3</sub> - 4R<sub>2</sub> -> R<sub>3</sub>, R<sub>4</sub> + 4R<sub>2</sub> -> R<sub>4</sub> (Rule 3, applied twice) | 2 3 3 1 | 4| 0 1 1 1 | | 0 0 -1 -7 | | 0 0 1 6 | R<sub>4</sub> + R<sub>3</sub> -> R<sub>3</sub> | 2 3 3 1 | 4| 0 1 1 1 | = 4 ( 2 * 1 * -1 * -1 ) = 8 | 0 0 -1 -7 | | 0 0 0 -1 |

7 голосов
/ 12 марта 2010

Если вы провели первоначальное исследование, вы, вероятно, обнаружили, что при N> = 4 вычисление матричного определителя становится довольно сложным. Что касается алгоритмов, я бы указал на статью Википедии о детерминантах матрицы , в частности, раздел «Алгоритмическая реализация».

Из моего собственного опыта вы можете легко найти алгоритм разложения LU или QR в существующих матричных библиотеках, таких как Alglib . Однако сам алгоритм не совсем прост.

0 голосов
/ 25 ноября 2015

Я не слишком знаком с факторизацией LU, но я знаю, что для того, чтобы получить L или U, вам нужно сделать исходную матрицу треугольной (либо верхнюю треугольную для U, либо нижнюю треугольную для L). Однако, как только вы получите матрицу в треугольной форме для некоторой nxn матрицы A и, предполагая, что единственная операция, которую использует ваш код, это Rb - k * Ra, вы можете просто решить det (A) = Π T (i, i) из i = 0 в n (то есть det (A) = T (0,0) x T (1,1) x ... x T (n, n)) для треугольной матрицы T. Проверьте эту ссылку, чтобы увидеть, о чем я говорю около. http://matrix.reshish.com/determinant.php

...