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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.02.2009, 21:25   #1
Ирёнок
 
Регистрация: 20.02.2009
Сообщений: 6
По умолчанию Вычисление определителя матрицы

Есть квадратная матрица и есть формула по которой вычисляется определитель: сумма в цикле j от 1 дo n (число строк матрицы) - (-1)^j+1*a[i,j]*M[i,j], где M[i,j] это минор матрицы. Вся загвостка в миноре: как вырезать i-ую строку и j-ый столбец?
Ирёнок вне форума Ответить с цитированием
Старый 20.02.2009, 21:47   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Заполнение минора (паскаль):
Код:
M := a;
for k:=i to n-1 do
 for l:=1 to n do
  M[k,l] := M[k+1,l];
for l:=1 to n-1 do
 for k:=1 to n-1 do
  M[k,l] := M[k,l+1];
Для демонстрации:
Код:
uses crt;
const n=5;
var
a,M : array[1..n,1..n] of integer;
i,j,k,l : integer;
begin
clrscr;
for i:=1 to n do
 begin
 for j:=1 to n do
  begin
  a[i,j] := 10*i+j;
  write(a[i,j]:3);
  end;
  writeln;
 end;
writeln;

M := a;

k := 3; { номер вырезаемой строки }
l := 3; {номер вырезаемого столбца }
for i:=k to n-1 do
 for j:=1 to n do
  M[i,j] := M[i+1,j];

for j:=l to n-1 do
 for i:=1 to n-1 do
  M[i,j] := M[i,j+1];

for i:=1 to n-1 do
 begin
 for j:=1 to n-1 do
  write(M[i,j]:3);
 writeln;
 end;

readln;
end.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 20.02.2009, 21:50   #3
valetik
 
Регистрация: 28.12.2008
Сообщений: 9
По умолчанию

Я уже запамятовал как эти матрицы считать )) Если Вы мне "на пальцах" расскажете методику с примером, то решить, труда думаю не составит. Решение мне интуитивно понятно. Я вот только методику вычисления не до конца улавливаю ((
Пояснения... Хотите здесь? Хотите в личку... аська 623-22-803
valetik вне форума Ответить с цитированием
Старый 20.02.2009, 22:24   #4
SViRT
Заблокирован
 
Регистрация: 06.10.2008
Сообщений: 18
По умолчанию

Цитата:
Сообщение от Ирёнок Посмотреть сообщение
Есть квадратная матрица и есть формула по которой вычисляется определитель: сумма в цикле j от 1 дo n (число строк матрицы) - (-1)^j+1*a[i,j]*M[i,j], где M[i,j] это минор матрицы. Вся загвостка в миноре: как вырезать i-ую строку и j-ый столбец?
Тут очень просто берёшь +1 как выбранный массив 19 степени после чего после энного массива ты получаешь строки i j k матрицы проделашь как паскальный массив и задача решена!
SViRT вне форума Ответить с цитированием
Старый 20.02.2009, 22:33   #5
Ирёнок
 
Регистрация: 20.02.2009
Сообщений: 6
По умолчанию

Всем спасибо большое, я разобралась!
Ирёнок вне форума Ответить с цитированием
Старый 20.02.2009, 23:10   #6
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Цитата:
Сообщение от Ирёнок Посмотреть сообщение
формула по которой вычисляется определитель: сумма в цикле j от 1 дo n (число строк матрицы) - (-1)^j+1*a[i,j]*M[i,j], где M[i,j] это минор матрицы
Если ничего не путаю, то при нумерации от единицы надо (-1)^(j+1).

Последний раз редактировалось Somebody; 20.02.2009 в 23:15.
Somebody вне форума Ответить с цитированием
Старый 21.02.2009, 01:10   #7
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

Задача в общем виде на мой взгляд решаеться рекурсией ^_^ [Delphi]
Код:
Type
  Matrix=array of array of double;
const
  n=20;

var
  M:matrix;
  i:integer;
procedure deletecol(var D:Matrix;Col:integer);
var
  j:integer;
begin
  for j:=col to length(D)-2 do
  begin
    D[j]:=D[j+1];
  end;
  setlength(d,length(d)-1);
end;

function Opred(D:Matrix):double;
var
  j:integer;
begin
  if length(D)>2 then
  begin
    result:=0;
    for j:=0 to length(M)-1 do
    begin
      deletecol(D,j);
      if j mod 2=0 then 
        result:=result+M[j][0]*Opred(D)
      else
        result:=result-M[j][0]*Opred(D);
    end;
  end 
  else 
    result:=M[0][0]*M[1][1]-M[1][0]*M[0][1];
end; 

begin
...
  setlength(M,n);
  for i:=0 to n-1 do
  setlength(M[i],n);
.... 
end;
только не проверял в браузере на прямик писал ^_^
ха точно забыл ожну вещь ^_^ надо ведь еще на одну сторку убавлять... Спать хочу в лом писать...
Помог? Ну так нажми на весы!

Последний раз редактировалось SNUPY; 21.02.2009 в 01:14.
SNUPY вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обращение матрицы методом союзной матрицы dofmat Помощь студентам 6 03.10.2011 15:01
Ввод векторов и матриц, умножение матрицы на вектор и вычисление скалярного призведения двух векторов zverushka Помощь студентам 18 20.02.2009 15:25
Вычисление определителя n-го порядка gool Паскаль, Turbo Pascal, PascalABC.NET 1 11.12.2008 10:59
Вычисление обратной матрицы методом Гаусса Штудент Общие вопросы C/C++ 0 07.12.2008 14:17
Написать рекурсивную функцию вычисления определителя квадратной матрицы Лёха Паскаль, Turbo Pascal, PascalABC.NET 1 23.03.2008 08:43