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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.04.2015, 15:43   #1
Юля23
Пользователь
 
Регистрация: 23.03.2015
Сообщений: 20
По умолчанию Паскаль вычисление определителя

Проблема с вычислением определителя матрицы любой размерности...В чем ошибка? как правильно сделать?
Код:
uses
  crt;
const
  l=10;
type
  matr=array[0..l,0..l] of integer;
var
 M, A:matr;
  i,j,p,x,k,n,t,r, s: integer;
  D:smallint;

Procedure inputMatrix(var x:matr);
begin
  for i:=0 to n-1 do
    begin
      for j:=0 to n-1 do
        begin
          x[i , j]:=random(10);
          Write(x[i,j]:4);
        end;
      writeln;
    end;
end;

begin
  randomize;
  clrscr;
  writeln('vvedite razmer matrici');
  readln(n);
  writeln;
  writeLn('ishodnaya matrica:');
  inputmatrix(a);

  for i:=0 to n do   {процесс транспонирования}
   for j:=0 to i-1 do
    begin
     k:=A[i,j];
     A[i,j]:=A[j,i];
     A[j,i]:=k;
    end;

  writeln('результат транспонирования: ');
  for i:=0 to n-1 do
   begin
    for j:=0 to n-1 do
     write(A[i,j]:3);
    writeln;
   end;
   WriteLn('ishodnaya matrica');
   inputmatrix(a);
p := n-1 div 2;{поворот на 90}
for i:=0 to p do
for j:=i to n-i do
  begin
    x := A[i,j];
    A[i,j] := A[n-j,i];
    A[n-j,i] := A[n-i,n-j];
    A[n-i,n-j] := A[j,n-i];
    A[j,n-i] := x;
  end;

writeln('Povorot na 90 gradusov po chasovoi strelke:');
for i:=0 to n-1 do
  begin
    for j:=0 to n-1 do
    write(a[i,j]:3);
    writeln;
  end;
  WriteLn('ishodnaya matrica:');{вычисление определителя}
  inputmatrix(a);
  M := a;
for s:=i to n-1 do
 for t:=1 to n do
  M[s,t] := M[s+1,t];
for t:=1 to n-1 do
 for s:=1 to n-1 do
  M[s,t] := M[s,t+1];
 WriteLn('vichislenie opredelitelya');
   D:=Exp((j+1)*Ln(-1))*r[i,j]*M[i,j];
  writeln;
end.
Юля23 вне форума Ответить с цитированием
Старый 05.04.2015, 16:02   #2
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Я бы рекомендовал скопировать матрицу в отдельную переменную, а потом преобразовывать
Код:
var X,A:matr;
***
begin
   For i:=0 to n-1 do
      For j:=0 to n-1 do
         X[i,j]:=A[i,j];
***
   for i:=0 to n-1 do   {процесс транспонирования}
      for j:=0 to n-1 do
         A[j,i]:=X[i,j];
***
end;
Что за запись:
Код:
p := n-1 div 2;{поворот на 90}
Может
Код:
p := (n-1) div 2;{в скобках}
О, а это что означает?
Код:
WriteLn('ishodnaya matrica:');{вычисление определителя}
inputmatrix(a);//ввод новой матрицы, что ли? (там же стоит x[i,j]:=random(10);)
M := a;//по-моему не получится
Ln(-1) - не существует! И для чего она нужна?

Код:
D:smallint;//целые числа
D:=Exp((j+1)*Ln(-1))*r[i,j]*M[i,j];
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]

Последний раз редактировалось newerow1989; 05.04.2015 в 16:18.
newerow1989 вне форума Ответить с цитированием
Старый 05.04.2015, 17:04   #3
Юля23
Пользователь
 
Регистрация: 23.03.2015
Сообщений: 20
По умолчанию

Цитата:
О, а это что означает?
Код:
WriteLn('ishodnaya matrica:');{вычисление определителя}
inputmatrix(a);//ввод новой матрицы, что ли? (там же стоит x[i,j]:=random(10);)
Это пока незаконченная программа, там потом просто нужно будет меню ввести, которое будет обеспечивать выбор конкретного преобразования, поэтому каждый раз новая матрица.

Цитата:
Ln(-1) - не существует! И для чего она нужна?

Код:

D:smallint;//целые числа
D:=Exp((j+1)*Ln(-1))*r[i,j]*M[i,j];
просто есть такая формула вычисления определителя,
D=(-1)^(j+1)*a[i,j]*M[i,j]
Юля23 вне форума Ответить с цитированием
Старый 05.04.2015, 17:57   #4
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Цитата:
Сообщение от Юля23 Посмотреть сообщение
... просто есть такая формула вычисления определителя,
D=(-1)^(j+1)*a[i,j]*M[i,j]
Просто логарифм от отрицательного числа не берется. По крайней мере в мире действительных чисел.
Да и вообще, всякие экспоненты, логарифмы с индексами - это моветон.

Там же эта степень - просто чтобы знак определить. При четных - минус, нечетных - плюс.
Используйте или if или , если последовательно вычислять последующий из предыдущего - умножайте на (-1), будет +-+-+- ...
type_Oleg вне форума Ответить с цитированием
Старый 05.04.2015, 19:45   #5
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 472
По умолчанию

Юля23

Если почитать Wikipedia, то там говорится о способе расчёта приведением матрицы к треугольному виду.

На страничке volvo приведена рекурсивная реализация разложения Лапласа - это то, что пытаешься реализовать ты.
FPaul вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычисление определителя матрицы на C# H3mania Общие вопросы C/C++ 2 07.12.2010 17:10
Вычисление определителя Sparky Помощь студентам 15 07.03.2010 19:42
Вычисление определителя матрицы StudentofSUSU Microsoft Office Excel 2 07.01.2010 21:05
Вычисление определителя матрицы Ирёнок Помощь студентам 6 21.02.2009 01:10
Вычисление определителя n-го порядка gool Паскаль, Turbo Pascal, PascalABC.NET 1 11.12.2008 10:59