Перейти к содержанию
    

Расчет определителя матрицы

Здравствуйте!

Столкнулся с программой расчета определителя матрицы.

Пример принципа расчета на примере матрицы 2*2.

post-41684-1317986973_thumb.jpg

Попытался сопоставить этот метод с другими - не сопоставляется.

Если считать стандартным простым методом, то можно получить: 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;

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Метод Гаусса

 

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

Изменено пользователем Taradov Alexander

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Читал статью в Википедии.

Если свести текст программы в виде алгоритма, то получается вот такой:

 

post-41684-1317995064_thumb.jpg

 

А как тут реализуется приведение матрицы к треугольному виду?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для каждого столбца матрицы обнуляются элементы столбца ниже главной диагонали гауссовским исключением.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я это прекрасно понимаю. Есть к примеру 3 уравнение с 3 неизвестными. Сначала из верхнего выражается одна неизвестная переменная, затем она подставляется в два нижних. Затем из второго выражается третье неизвестная и подставляется в третье уравнение. Приводится подобные и снизу вверх происходит нахождение неизвестных. Я это прекрасно понимаю, но в этом случае происходит деление двух элементов матрицы и умножение результата деления на другой элемент и я не совсем понимаю, для чего это делается.

 

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

 

P.S. Taradov Alexander, Вы обогнали с ответом. Я прекрасно помню школьный курс - я не совсем понимаю для чего деление и умножение в алгоритме и как при помощи него реализуется преобразование матрицы к треугольному виду.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

Изменено пользователем Taradov Alexander

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Ну и тд

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

А для чего запись A[i,j]:=A[i,j]-r; в конце цикла подстановки первой строки во все последующие?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это и есть подстановка. Именно это действие и должно занулить a21 в первом примере.

Изменено пользователем Taradov Alexander

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вроде как разобрался.

Сначала детерминнант приняли равным 1. Затем начали цикл в котором определитель - произведение чисел на главной диагонали. В первом цикле поизводится деление первой строки на (k+1)-ый элемент, т.е. каждый раз в каждом цике определенная строка будет приниматься первой и для нее будет выделяться дробь (как показал thermit), которая будет подставляться в последующие уравнения во втором цикле.

Спасибо за помощь!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Метод Гаусса

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно в матлабе попробовать. Если совпадет, то там вроде есть ссылка на алгоритм расчета

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Метод Гаусса

 

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

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

 

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...