Свойство квадратной матрицы - Pascal

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! Помогите составить программу проверки свойства квадратной матрицы A*A-1=E, где E-единичная матрица

Решение задачи: «Свойство квадратной матрицы»

textual
Листинг программы
  1. const n=5;
  2. type matr=array[1..n,1..n] of real;
  3. function Det(size:integer; var m:matr):real;forward;
  4. function AlgDop(size:integer;m:matr;row,col:integer):real;
  5. var temp:matr;     {нахождение алгебраических дополнений}
  6.     i,j:integer;
  7. begin
  8. for i:=1 to row-1 do
  9.  begin
  10.   for j:=1 to col-1 do temp[i,j]:=m[i,j];
  11.   for j:=col+1 to size do temp[i,j-1]:=m[i,j];
  12. end;
  13. for i:=row+1 to size do
  14.  begin
  15.   for j:=1 to col-1 do temp[i-1,j]:=m[i,j];
  16.   for j:=col+1 to size do temp[i-1,j-1]:=m[i,j];
  17. end;
  18. if (row+col) mod 2 = 0 then AlgDop := det(size-1,temp)
  19. else AlgDop := -det(size-1,temp);
  20. end;
  21.  
  22. function Det(size:integer; var m:matr):real;   {нахождение определителя}
  23. var i:integer;
  24.     r:real;
  25. begin
  26. if size=1 then Det:=m[1,1]
  27. else
  28. if size=2 then Det:=(m[1,1]*m[2,2]-m[1,2]*m[2,1])
  29. else
  30.  begin
  31.   r:=0;
  32.   for i:=1 to size do
  33.   r:=r+m[1,i]*AlgDop(size,m,1,i);
  34.   Det:=r;
  35.  end;
  36. end;
  37.  
  38. procedure ObrMatr(a:matr;var am:matr);
  39. {нахождение обратной матрицы}
  40. var i,j:integer;
  41.     dt:real;
  42. begin
  43. dt:=det(n,a);
  44. for i:=1 to n do
  45. for j:=1 to n do
  46. am[i,j]:=AlgDop(n,a,j,i)/dt;
  47. end;
  48. var a,ao,e:matr;
  49.     i,j,k:byte;
  50. begin
  51. randomize;
  52. writeln('Матрица A:');
  53. for i:=1 to n do
  54.  begin
  55.   for j:=1 to n do
  56.    begin
  57.     a[i,j]:=5*random;
  58.     write(a[i,j]:5:1);
  59.    end;
  60.   writeln;
  61.  end;
  62. writeln('Обратная матрица:');
  63. ObrMatr(a,ao);
  64. for i:=1 to n do
  65.  begin
  66.   for j:=1 to n do
  67.   write(ao[i,j]:5:1);
  68.   writeln;
  69.  end;
  70. for i:=1 to n do
  71. for j:=1 to n do
  72.  begin
  73.   e[i,j]:=0;
  74.   for k:=1 to n do
  75.   e[i,j]:=e[i,j]+a[i,k]*ao[k,j];
  76.  end;
  77. writeln('Матрица E=A*Ao:');
  78. for i:=1 to n do
  79.  begin
  80.   for j:=1 to n do
  81.   write(e[i,j]:5:1);
  82.   writeln;
  83.  end;
  84. end.

Объяснение кода листинга программы

  1. В первой строке кода определяется переменная n, которая будет использоваться для определения размера матрицы.
  2. Затем определяется тип данных matr, который представляет собой массив целых чисел.
  3. Далее определяется функция Det, которая вычисляет определитель матрицы. Эта функция использует вложенную функцию AlgDop, которая вычисляет алгебраические дополнения.
  4. В функции ObrMatr определяется обратная матрица. Сначала вычисляется определитель матрицы размером n. Затем происходит итерация по всем элементам матрицы и их значения присваиваются соответствующим элементам обратной матрицы.
  5. В конце кода происходит генерация случайной матрицы A и ее обратной матрицы Ao. Затем вычисляется матрица E, которая является результатом умножения матрицы A на ее обратную матрицу Ao.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.083 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы