Вопрос математикам. Алгоритм вычисления детерминанта матрицы n*n

 
Подскажите пожалуйста, где можно прочитать, или пример реализации подобных вычислений на С++, а лучше всего на MQL
 
Приводите матрицу к треугольному виду и легко находите детерминант перемножением членов на главной диагонали.
 
Спасибо! Алгоритм приведения матрицы к треугольному виду в гугле оказалось найти намного проще, чем вычисления детерминанта матрицы n*n
 

А велико ли n? Если не очень велико (до 10), помнится, лет 12 назад делал это рекурсией на PROLOG через миноры меньших порядков. Программка получилась очень компактной и изящной. Ну и в традиционных языках рекурсия дозволена. Правда, и кэш жрет она прилично.

 
Mathemat >>:

А велико ли n?

Да порядочное.. Думаю брать от 2000 до 10000

 
А какой смысл в вычислении определителя такой большой матрицы? Для решения системы? Ну тогда Rosh правильно посоветовал, конечно. Систему решать через формулу Крамера при таких n очень накладно получается.
 
Mathemat >>:
А какой смысл в вычислении определителя такой большой матрицы? Для решения системы? Ну тогда Rosh правильно посоветовал, конечно. Систему решать через формулу Крамера при таких n очень накладно получается.

Да, думал решать систему. Сегодня на лекциях рассказывали про интерполяционные полиномы, решил закодить для форекса.. Но тут же наткнулся на формулу интерполяционного многочлена Лагранджа, так что искать детерминант матрицы 10000*10000, слава богу, не придется =)

 
Fduch >>:
Спасибо! Алгоритм приведения матрицы к треугольному виду в гугле оказалось найти намного проще, чем вычисления детерминанта матрицы n*n

Здесь я выкладывал пример MQL кода для вычисления обратной матрицы на основе LU-разложения.

В прикрепленном файле lapack.mqh среди прочих функций есть функция, выполняющая LU-разложение

входной матрицы: dgetf().


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

При этом верхняя матрица U размещается в наддиагональной части и на диагонали, а нижняя L в поддиагональной части.

Диагональные элементы L считаются все равными 1 и не выводятся.


В результате, если перемножить элементы на главной диагонали матрицы, возвращаемой функцией dgetf(),

то Вы получите детерминант исходной матрицы.