Помогите с матрицами!!! ПЛИЗЗЗ

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Djoin
Сообщения: 5
Зарегистрирован: 20 окт 2006, 21:29
Контактная информация:

Здравствуйте! Ни как не могу понять как мне получить определитель матрицы n-ного порядка. На форме StringGrid, edit, button,label. При помощи edit я указываю порядок матрицы, в StringGrid вбиваю матрицу.... а вот дальше я не знаю что мне делать. Помогите мне!!!!
(прошу не надо давать мне ссылки на другие сайты, потомучто я уже неделю копаюсь в интернете но так ничего толкового не нашел)
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Здесь были неоднократные обсуждения этой темы..
Djoin
Сообщения: 5
Зарегистрирован: 20 окт 2006, 21:29
Контактная информация:

Да... обсуждения я видел, но только обсуждения - реального работающего кода не было
YurikGL
Сообщения: 142
Зарегистрирован: 16 фев 2005, 21:54
Откуда: Уфа
Контактная информация:

Для начала нужно написать код, который позволяет получить определитель матрицы вообще. Это - задача первого курса и решать ее за вас никто не будет.
Потом, заменить входные данные в вышеуказанном коде на данные из StringGrid, повесить выполнение этого кода на Button а полученное значение выводить в Label
Djoin
Сообщения: 5
Зарегистрирован: 20 окт 2006, 21:29
Контактная информация:

Спасибо за ваш труд НО я знаю что....
YurikGL писал(а):Для начала нужно написать код, который позволяет получить определитель матрицы вообще. Это - задача первого курса и решать ее за вас никто не будет.
Потом, заменить входные данные в вышеуказанном коде на данные из StringGrid, повесить выполнение этого кода на Button а полученное значение выводить в Label

Как вы уже сказали нужно написать код... так вот этот самый код я и не могу написать формула есть а как ее записать программно не доходит. и данные я могу считать со StringGrid ну дайте хоть кусок кода, который реально работает а я уже подстрою чтобы он брал данные из StringGrid
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

Я так понял, если есть формула и не доходит как ее записать, то матрица порядка n>4. Djoin, может тебе лучше свести ее к треугольному виду, а потом СЛУ без проблем решается! Если уж надо именно через определитель, то хоть формулу свою как-нить засвети. Лично я сейчас плохо ее помню. Во основном приходилось решать задачу с матрицей 256х256, здесь искать определитель вообще не имеет никакого смысла.
It's a long way to the top if you wanna rock'n'roll
Djoin
Сообщения: 5
Зарегистрирован: 20 окт 2006, 21:29
Контактная информация:

Вот есть одна формула вычисления детерминанта матрицы n*n :
Изображение

где
| A | и det(A) - так обозначается определитель,
kij i-я перестановка последовательности k1 = 1,..,n, то есть, k1j = j
p(i) количество перестановок пар номеров в последовательности k1j, необходимое для того, чтобы она превратилась в последовательность kij.
Mihij
Сообщения: 55
Зарегистрирован: 03 май 2004, 11:58
Откуда: Санкт-Петербург
Контактная информация:

Вот один из вариантов.
Пишу только процедуры.

Код: Выделить всё

procedure movestrings(k,l:integer; var a: matrica; n:integer);
Процедура перестановки k-ой и l-ой строк в матрице а порядка n
var j : integer;
r : real;
begin
if (k<=n) and (l<=n)then
begin
for j := 1 to n do
begin
r := a[l,j];
a[l,j] :=a[k,j];
a[k,j] := r;
end;
end
end; movestrings
procedure prhod(var a:matrica; n : integer; var det: real);
Преобразование матрицы а, размерности n и вычисление определителя det - соответствует "прямому ходу" метода Гаусса
var i,j,k,l : integer;
b : matrica;
k1,k2,d:real;
begin
d:=1;
for k := 1 to n-1 do
begin
Если ведущий элемент ненулевой
if a[k,k]<>0 then
k1:=a[k,k]
else
В противном случае: перестановка строк,...
begin
l:=k;
repeat
l:=l+1
ищем первый ненулевой элемент данного столбца,
стоящий ниже диагонального,...
until (a[l,k]<>0) or (l=n+1);
если такой элемент найден,... 
if l<=n then
begin
...меняем строки местами,...
movestrings(k,l,a,n);
...определитедь умножается на -1,...
d:=d*(-1);
...определение значения ведущего элемента - k1,...
k1:=a[k,k];
(для пошаговго вывода преобразований прямого хода
снимите комментарий у следующих двух операторов)
write('Преобразование ',k);readln;wywod;
end
else
В противном случае такой элемент отсутствует,
что означает, что определитель системы равен нулю begin
det:=0;
выход из процедуры
exit;
end;
end;
if d<>0 then
Вычитание из каждой i-ой строки, лежащей ниже k-ой,...
for i := k+1 to n do
begin
k2:=a[i,k];
...вычитание k-ой строки, умноженной на коэффициент
for j := k to  n+1   do
a[i,j] := a[i,j]-a[k,j]*k2/k1;
end;цикл по i
d:=d*a[k,k]; readln;wywod; writeln('d=',d:5:2);
end;цикл по k
det:=d*a[n,n];
Определитель системы равен произведению диагональных элементов end;prhod


[/code]
Djoin
Сообщения: 5
Зарегистрирован: 20 окт 2006, 21:29
Контактная информация:

Всем огромное спасибо!!! Все получилось - с помощью Михаила Клыкова и моих усилий программа работает (вот только не знаю как... :) )) ) кому надо могу скинуть исходник....
rada
Сообщения: 2
Зарегистрирован: 23 ноя 2006, 19:05

Djoin писал(а):Всем огромное спасибо!!! Все получилось - с помощью Михаила Клыкова и моих усилий программа работает (вот только не знаю как... :))) ) кому надо могу скинуть исходник....
Очень нужен исходник.
Кто-нибудь знает e-mail Djoin? Как с ним можно вязаться?
Ответить