Программа вычисления определителя матрицы

Данный онлайн калькулятор вычисляет определитель матрицы. Дается подробное решение. Для вычисления определителя матрицы выбирайте порядок (размер) квадратной матрицы. Введите данные в ячейки. Выберите метод решения и нажмите на кнопку "Вычислить". Теоретическую часть смотрите на странице определитель матрицы.

Предупреждение

Инструкция ввода данных. Числа вводятся в виде целых чисел (примеры: 487, 5, -7623 и т.д.), десятичных чисел (напр. 67., 102.54 и т.д.) или дробей. Дробь нужно набирать в виде a/b, где a и b целые или десятичные числа. Примеры 45/5, 6.6/76.4, -7/6.7 и т.д.

Примеры вычисления определителя матрицы

Пример 1. Найти определитель матрицы

.

Для вычисления определителя матрицы, приведем матрицу к верхнему треугольному виду.

Выбираем самый большой по модулю ведущий элемент столбца 1. Для этого меняем местами строки 1 и 2. При этом меняется знак определителя на "−":

.

Исключим элементы 1-го столбца матрицы ниже главной диагонали. Для этого сложим строки 2,3 со строкой 1, умноженной на -1/78,-2/78 соответственно:

.

Исключим элементы 2-го столбца матрицы ниже главной диагонали. Для этого сложим строку 3 со строкой 2, умноженной на -5928/9048:

.

Мы привели матрицу к верхнему треугольному виду. Определитель матрицы равен произведению всех элементов главной диагонали (учитывая знак определителя):

.

Пример 2. Найти определитель матрицы A, разложением определителя по первой строке:

.

Для вычисления определителя матрицы методом разложения по первой строке, вычисляем произведение каждого элемента первой строки на соответствующее алгебраическое дополнение и суммируем полученные результаты:

Доброго времени суток, дорогие друзья! Я практически не затрагивал алгоритмы с матрицами в своем блоге, разве что показал параллельную реализацию умножения матриц с помощью OpenMP. И сейчас я буду это исправлять, и начну, пожалуй, с вычисления определителя квадратной матрицы. Программное нахождение определителя матрицы это не самая простая задача, именно поэтому для начала я реализую его рекурсивной функцией и только для квадратной матрицы. В тот момент, когда доберусь до матрицы любого размера, обязательно оставлю здесь ссылку.

Читайте также  Почему на ноутбуке работает только один наушник

Формулы вычисления определителя

Формулу через перестановки даже нет смысла рассматривать, потому что она включает в себя n! слагаемых. Вместо этого кратко глянем на значения определителя для матриц разного размера.

Для матриц размера 1х1

Значением определителя является единственный элемент матрицы.

Для матриц размера 2х2

Легко посчитать по формуле через перестановки. det = M[0][0]*M[1][1] — M[0][1]*M[1][0], где M — матрица. В реализации алгоритма эта формула будет использована в условии выхода из рекурсии.

Для матриц NxN

Для матриц такого размера уже придется уходить в рекурсию по формуле

Где M является дополнительным минором к элементу a1j. Минор в свою очередь это определитель матрицы без 1-ой строки и j-го столбца, вот здесь и появится рекурсия. Такая формула называется разложением по строке.

Еще один способ нахождения определителя заключается в том, чтобы методом Гаусса привести матрицу к ступенчатому виду(когда выше главной диагонали нули). Сделать это можно путем последовательного выполнения трех операций: сложение двух строк, поменять две строки местами, умножить строку на константу. После этих преобразований достаточно будет просто перемножить элементы на главной диагонали и получить определитель.

Формулы взяты со статьи на википедии, где описаны достаточно доступно и подробно. Кажется, бери да реализуй, но какую выбрать? Самым эффективным алгоритмом является метод Гаусса, приведение матрицы к ступенчатому виду составит всего O(n 3 ) операций, но он же и является самым тяжелым в реализации. Возможно я его когда нибудь напишу, ну а пока придется довольствоваться нахождением определителя разложением по строке.

Реализация поиска определителя разложением по строке

Для того, чтобы посчитать определитель «в лоб» по формуле, нам понадобиться функция удаления из матрицы i-ой строки и j-го столбца. Затем матрицу без строки и без столбца мы загоним в рекурсию и так до тех пор, пока размер матрицы на станет 2х2, это и будет условием выхода из рекурсии.

Читайте также  Реальная скорость интернета моего компьютера

Исходный код функции удаления строки и столбца из матрицы на C/C++

Теперь поговорим об основной функции вычисления определителя. На вход она принимает только саму матрицу и ее размер. Проверяем размер матрицы, если он больше чем 2х2 уходим считать в рекурсию. Сначала создаем матрицу равную текущей с вырезанной нулевой строкой(по ней раскладываем) и j-ым столбцом, затем в цикле накручиваем сумму из формулы в переменную det.

Важно! Не пренебрегайте очищением памяти от дополнительной матрицы на каждом шаге рекурсии, иначе будет серьезная утечка памяти в программе.

Исходный код функции рекурсивного нахождения определителя матрицы на C/C++

Заключение

Такая реализация будет очень долго считать определитель у матриц размером больше 15, именно поэтому моим следующим шагом станет распараллеливание этого алгоритма с помощью директив OpenMP, интересно будет посмотреть на результат ускорения. А на сегодня у меня все, спасибо за внимание!

Задача Найти определитель квадратной матрицы.

Определитель (детерминант) квадратной матрицы — это число, которое ставится в соответствие матрице и вычисляется по ее элементам согласно следующим правилам.

  • Для матрицы первого порядка значение определителя равно единственному элементу этой матрицы:
  • Для матрицы второго порядка (2×2) значение определителя вычисляется как
  • Для матриц более высоких порядков (выше второго) m×m определитель можно вычислить применив рекурсивную формулу:

    где Mij — дополнительный минор квадратной матрицы — определитель матрицы, полученной из исходной вычеркиванием i-ой строки и j-ого столбца.
    Например, формула вычисления определителя матрицы 3-го порядка имеет вид

Реализация на C++

Результат выполнения

Ссылка на основную публикацию
Adblock
detector