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

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

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

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

Дана матрица А, 4x4. Найти обратную матрицу.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.10.2009, 14:10
Ответы с готовыми решениями:

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

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

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

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

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

Добавлено через 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
ЧакЭ одобряЭ
 Аватар для Artishok
285 / 284 / 86
Регистрация: 27.12.2009
Сообщений: 1,767
06.05.2010, 12:48
не надо ничего убирать.код прекрасно работает
1
Почетный модератор
 Аватар для Puporev
64316 / 47612 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
06.05.2010, 13:03
Если убираете проверку, то и выводите только саму обратную матрицу.
1
2 / 2 / 1
Регистрация: 02.05.2010
Сообщений: 92
06.05.2010, 13: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
Всем привет. Нашёл эту тему в поисках кода для матрицы 3х3. Как можно "преобразовать" данный код для общего вида, чтобы получить вычисление обратной матрицы для матрицы размерности 3 на 3?

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

Добавлено через 2 минуты
Пример вычисления вручную.
http://mathem.h1.ru/examples/example.html?3
0
0 / 0 / 0
Регистрация: 01.06.2010
Сообщений: 3
01.06.2010, 21:56
Можно конечно вручную по алгоритму писать, да только я не умею. К сожалению. Поэтому и обратился за помощью на форум.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.06.2010, 21:56
Помогаю со студенческими работами здесь

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

Обратная матрица
Ребят помогите пожалуйста такое дело составить программу Дана рандомная квадратная матрица из нее сделать обратную матрицу (A^-1) и...

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru