|
|
  |
Расчет определителя матрицы |
|
|
|
Oct 7 2011, 11:39
|
Местный
  
Группа: Свой
Сообщений: 447
Регистрация: 16-11-08
Из: Украина, Донецк
Пользователь №: 41 684

|
Здравствуйте! Столкнулся с программой расчета определителя матрицы. Пример принципа расчета на примере матрицы 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; В ней написано "прямой ход Гаусса". В методе Гаусса написано, что в прямом ходе производятся преобразования строк системы, приводя ее к ступенчатой или треугольной форме, т.е. матрица должна приводится к ступенчатому виду. В этом же случае я не совсем понимаю, как производится это преобразование. Кто-нибудь мог бы мне объяснить?
|
|
|
|
|
Oct 7 2011, 13:46
|
Местный
  
Группа: Свой
Сообщений: 447
Регистрация: 16-11-08
Из: Украина, Донецк
Пользователь №: 41 684

|
Читал статью в Википедии. Если свести текст программы в виде алгоритма, то получается вот такой:
А как тут реализуется приведение матрицы к треугольному виду?
|
|
|
|
|
Oct 7 2011, 14:56
|
Местный
  
Группа: Свой
Сообщений: 447
Регистрация: 16-11-08
Из: Украина, Донецк
Пользователь №: 41 684

|
Я это прекрасно понимаю. Есть к примеру 3 уравнение с 3 неизвестными. Сначала из верхнего выражается одна неизвестная переменная, затем она подставляется в два нижних. Затем из второго выражается третье неизвестная и подставляется в третье уравнение. Приводится подобные и снизу вверх происходит нахождение неизвестных. Я это прекрасно понимаю, но в этом случае происходит деление двух элементов матрицы и умножение результата деления на другой элемент и я не совсем понимаю, для чего это делается. Цитата(Taradov Alexander @ Oct 7 2011, 18:45)  Если удобнее представить в "школьной" формулировке, то из каждого уравнения системы выражается одна неизвестная и подставляется во все остальные уравнения. Последнее уравнение таким образом содержит только одну неизвестную, после вычисления ее значения происходит обратная подстановка (снизу вверх) этого значения во все остальные уравнения. Последний шаг для поиска определителя не нужен, только для решения СЛАУ. P.S. Taradov Alexander, Вы обогнали с ответом. Я прекрасно помню школьный курс - я не совсем понимаю для чего деление и умножение в алгоритме и как при помощи него реализуется преобразование матрицы к треугольному виду.
|
|
|
|
|
Oct 7 2011, 15:19
|
Местный
  
Группа: Свой
Сообщений: 447
Регистрация: 16-11-08
Из: Украина, Донецк
Пользователь №: 41 684

|
Цитата(Taradov Alexander @ Oct 7 2011, 19:03)  Деление не 2-х элементов, а всей первой строки на a11, это и есть выделение переменной при a11 в свободном виде. В дальнейшем происходит "подстановка" во вторую строку.
PS: Запишите СЛАУ с этой матрицей и проследите за своими дейстивиясми при решении, они 1:1 повторят действия алгоритма. А для чего запись A[i,j]:=A[i,j]-r; в конце цикла подстановки первой строки во все последующие?
|
|
|
|
|
Nov 10 2011, 11:46
|
Группа: Новичок
Сообщений: 9
Регистрация: 20-04-09
Из: Санкт-Петербург
Пользователь №: 47 967

|
Можно в матлабе попробовать. Если совпадет, то там вроде есть ссылка на алгоритм расчета
|
|
|
|
|
Nov 23 2011, 22:58
|
Местный
  
Группа: Участник
Сообщений: 336
Регистрация: 7-03-07
Из: Петербург
Пользователь №: 25 961

|
QUOTE (Taradov Alexander @ Oct 7 2011, 16:57)  Метод ГауссаПриводите матрицу к треугольной, тогда определитель - это произведение чисел на главной диагонали. Если экзекуция Гаусса переставила строки чётное число раз. Если нечётное - то минус произведение. Т.е. ещё нужно умножить на чётность перестановки строк в методе Гаусса. При численном вычислении определителя (а это сумма эн-факториал произведений - по определению) результат, очень даже возможно, не влезет ни в какую ограниченную плавающую точку, поэтому в хороших подпрограммах вычисления определителей используют пару чисел в плавающей точке (а,b) для представления результата;, так, что |A| = a * 10^b.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|