Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.09.2008, 09:03   #1
Лубышев
Участник клуба
 
Аватар для Лубышев
 
Регистрация: 23.07.2007
Сообщений: 1,054
По умолчанию detA(n n)

Больше наверное математическая задача.
Как программно в Delphi
найти детерминант(определитель) матрицы размерность который n на n?
т.е. размерность матрицы пользователь сам вводит. Допустим обьект для хранения матрицы это "сеточка" или двумерный массив
Писано по д'Эльфийски
Лубышев вне форума Ответить с цитированием
Старый 27.09.2008, 09:35   #2
krypton
Пользователь
 
Аватар для krypton
 
Регистрация: 26.06.2007
Сообщений: 22
По умолчанию

Реализовать решение на Делфи очень просто, а делать нужно вот что...
Детерминант это = произведение главной диогонали - произведение второстепенной диогонали detA=a11*ann-a1n*an1

то есть для двумерного массива размерностью равной двум получаеться
detA=a11*a22-a12a21
Дорогу одолеет идущий.
http://www.krypton.ucoz.net
"Кто владеет информацией - тот владеет миром!"
Уинстон Черчиль (Натан Ротшильд, Френсис Бекон)
krypton вне форума Ответить с цитированием
Старый 27.09.2008, 10:10   #3
Лубышев
Участник клуба
 
Аватар для Лубышев
 
Регистрация: 23.07.2007
Сообщений: 1,054
По умолчанию

krypton , наивно так считать.
Это подходит только 2 на 2
А 3 на 3 уже надо пользоваться методом треугольника.
А если больше это уже сложно.
Там как то надо раскладыват матричу и находить детерминант спомощью рекурсий.
Но как это сделать я не знаю... не математик я.
Тогда так спрошу: Есть ли формула по нахождению детерминанта квадратной матрицы n-ной размерности?
Писано по д'Эльфийски
Лубышев вне форума Ответить с цитированием
Старый 27.09.2008, 10:13   #4
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Было уже не один раз...
Код:
const
  N_MAX = 100;

type
  TMatrix = array[1..N_MAX,1..N_MAX] of double;

{Вычисление определителя матрицы (рекурсия)}
function Determinant(n: integer; a: TMatrix): double;
var
  d: double;
  i: integer;
  b: array[1..N_MAX] of boolean;
procedure thread(p: double; e,i: integer);
var
  j,f,z: integer;
begin
  if odd(e) then z:=-1 else z:=1;
  if i > n then d:=d+p*z else
    if p <> 0 then begin
      f:=0;
      for j:=n downto 1 do
        if b[j] then f:=f+1 else begin
          b[j]:=true;
          thread(p*a[i,j],e+f,i+1);
          b[j]:=false;
        end;
    end;
end; {thread}
begin {Determinant}
  for i:=1 to n do b[i]:=false;
  d:=0; thread(1,0,1);
  Determinant:=d;
end; {Determinant}
_Dmitry вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц