Страница 1 из 2

Определитель матрицы NxN

Добавлено: 25 дек 2007, 20:18
6y6JIuk
Подскажите плиз какой из способов нахождения определителя матрицы наиболее прост для реализации на С#, либо киньте код. Заранее оч благодарен.

Re: Определитель матрицы NxN

Добавлено: 25 дек 2007, 20:54
Romeo
Я знаю только один способ вычисления определителя: тот самый которому учат в универе, а некторых, даже в школе :) Есть есть ещё какие-то способы, то звиняйте, не знаю таковых.

Известный мне способ - это разложение матрицы, скажем, по первой строке и вычисление n определителей (n-1) степени. Такой подход без проблем переводится на алгоритмический язык и реализовывается в любом языке, поддерживающем рекурсивные функции, не важно Pascal, это, С/С++/C# или ADA :)

Re: Определитель матрицы NxN

Добавлено: 28 дек 2007, 01:17
jeep
6y6JIuk писал(а):Подскажите плиз какой из способов нахождения определителя матрицы наиболее прост для реализации на С#, либо киньте код. Заранее оч благодарен.
Ну думаю тут нужно отталкиваться от определения определителя матрицы.
|A|=sum[sigma(i1,i2,...,in)*a(i1)*a(i2)*...*a(in)]
т.е. это по-сути сумма произведений, состоящих из элементов матрицы, которые берутся из каждой строки и каждого столбца без повторений. Знак произведения определяется функцией сигма, которая зависит от четности перестановок. Если перестановка четная, то берется плюс, если же нет - минус.

Re: Определитель матрицы NxN

Добавлено: 28 дек 2007, 02:37
Vladimir89
Я смарю Ромеро конкретно повезло с образованием... или он ботником был.
Несмотря на то что я это все изучал я уже нифига не помню :)

Re: Определитель матрицы NxN

Добавлено: 28 дек 2007, 15:37
Romeo
Не, не ботником :) Просто учёба легко даётся. Кстати, это уже оффтоп. Этим не следует злоупотреблять.

Re: Определитель матрицы NxN

Добавлено: 28 дек 2007, 15:41
somewhere
&quot писал(а):Я смарю Ромеро конкретно повезло с образованием... или он ботником был.
Несмотря на то что я это все изучал я уже нифига не помню
Не нужно помнить, нужно понимать. В универе в то время как многие учили, я гулял сдевками и бухал - и по вышке и матану никогда проблем не было - это вовсе не значит что я ботаник или еще кто-то. А по теме, нахождение определителя путем перестановок для больших матриц неприемлемо. Проще свести ее к треугольному виду и простейшим способом вычислить корни.

Re: Определитель матрицы NxN

Добавлено: 28 дек 2007, 15:55
Romeo
Нет, перестановки предложил jeep. Строго по определению определителя (т.е. использую перестановки) однозначно не эффективно. Я предложил разложение по строке. Можно, конечно, и к треугольному виду приводить, но там кучу проверок нужно делать дополнительных. Хотя, опять-таки, не смертельно. Приведение к треугольному, кстати, даже быстрее работать будет.

Re: Определитель матрицы NxN

Добавлено: 28 дек 2007, 16:01
somewhere
&quot писал(а): Приведение к треугольному, кстати, даже быстрее работать будет.
Это однозначно, сам замерял - пару лет назад нужно было считать определители матриц 256х256(!), а через перестановки :) это уже не шутка. Можно даже у себя код поискать, но он ассемблере, по теме не подойдет. Число проверок там очень мало, и строчных проходов тоже. Зато потом в итоге, получим определитель матрицы как произведение её диагональных элементов. Ну мне там надо было еще и сам вектор найти, но это уже другая история.

Re: Определитель матрицы NxN

Добавлено: 28 дек 2007, 19:19
jeep
Romeo писал(а):Нет, перестановки предложил jeep. Строго по определению определителя (т.е. использую перестановки) однозначно не эффективно. Я предложил разложение по строке. Можно, конечно, и к треугольному виду приводить, но там кучу проверок нужно делать дополнительных. Хотя, опять-таки, не смертельно. Приведение к треугольному, кстати, даже быстрее работать будет.
Если матрицы не большие можно и перестановки. В задаче не указан размер.
Если матрица большая, то можно и схему единственного деления использовать.
При такой схеме число умножений и делений для определителя матрицы порядка n равно (n-1)(n^2+n+3)/3.

Re: Определитель матрицы NxN

Добавлено: 28 дек 2007, 19:22
jeep
somewhere писал(а):Это однозначно, сам замерял - пару лет назад нужно было считать определители матриц 256х256(!), а через перестановки :) это уже не шутка. Можно даже у себя код поискать, но он ассемблере, по теме не подойдет. Число проверок там очень мало, и строчных проходов тоже. Зато потом в итоге, получим определитель матрицы как произведение её диагональных элементов. Ну мне там надо было еще и сам вектор найти, но это уже другая история.
А вы случаем полную проблему не пробовали решать?