Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

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

43 views
Skip to first unread message

Denis Mikhailov

unread,
Feb 14, 2002, 4:09:13 AM2/14/02
to
Здравствуйте Уважаемые,

Когда-то давно писал я что-то подобное на Паскале, теперь вот хочу написать
на Delphi
Но, к сожалению, начисто забыл алгоритм- мат. модель помню, а как это
объяснить машине что-то никак не припомню. Помогите, pls, кто еще помнит что
такое определитель.

С Уважением,
Денис Михайлов.


Oleg Shatalov

unread,
Feb 14, 2002, 9:58:22 AM2/14/02
to

Привет, Денис!


> Но, к сожалению, начисто забыл алгоритм- мат. модель помню, а как это
> объяснить машине что-то никак не припомню.

Проще всего посчитать определитель следующим путем:
1) Привести матрицу к треугольному виду (методом Гаусса)
2) Перемножить все элементы на главной диагонале - это и есть определитель
матрицы.

Олег.

Иван Щенников

unread,
Feb 15, 2002, 11:54:02 AM2/15/02
to
"Denis Mikhailov" <ri...@diona.ru> wrote in message
news:a4furc$300q$1...@josh.sovintel.ru...

> Здравствуйте Уважаемые,
>
> Когда-то давно писал я что-то подобное на Паскале, теперь вот хочу
написать
> на Delphi

Когда-то давно мой друг писал такое на паскале в домашней работе по
информатике. И восторгался тем, что матрицы произвольного порядка
замечательно грохаются в рекурсии. Есть какое-то правило (наверняка в любом
справочнике по математике), согласно которому определитель матрицы равен
определителю... блин как сказать-то не знаю ;)
Короче, есть у тебя матрица 4х4, представляем ее в виде 4х матриц 2х2, у
матриц 2х2 находим определители, получается новая матрица 2х2, составленная
из этих определителей. Ее определитель равен определителю исходной матрицы.
Hе бейте меня сильно, если напутал ;)


Wlad Kuzin

unread,
Feb 15, 2002, 3:36:58 PM2/15/02
to
Приветствую тебя, Иван!

Иван Щенников pазговаpивал с All :


ИЩ> есть у тебя матрица 4х4, представляем ее в виде 4х матриц 2х2, у
ИЩ> матриц 2х2 находим определители, получается новая матрица 2х2,
ИЩ> составленная из этих определителей. Ее определитель равен определителю
ИЩ> исходной матрицы. Hе бейте меня сильно, если напутал ;)

А если матрица 3х3? А если матрица 17х17?
А если это бесконечно большое простое число, которое не делится на 2?
Hе в этом дело.
Мат. алгоритм таков:
Сумма диагональных перемноженных элементов слева верха до права низа минус
сумма диагональных перемноженных элементов справа верха до лева низа.
Предусмотреть чтобы индекс при вылезании за пределы становился сначала. И все.
Hикаких тебе новых определителей.
Делается при помощи пары циклов и массива размерностью равной порядку матрицы.

До встречи,
Влад.

email: kw...@belgtts.ru ICQ#: 12511738 ... When you kill one - it's a tragedy.
When you kill 1000000 - it's a statistic.

Vladimir Antonik

unread,
Feb 16, 2002, 4:17:15 AM2/16/02
to
Hi, Wlad

> Мат. алгоритм таков:
> Сумма диагональных перемноженных элементов слева верха до права низа минус
> сумма диагональных перемноженных элементов справа верха до лева низа.
> Предусмотреть чтобы индекс при вылезании за пределы становился сначала. И
все.
> Hикаких тебе новых определителей.
> Делается при помощи пары циклов и массива размерностью равной порядку
матрицы.

Двойка, Вам, юноша.

Определителем n-го порядка матрицы называется сумма n! членов,
составленная следующим образом:
членами служат всевозможные произведения n элементов матрицы,
взятых по одному в каждой строке и в каждом столбце,
причем член берется со знаком плюс, если его индексы
составляют четную подстановку, и со знаком минус -
в противоположном случае.

Вот так.

Понятно, что пользоваться этим определением для сабжа
достаточно проблематично, поэтому на практике можно
поступить следующим образом (при условии, что матрица
невырождена!!).
Привести исходную матрицу к треугольному (или диагональному)
виду. Тогда произведение диагональных элементов полученной матрицы,
умноженное на (-1)^k, где k - количество перестановок
строк или столбцов при преобразовании матрицы, составит
искомое значение определителя.
Это общая схема алгоритма. Конечно, при реализации
возможны нюансы, связанные, например,
с обусловленностью матрицы и т.п.

Подробнее об этом - в учебниках по численным методам линейной алгебры.

С уважением, Владимир Антоник

--
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru

Dmitry Laushkin

unread,
Feb 19, 2002, 3:15:39 AM2/19/02
to
> Когда-то давно писал я что-то подобное на Паскале, теперь вот хочу
написать
> на Delphi
> Но, к сожалению, начисто забыл алгоритм- мат. модель помню, а как это
> объяснить машине что-то никак не припомню. Помогите, pls, кто еще помнит
что
> такое определитель.

В давние времена довелось писать библиотеку для работы с матрицами. Вот
оттуда функция расчета определителя, думаю разберешся.

function TMatrix.Det:extended;
var Size,C,R:integer; K:extended; Check:boolean;
begin
if fCols <> fRows then begin Result:=0.0; Exit end;
Result:=1.0; Size:=fCols;
while Size > 1 do begin
if abs(M[Size-1,Size-1]) <= 1e-100 then begin
Check:=false;
for R:=0 to Size-2 do if abs(M[Size-1,R]) > 1e-100 then begin
Check:=true; for C:=0 to Size-1 do M[C,Size-1]:=M[C,Size-1]+M[C,R]
end;
if not Check then begin Result:=0.0; Break end
end;
for R:=0 to Size-2 do begin
K:=-M[Size-1,R]/M[Size-1,Size-1];
for C:=0 to Size-1 do M[C,R]:=M[C,R]+K*M[C,Size-1]
end;
Result:=Result*M[Size-1,Size-1]; Dec(Size)
end;
Result:=Result*M[0,0]
end;

Если что не совсем понятно или еще что по матрицам нужно - пиши мылом.

Дмитрий Лаушкин


0 new messages