Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Расчет определителя матрицы
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Математика и Физика
Andbiz
Здравствуйте!
Столкнулся с программой расчета определителя матрицы.
Пример принципа расчета на примере матрицы 2*2.
Нажмите для просмотра прикрепленного файла
Попытался сопоставить этот метод с другими - не сопоставляется.
Если считать стандартным простым методом, то можно получить: 1*3-2*4=-5, что сходится с ранее полученным ответом.
Этот принцип расчета встретил в следующей программе.
Текст программы:
Код
   det:=1;
                         // начинаю прямой ход Гаусса
                         for k:=1 to n do
                         begin
                              det:=det*A[k,k]; //вычисление определителя
                              for j:=k+1 to n do
                              begin
                                   A[k,j]:=A[k,j]/A[k,k];
                              end;
                              for i:=k+1 to n do //начало вложенного цикла
                              for j:=k+1 to m do
                              begin
                              r:=A[k,j]*A[i,k];
                              A[i,j]:=A[i,j]-r;
                              end;
                         end;


В ней написано "прямой ход Гаусса". В методе Гаусса написано, что в прямом ходе производятся преобразования строк системы, приводя ее к ступенчатой или треугольной форме, т.е. матрица должна приводится к ступенчатому виду. В этом же случае я не совсем понимаю, как производится это преобразование. Кто-нибудь мог бы мне объяснить?
ataradov
Метод Гаусса

Приводите матрицу к треугольной, тогда определитель - это произведение чисел на главной диагонали.
Andbiz
Читал статью в Википедии.
Если свести текст программы в виде алгоритма, то получается вот такой:

Нажмите для просмотра прикрепленного файла

А как тут реализуется приведение матрицы к треугольному виду?
thermit
Для каждого столбца матрицы обнуляются элементы столбца ниже главной диагонали гауссовским исключением.
ataradov
Если удобнее представить в "школьной" формулировке, то из каждого уравнения системы выражается одна неизвестная и подставляется во все остальные уравнения. Последнее уравнение таким образом содержит только одну неизвестную, после вычисления ее значения происходит обратная подстановка (снизу вверх) этого значения во все остальные уравнения. Последний шаг для поиска определителя не нужен, только для решения СЛАУ.
Andbiz
Я это прекрасно понимаю. Есть к примеру 3 уравнение с 3 неизвестными. Сначала из верхнего выражается одна неизвестная переменная, затем она подставляется в два нижних. Затем из второго выражается третье неизвестная и подставляется в третье уравнение. Приводится подобные и снизу вверх происходит нахождение неизвестных. Я это прекрасно понимаю, но в этом случае происходит деление двух элементов матрицы и умножение результата деления на другой элемент и я не совсем понимаю, для чего это делается.

Цитата(Taradov Alexander @ Oct 7 2011, 18:45) *
Если удобнее представить в "школьной" формулировке, то из каждого уравнения системы выражается одна неизвестная и подставляется во все остальные уравнения. Последнее уравнение таким образом содержит только одну неизвестную, после вычисления ее значения происходит обратная подстановка (снизу вверх) этого значения во все остальные уравнения. Последний шаг для поиска определителя не нужен, только для решения СЛАУ.


P.S. Taradov Alexander, Вы обогнали с ответом. Я прекрасно помню школьный курс - я не совсем понимаю для чего деление и умножение в алгоритме и как при помощи него реализуется преобразование матрицы к треугольному виду.
ataradov
QUOTE (Andbiz @ Oct 7 2011, 18:56) *
Я это прекрасно понимаю, но в этом случае происходит деление двух элементов матрицы и умножение результата деления на другой элемент и я не совсем понимаю, для чего это делается.


Деление не 2-х элементов, а всей первой строки на a11, это и есть выделение переменной при a11 в свободном виде. В дальнейшем происходит "подстановка" во вторую строку.

PS: Запишите СЛАУ с этой матрицей и проследите за своими дейстивиясми при решении, они 1:1 повторят действия алгоритма.
thermit
a11 a12 a13
a21 a22 a23
a31 a32 a33


k=-a31/a21

a11 a12 a13
a21 a22 a23
a31+a21*k a32+a22*k a33+a23*k

a31+a21*k=0

Ну и тд
Andbiz
Цитата(Taradov Alexander @ Oct 7 2011, 19:03) *
Деление не 2-х элементов, а всей первой строки на a11, это и есть выделение переменной при a11 в свободном виде. В дальнейшем происходит "подстановка" во вторую строку.

PS: Запишите СЛАУ с этой матрицей и проследите за своими дейстивиясми при решении, они 1:1 повторят действия алгоритма.


А для чего запись A[i,j]:=A[i,j]-r; в конце цикла подстановки первой строки во все последующие?
ataradov
Это и есть подстановка. Именно это действие и должно занулить a21 в первом примере.
Andbiz
Вроде как разобрался.
Сначала детерминнант приняли равным 1. Затем начали цикл в котором определитель - произведение чисел на главной диагонали. В первом цикле поизводится деление первой строки на (k+1)-ый элемент, т.е. каждый раз в каждом цике определенная строка будет приниматься первой и для нее будет выделяться дробь (как показал thermit), которая будет подставляться в последующие уравнения во втором цикле.
Спасибо за помощь!
iiv
Цитата(Taradov Alexander @ Oct 7 2011, 17:57) *
Метод Гаусса

Приводите матрицу к треугольной, тогда определитель - это произведение чисел на главной диагонали.

А еще я бы добавил, что если Вам надо определитель считать в плавающей арифметике, то правильнее использовать метод Гаусса с полным выбором ведущего элемента, иначе вместо детерминанта Вы можете получить что-то совсем не похожее на него.
Andrey307
Можно в матлабе попробовать. Если совпадет, то там вроде есть ссылка на алгоритм расчета
AndrewN
QUOTE (Taradov Alexander @ Oct 7 2011, 16:57) *
Метод Гаусса

Приводите матрицу к треугольной, тогда определитель - это произведение чисел на главной диагонали.

Если экзекуция Гаусса переставила строки чётное число раз. Если нечётное - то минус произведение. Т.е. ещё нужно умножить на чётность перестановки строк в методе Гаусса.

При численном вычислении определителя (а это сумма эн-факториал произведений - по определению) результат, очень даже возможно, не влезет ни в какую ограниченную плавающую точку, поэтому в хороших подпрограммах вычисления определителей используют пару чисел в плавающей точке (а,b) для представления результата;, так, что |A| = a * 10^b.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.