Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.84/69: Рейтинг темы: голосов - 69, средняя оценка - 4.84
0 / 0 / 0
Регистрация: 02.10.2009
Сообщений: 16
1

Обратная матрица

26.10.2009, 14:10. Показов 13867. Ответов 27
Метки нет (Все метки)

Всем привет!
Помогите решить задачку в паскале, пожалуйста!

Дана матрица А, 4x4. Найти обратную матрицу.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.10.2009, 14:10
Ответы с готовыми решениями:

Обратная матрица
Знайти обернену матрицю та зробити до неї перевірку(одиничну матрицю). Без процедур!!!

Обратная матрица
Ребята есть программа нахождения обратной матрицы, как сделать чтобы мы задавали 2 матрицы а не...

Написаь программу, чтобы в ней находилась обратная матрица, определитель и СЛАУ
Написаь программу, чтобы в ней находилась обратная матрица, определитель и СЛАУ (метод Гаусса),...

Обратная польская запись
Требуется преобразовать выражение в обратную польскую запись и посчитать. Программа вроде как...

27
Почетный модератор
64069 / 47481 / 32732
Регистрация: 18.05.2008
Сообщений: 115,185
27.10.2009, 12:03 2
Кара, Вам нужно решить конкретную матрицу, с известными числами, или в общем виде?
Если в общем, могу скинуть программу, но она довольно приличная.
0
0 / 0 / 0
Регистрация: 02.10.2009
Сообщений: 16
27.10.2009, 14:27  [ТС] 3
Да, мне нужно в общем виде. Буду вам очень благодарна!
0
Почетный модератор
64069 / 47481 / 32732
Регистрация: 18.05.2008
Сообщений: 115,185
27.10.2009, 17:47 4
Программу давно писал, сейчас потестировал, исправлял ошибки, вроде работает. Теорию в книжках или в интернете почитайте.
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.
1
0 / 0 / 0
Регистрация: 02.10.2009
Сообщений: 16
28.10.2009, 11:48  [ТС] 5
Большое спасибо за помощь!
0
proteam
23.11.2009, 07:20 6
Извините, может немного не в тему получится, но мне нужно решить одну задачку, а именно найти обратную матрицу 10х10. Пожалуйста, помогите. Если есть уже готовое решение, можете отправить мне на email: damir-89@inbox.ru
Почетный модератор
64069 / 47481 / 32732
Регистрация: 18.05.2008
Сообщений: 115,185
23.11.2009, 08:21 7
proteam, А Вы читать не умеете? В теме разве не готовое решение? Замените везде 4 на 10 и все. Или приехать к Вам и проделать сию труднейшую операцию?
1
proteam
23.11.2009, 08:29 8
Извините, Puporev, я Ваше готовое решение еще не тестил, поэтому так написал, код требует изучения, а я сейчас на работе и нет возможности протестировать. Спасибо за помощь)
Почетный модератор
64069 / 47481 / 32732
Регистрация: 18.05.2008
Сообщений: 115,185
23.11.2009, 09:40 9
proteam, Прежде чем тестировать код, ознакомьтесь с этой темой, сутью, алгоритмами и т.д. Думаю в Гугле на тему обратной матрицы найдете достаточно материала.
0
2 / 2 / 1
Регистрация: 02.05.2010
Сообщений: 92
06.05.2010, 12:05 10
у меня пишет неизвестное имя типа- double
0
ЧакЭ одобряЭ
283 / 282 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
06.05.2010, 12:18 11
pascalabc?

Добавлено через 2 минуты
либо на abc.net запустите либо изменить double на real
1
2 / 2 / 1
Регистрация: 02.05.2010
Сообщений: 92
06.05.2010, 12:35 12
убрал проверку вобще,ошивка типа неверная вещественная операция - получается исходные числа должны быть только вещественные,тоесть реал?

Добавлено через 1 минуту
Цитата Сообщение от Artishok Посмотреть сообщение
pascalabc?

Добавлено через 2 минуты
либо на abc.net запустите либо изменить double на real
да паскаль абц.
даа,вот это я намудрил мне аж самому смешно

Добавлено через 13 минут
1.74 -0.11 2.85 1.07
1.46 0.19 -2.51 -0.89
-2.93 -0.14 3.81 2.44
2.91 0.06 -3.55 -2.18
0.00 0.00 0.00 0.00
0.00 0.00 0.00 0.00
0.00 0.00 0.00 0.00
0.00 0.00 0.00 0.00..вот получилось что ребят помогите разобраться,я подозреваю это потому что я проверку убрал...
0
ЧакЭ одобряЭ
283 / 282 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
06.05.2010, 12:48 13
не надо ничего убирать.код прекрасно работает
1
Почетный модератор
64069 / 47481 / 32732
Регистрация: 18.05.2008
Сообщений: 115,185
06.05.2010, 13:03 14
Если убираете проверку, то и выводите только саму обратную матрицу.
1
2 / 2 / 1
Регистрация: 02.05.2010
Сообщений: 92
06.05.2010, 13:15 15
все я разобрался...вывод прост не пользоваться паскаль абц
сходная матрица:
1.10 2.30 4.40 2.00
5.00 4.00 4.50 4.30
4.00 5.60 11.00 3.30
2.00 3.00 4.30 2.00
Obratnaja matrica:
-0.63 0.27 0.35 -0.53
-0.59 -0.35 -0.41 2.01
0.21 0.01 0.26 -0.66
1.06 0.23 -0.30 -0.56
Proverka:
1.00 0.00 0.00 0.00
0.00 1.00 0.00 0.00
0.00 0.00 1.00 0.00
0.00 0.00 0.00 1.00
0
0 / 0 / 0
Регистрация: 01.06.2010
Сообщений: 3
01.06.2010, 20:33 16
Всем привет. Нашёл эту тему в поисках кода для матрицы 3х3. Как можно "преобразовать" данный код для общего вида, чтобы получить вычисление обратной матрицы для матрицы размерности 3 на 3?

Или, если не трудно, мог бы кто-нибудь написать код? Для Паскаля.
0
Почетный модератор
64069 / 47481 / 32732
Регистрация: 18.05.2008
Сообщений: 115,185
01.06.2010, 20:45 17
Можно просто поставить размер матрицы
Pascal
1
const n=3;
0
0 / 0 / 0
Регистрация: 01.06.2010
Сообщений: 3
01.06.2010, 20:57 18
Эх, некорректно вопрос сформулировал в первом сообщении.
Цитата Сообщение от Puporev Посмотреть сообщение
Можно просто поставить размер матрицы
Да, это я знаю. Но мне нужна программа именно для 3х3, а не общего вида.
0
Почетный модератор
64069 / 47481 / 32732
Регистрация: 18.05.2008
Сообщений: 115,185
01.06.2010, 21:08 19
Ну тогда просто делайте все по порядку, но "вручную",
-находите определитель матрицы
- вспомогательные определители
- алгебраические дополнения
- вычисляйте обратную матрицу

Добавлено через 2 минуты
Пример вычисления вручную.
http://mathem.h1.ru/examples/example.html?3
0
0 / 0 / 0
Регистрация: 01.06.2010
Сообщений: 3
01.06.2010, 21:56 20
Можно конечно вручную по алгоритму писать, да только я не умею. К сожалению. Поэтому и обратился за помощью на форум.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.06.2010, 21:56

Обратная матрица
Ребят помогите пожалуйста такое дело составить программу Дана рандомная квадратная матрица из нее...

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

Обратная матрица
написала программу, которая виполняет операции над матрицами и почему то обратную матрицу находит...

Обратная матрица
Рассчитать обратную матрицу.Размер задается пользователем от 2х2 до 10х10

обратная матрица
подскажите пожалуйста алгоритм определения обратной матрицы

Обратная матрица
как можно найти обратную матрицу 10х10? помогите пожалуйста!!!


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

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

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