Форум программистов, компьютерный форум, киберфорум
Наши страницы
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/63: Рейтинг темы: голосов - 63, средняя оценка - 4.57
Freak
0 / 0 / 0
Регистрация: 04.11.2009
Сообщений: 9
1

Нахождение обратной матрицы

27.12.2009, 13:22. Просмотров 12016. Ответов 7
Метки нет (Все метки)

помогите пожалуйста нужна БЛОК СХЕМА и ПРОГРАММА на нахождение обратной матрицы, (паскаль)
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.12.2009, 13:22
Ответы с готовыми решениями:

Найти наибольший из положительных элементов матрицы и заменить этим числом все элементы матрицы на обратной диагонали.
Найти наибольший из положительных элементов матрицы и заменить этим числом все...

Вычисление обратной матрицы
Написать функцию или процедуру для вычисления обратной матрицы.

СЛАУ методом обратной матрицы
Матричным методом

Уточнение элементов обратной матрицы.
Добрый день ! Окажите помощь ,пожалуйста. Задание - Дана матрица А .Найти...

Вычисление определителя и обратной матрицы
Помогите составить программу, пожалуйста. Программа должна транспонировать,...

7
Давид
Программист 1С
856 / 644 / 187
Регистрация: 03.03.2009
Сообщений: 1,154
27.12.2009, 13:24 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Freak,
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
uses crt;
const t=0.000001;{ограничиваем числа, близкие к нолю, на них делить}
type Tmatr=array[1..4,1..4]of real;
 
procedure Per(n,k:integer;a:Tmatr;var p:integer);{перестановка строк с макс. главным элементом}
var z:real;
    j,i:integer;
begin
z:=abs(a[k,k]);
i:=k;
p:=0;
for j:=k+1 to n do
  begin
    if abs(a[j,k])>z then
      begin
        z:=abs(a[j,k]);
        i:=j;
        p:=p+1;
      end;
  end;
if i>k then
for j:=k to n do
   begin
     z:=a[i,j];
     a[i,j]:=a[k,j];
     a[k,j]:=z;
   end;
end;
function znak(p:integer):integer;{изменение знака при перестановке строк матрицы}
begin
if p mod 2=0 then
znak:=1 else znak:=-1;
end;
function znak1(i,m:integer):integer;{изменение знака при перестановке строк при нахождении дополнений}
begin
if (i+m) mod 2=0 then
znak1:=1 else znak1:=-1;
end;
procedure opr(n,p:integer;a:Tmatr;var det:real;var f:byte);{нахождение определителя матрицы}
var k,i,j:integer;
    r:real;
begin
det:=1.0;f:=0;
for k:=1 to n do
   begin
     if a[k,k]=0 then per(k,n,a,p);
     det:=znak(p)*det*a[k,k];
     if abs(det)<t then
      begin
       f:=1;
       writeln('Обратной матрицы нет!');
       readln;
       exit;
      end;
     for j:=k+1 to n do
        begin
         r:=a[j,k]/a[k,k];
         for i:=k to n do
         a[j,i]:=a[j,i]-r*a[k,i];
        end;
   end;
end;
procedure opr1(n,p:integer;d:Tmatr;var det1:real);{нахождение определений для дополнений}
var k,i,j:integer;
    r:real;
begin
det1:=1.0;
for k:=2 to n do
   begin
     if d[k,k]=0 then per(n,k,d,p);
     det1:=znak(p)*det1*d[k,k];
     for j:=k+1 to n do
       begin
         r:=d[j,k]/d[k,k];
         for i:=k to n do
         d[j,i]:=d[j,i]-r*d[k,i];
       end;
   end;
end;
Procedure Peresch(n,p:integer;var b:Tmatr;det1:real;var e:Tmatr);{вычисление дополнений}
var i,m,k,j:integer;
    z:real;
    d,c:Tmatr;
begin
for i:=1 to n do
for m:=1 to n do
   begin
     for j:= 1 to n do {перестановка строк}
       begin
         z:=b[i,j];
         for k:=i downto 2 do
         d[k,j]:=b[k-1,j];
         for k:=i+1 to n do
         d[k,j]:=b[k,j];
         d[1,j]:=z;
       end;
     for k:=1 to n do {перестановка столбцов}
       begin
         z:=d[k,m];
         for j:=m downto 2 do
         c[k,j]:=d[k,j-1];
         for j:=m+1 to n do
         c[k,j]:=d[k,j];
         c[k,1]:=z;
       end;
     Opr1(n,p,c,det1);{вычисление определителей}
     e[i,m]:=det1*znak1(i,m);{вычисление дополнений}
   end;
end;
procedure Transp(a:Tmatr; n:integer;var at:Tmatr);{транспонирование матрицы}
var k,j:integer;
begin
for k:= 1 to n do
for j:=1 to n do
at[k,j]:=a[j,k];
end;
Procedure Proverka(a,b:Tmatr; n:integer;var c:Tmatr);{проверка - умножение прямой матрицы на обратную}
var k,j,i:integer;
    z:double;
begin
for k:=1 to n do
for j:=1 to n do
  begin
    c[k,j]:=0;
    for i:=1 to n do
      begin
        z:=a[i,j]*b[k,i];
        c[k,j]:=c[k,j]+z;
      end;
   end;
end;
procedure Vyvod(var a:Tmatr; n:integer);{вывод матриц на экран}
var k,j:integer;
begin
for k:=1 to n do
  begin
    for j:=1 to n do
    write(a[k,j]:7:2);
    writeln;
  end;
end;
var n,k,j,i,p:integer;{n-размер матрицы,k-счетчик по строкам,j-счетчик по столбцам,p-счетчик перестановок}
    a,at,b,c,e:Tmatr;{a-исходная, at-транспонированная, b-матрица дополнений, e-обратная, с-проверка}
    det,det1:real;{det-определитель исходной матрицы,det1-определители-дополнения}
    f:byte;{признак несуществования обратной матрицы}
begin
clrscr;
n:=4;
for k:=1 to n do
for j:=1 to n do
   begin
    write('a[',k,',',j,']=');
    readln(a[k,j]);
   end;
clrscr;
writeln('Исходная матрица:');
Vyvod(a,n);
Opr(n,p,a,det,f); {vychislenie opredelitelja}{считаем определитель}
if f=1 then exit;
Transp(a,n,b);  {транспонируем матрицу}
Peresch(n,p,b,det1,e);  {считаем дополнения}
writeln('Obratnaja matrica:');
for k:=1 to n do
for j:=1 to n do
e[k,j]:=e[k,j]/det; {создаем обратную матрицу}
Vyvod(e,n);
writeln('Proverka:');
Proverka(a,e,n,c);  {делаем проверку}
Vyvod(c,n);
readln
end.
3
Freak
0 / 0 / 0
Регистрация: 04.11.2009
Сообщений: 9
27.12.2009, 13:27  [ТС] 3
мне бы еще блок схему))
0
Давид
Программист 1С
856 / 644 / 187
Регистрация: 03.03.2009
Сообщений: 1,154
27.12.2009, 13:28 4
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Вот схемы! - разбирайся!
3
Вложения
Тип файла: rar shemy.rar (33.0 Кб, 592 просмотров)
bartolomeo
0 / 0 / 1
Регистрация: 19.05.2012
Сообщений: 4
20.06.2012, 17:35 5
Давид


Так не работает же код правильно
0
Shman
5 / 5 / 6
Регистрация: 30.04.2012
Сообщений: 212
10.04.2013, 07:57 6
Давид, Ваш код выводит неверное значение. Когда вводишь матрицу:
1 2
3 4

Выводится:
-0,5 0,5
0,5 -0,5

А должно быть:
-2 1
1.5 -0.5
0
Костик плиз
11 / 11 / 1
Регистрация: 26.10.2013
Сообщений: 84
27.10.2013, 18:13 7
Правильно потому что в коде указана матрица 4х4 а если на 2х2 исправить все норм

Добавлено через 19 секунд
Спасибо, очень помогла ваша программа.
0
verner444
0 / 0 / 0
Регистрация: 10.03.2014
Сообщений: 1
14.03.2014, 00:16 8
Парни, очень долго курю код и не могу понять- как считается определитель? Что за метод?
0
14.03.2014, 00:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.03.2014, 00:16

Составить подпрограмму для получения обратной матрицы
В общем суть проблемы: нарыл эту программку, но она не работает... в самом...

Найти сумму элементов обратной диагонали матрицы
Вводится квадратный двухмерный массив. Найти сумму элементов на его обратной...

Найти максимальные элементы главной и обратной диагоналей матрицы
Помогите решить задачу, если можно попроще. Дан двумерный массив размерности...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru