Страница 1 из 2
Помогите с матрицами!!! ПЛИЗЗЗ
Добавлено: 20 окт 2006, 21:52
Djoin
Здравствуйте! Ни как не могу понять как мне получить определитель матрицы n-ного порядка. На форме StringGrid, edit, button,label. При помощи edit я указываю порядок матрицы, в StringGrid вбиваю матрицу.... а вот дальше я не знаю что мне делать. Помогите мне!!!!
(прошу не надо давать мне ссылки на другие сайты, потомучто я уже неделю копаюсь в интернете но так ничего толкового не нашел)
Добавлено: 20 окт 2006, 22:56
Duncon
Здесь были неоднократные обсуждения этой темы..
Добавлено: 20 окт 2006, 23:14
Djoin
Да... обсуждения я видел, но только обсуждения - реального работающего кода не было
Добавлено: 21 окт 2006, 21:01
YurikGL
Для начала нужно написать код, который позволяет получить определитель матрицы вообще. Это - задача первого курса и решать ее за вас никто не будет.
Потом, заменить входные данные в вышеуказанном коде на данные из StringGrid, повесить выполнение этого кода на Button а полученное значение выводить в Label
Добавлено: 23 окт 2006, 23:32
Djoin
Спасибо за ваш труд НО я знаю что....
YurikGL писал(а):Для начала нужно написать код, который позволяет получить определитель матрицы вообще. Это - задача первого курса и решать ее за вас никто не будет.
Потом, заменить входные данные в вышеуказанном коде на данные из StringGrid, повесить выполнение этого кода на Button а полученное значение выводить в Label
Как вы уже сказали нужно написать код... так вот этот самый код я и не могу написать формула есть а как ее записать программно не доходит. и данные я могу считать со StringGrid ну дайте хоть кусок кода, который реально работает а я уже подстрою чтобы он брал данные из StringGrid
Добавлено: 24 окт 2006, 08:51
somewhere
Я так понял, если есть формула и не доходит как ее записать, то матрица порядка n>4. Djoin, может тебе лучше свести ее к треугольному виду, а потом СЛУ без проблем решается! Если уж надо именно через определитель, то хоть формулу свою как-нить засвети. Лично я сейчас плохо ее помню. Во основном приходилось решать задачу с матрицей 256х256, здесь искать определитель вообще не имеет никакого смысла.
Добавлено: 25 окт 2006, 21:25
Djoin
Вот есть одна формула вычисления детерминанта матрицы n*n :
где
| A | и det(A) - так обозначается определитель,
kij i-я перестановка последовательности k1 = 1,..,n, то есть, k1j = j
p(i) количество перестановок пар номеров в последовательности k1j, необходимое для того, чтобы она превратилась в последовательность kij.
Добавлено: 31 окт 2006, 22:08
Mihij
Вот один из вариантов.
Пишу только процедуры.
Код: Выделить всё
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]
Добавлено: 01 ноя 2006, 18:39
Djoin
Всем огромное спасибо!!! Все получилось - с помощью Михаила Клыкова и моих усилий программа работает (вот только не знаю как...

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