Andbiz 0 7 октября, 2011 Опубликовано 7 октября, 2011 · Жалоба Здравствуйте! Столкнулся с программой расчета определителя матрицы. Пример принципа расчета на примере матрицы 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 0 7 октября, 2011 Опубликовано 7 октября, 2011 (изменено) · Жалоба Метод Гаусса Приводите матрицу к треугольной, тогда определитель - это произведение чисел на главной диагонали. Изменено 7 октября, 2011 пользователем Taradov Alexander Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andbiz 0 7 октября, 2011 Опубликовано 7 октября, 2011 · Жалоба Читал статью в Википедии. Если свести текст программы в виде алгоритма, то получается вот такой: А как тут реализуется приведение матрицы к треугольному виду? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
thermit 1 7 октября, 2011 Опубликовано 7 октября, 2011 · Жалоба Для каждого столбца матрицы обнуляются элементы столбца ниже главной диагонали гауссовским исключением. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ataradov 0 7 октября, 2011 Опубликовано 7 октября, 2011 · Жалоба Если удобнее представить в "школьной" формулировке, то из каждого уравнения системы выражается одна неизвестная и подставляется во все остальные уравнения. Последнее уравнение таким образом содержит только одну неизвестную, после вычисления ее значения происходит обратная подстановка (снизу вверх) этого значения во все остальные уравнения. Последний шаг для поиска определителя не нужен, только для решения СЛАУ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andbiz 0 7 октября, 2011 Опубликовано 7 октября, 2011 · Жалоба Я это прекрасно понимаю. Есть к примеру 3 уравнение с 3 неизвестными. Сначала из верхнего выражается одна неизвестная переменная, затем она подставляется в два нижних. Затем из второго выражается третье неизвестная и подставляется в третье уравнение. Приводится подобные и снизу вверх происходит нахождение неизвестных. Я это прекрасно понимаю, но в этом случае происходит деление двух элементов матрицы и умножение результата деления на другой элемент и я не совсем понимаю, для чего это делается. Если удобнее представить в "школьной" формулировке, то из каждого уравнения системы выражается одна неизвестная и подставляется во все остальные уравнения. Последнее уравнение таким образом содержит только одну неизвестную, после вычисления ее значения происходит обратная подстановка (снизу вверх) этого значения во все остальные уравнения. Последний шаг для поиска определителя не нужен, только для решения СЛАУ. P.S. Taradov Alexander, Вы обогнали с ответом. Я прекрасно помню школьный курс - я не совсем понимаю для чего деление и умножение в алгоритме и как при помощи него реализуется преобразование матрицы к треугольному виду. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ataradov 0 7 октября, 2011 Опубликовано 7 октября, 2011 (изменено) · Жалоба Я это прекрасно понимаю, но в этом случае происходит деление двух элементов матрицы и умножение результата деления на другой элемент и я не совсем понимаю, для чего это делается. Деление не 2-х элементов, а всей первой строки на a11, это и есть выделение переменной при a11 в свободном виде. В дальнейшем происходит "подстановка" во вторую строку. PS: Запишите СЛАУ с этой матрицей и проследите за своими дейстивиясми при решении, они 1:1 повторят действия алгоритма. Изменено 7 октября, 2011 пользователем Taradov Alexander Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
thermit 1 7 октября, 2011 Опубликовано 7 октября, 2011 · Жалоба 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 0 7 октября, 2011 Опубликовано 7 октября, 2011 · Жалоба Деление не 2-х элементов, а всей первой строки на a11, это и есть выделение переменной при a11 в свободном виде. В дальнейшем происходит "подстановка" во вторую строку. PS: Запишите СЛАУ с этой матрицей и проследите за своими дейстивиясми при решении, они 1:1 повторят действия алгоритма. А для чего запись A[i,j]:=A[i,j]-r; в конце цикла подстановки первой строки во все последующие? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ataradov 0 7 октября, 2011 Опубликовано 7 октября, 2011 (изменено) · Жалоба Это и есть подстановка. Именно это действие и должно занулить a21 в первом примере. Изменено 7 октября, 2011 пользователем Taradov Alexander Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andbiz 0 7 октября, 2011 Опубликовано 7 октября, 2011 · Жалоба Вроде как разобрался. Сначала детерминнант приняли равным 1. Затем начали цикл в котором определитель - произведение чисел на главной диагонали. В первом цикле поизводится деление первой строки на (k+1)-ый элемент, т.е. каждый раз в каждом цике определенная строка будет приниматься первой и для нее будет выделяться дробь (как показал thermit), которая будет подставляться в последующие уравнения во втором цикле. Спасибо за помощь! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iiv 29 9 октября, 2011 Опубликовано 9 октября, 2011 · Жалоба Метод Гаусса Приводите матрицу к треугольной, тогда определитель - это произведение чисел на главной диагонали. А еще я бы добавил, что если Вам надо определитель считать в плавающей арифметике, то правильнее использовать метод Гаусса с полным выбором ведущего элемента, иначе вместо детерминанта Вы можете получить что-то совсем не похожее на него. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
anderson307 0 10 ноября, 2011 Опубликовано 10 ноября, 2011 · Жалоба Можно в матлабе попробовать. Если совпадет, то там вроде есть ссылка на алгоритм расчета Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrewn 0 23 ноября, 2011 Опубликовано 23 ноября, 2011 · Жалоба Метод Гаусса Приводите матрицу к треугольной, тогда определитель - это произведение чисел на главной диагонали. Если экзекуция Гаусса переставила строки чётное число раз. Если нечётное - то минус произведение. Т.е. ещё нужно умножить на чётность перестановки строк в методе Гаусса. При численном вычислении определителя (а это сумма эн-факториал произведений - по определению) результат, очень даже возможно, не влезет ни в какую ограниченную плавающую точку, поэтому в хороших подпрограммах вычисления определителей используют пару чисел в плавающей точке (а,b) для представления результата;, так, что |A| = a * 10^b. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться