реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Расчет определителя матрицы
Andbiz
сообщение Oct 7 2011, 11:39
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 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;


В ней написано "прямой ход Гаусса". В методе Гаусса написано, что в прямом ходе производятся преобразования строк системы, приводя ее к ступенчатой или треугольной форме, т.е. матрица должна приводится к ступенчатому виду. В этом же случае я не совсем понимаю, как производится это преобразование. Кто-нибудь мог бы мне объяснить?
Go to the top of the page
 
+Quote Post
ataradov
сообщение Oct 7 2011, 12:57
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202



Метод Гаусса

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

Сообщение отредактировал Taradov Alexander - Oct 7 2011, 12:59
Go to the top of the page
 
+Quote Post
Andbiz
сообщение Oct 7 2011, 13:46
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 447
Регистрация: 16-11-08
Из: Украина, Донецк
Пользователь №: 41 684



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

Прикрепленное изображение


А как тут реализуется приведение матрицы к треугольному виду?
Go to the top of the page
 
+Quote Post
thermit
сообщение Oct 7 2011, 13:53
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730



Для каждого столбца матрицы обнуляются элементы столбца ниже главной диагонали гауссовским исключением.
Go to the top of the page
 
+Quote Post
ataradov
сообщение Oct 7 2011, 14:45
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202



Если удобнее представить в "школьной" формулировке, то из каждого уравнения системы выражается одна неизвестная и подставляется во все остальные уравнения. Последнее уравнение таким образом содержит только одну неизвестную, после вычисления ее значения происходит обратная подстановка (снизу вверх) этого значения во все остальные уравнения. Последний шаг для поиска определителя не нужен, только для решения СЛАУ.
Go to the top of the page
 
+Quote Post
Andbiz
сообщение Oct 7 2011, 14:56
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 447
Регистрация: 16-11-08
Из: Украина, Донецк
Пользователь №: 41 684



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

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


P.S. Taradov Alexander, Вы обогнали с ответом. Я прекрасно помню школьный курс - я не совсем понимаю для чего деление и умножение в алгоритме и как при помощи него реализуется преобразование матрицы к треугольному виду.
Go to the top of the page
 
+Quote Post
ataradov
сообщение Oct 7 2011, 15:03
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202



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


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

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

Сообщение отредактировал Taradov Alexander - Oct 7 2011, 15:06
Go to the top of the page
 
+Quote Post
thermit
сообщение Oct 7 2011, 15:05
Сообщение #8


Знающий
****

Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730



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

Ну и тд
Go to the top of the page
 
+Quote Post
Andbiz
сообщение Oct 7 2011, 15:19
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 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; в конце цикла подстановки первой строки во все последующие?
Go to the top of the page
 
+Quote Post
ataradov
сообщение Oct 7 2011, 15:28
Сообщение #10


Профессионал
*****

Группа: Участник
Сообщений: 1 014
Регистрация: 8-01-07
Из: San Jose, CA
Пользователь №: 24 202



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

Сообщение отредактировал Taradov Alexander - Oct 7 2011, 15:28
Go to the top of the page
 
+Quote Post
Andbiz
сообщение Oct 7 2011, 15:43
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 447
Регистрация: 16-11-08
Из: Украина, Донецк
Пользователь №: 41 684



Вроде как разобрался.
Сначала детерминнант приняли равным 1. Затем начали цикл в котором определитель - произведение чисел на главной диагонали. В первом цикле поизводится деление первой строки на (k+1)-ый элемент, т.е. каждый раз в каждом цике определенная строка будет приниматься первой и для нее будет выделяться дробь (как показал thermit), которая будет подставляться в последующие уравнения во втором цикле.
Спасибо за помощь!
Go to the top of the page
 
+Quote Post
iiv
сообщение Oct 9 2011, 18:06
Сообщение #12


вопрошающий
*****

Группа: Свой
Сообщений: 1 726
Регистрация: 24-01-11
Пользователь №: 62 436



Цитата(Taradov Alexander @ Oct 7 2011, 17:57) *
Метод Гаусса

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

А еще я бы добавил, что если Вам надо определитель считать в плавающей арифметике, то правильнее использовать метод Гаусса с полным выбором ведущего элемента, иначе вместо детерминанта Вы можете получить что-то совсем не похожее на него.
Go to the top of the page
 
+Quote Post
Andrey307
сообщение Nov 10 2011, 11:46
Сообщение #13





Группа: Новичок
Сообщений: 9
Регистрация: 20-04-09
Из: Санкт-Петербург
Пользователь №: 47 967



Можно в матлабе попробовать. Если совпадет, то там вроде есть ссылка на алгоритм расчета
Go to the top of the page
 
+Quote Post
AndrewN
сообщение Nov 23 2011, 22:58
Сообщение #14


Местный
***

Группа: Участник
Сообщений: 336
Регистрация: 7-03-07
Из: Петербург
Пользователь №: 25 961



QUOTE (Taradov Alexander @ Oct 7 2011, 16:57) *
Метод Гаусса

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

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

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

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 13th August 2025 - 21:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.01689 секунд с 7
ELECTRONIX ©2004-2016