Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 03.11.2018
Сообщений: 3

Обращение матрицы, Паскаль. Кто может разъяснить готовую прогу?

26.11.2018, 17:28. Показов 1602. Ответов 7

Студворк — интернет-сервис помощи студентам
Может кто-нибудь помочь с готовой программой разобраться? Знаю, что это обращение матрицы по теореме Гаусса-Жордана, но как конкретно здесь что означает никак не могу понять.
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
uses crt;
const nmax = 10;
var A:array[1..nmax,1..nmax] of real;
P:array[1..nmax] of integer;
i,j,k,b,n,t:integer;
e,s:real;
label 1,2,3,4,vyh;
Begin
writeln('программа обращения матрицы методом Гаусса-Жордана');
writeln;
write('введите размерность матрицы А: n=');
readln(n);
writeln('ввод матрицы А:');
for i:=1 to n do
for j:=1 to n do
Begin
write('введите A[',i,',',j,']=');
readln(A[i,j]);
end;
for i :=1 to n do P[i]:=i;
for k:=1 to n do
Begin
e:=0;
b:=0;
for i:=k to n do
if e<abs(A[i,k])then
Begin
e:=abs(A[i,k]);
b:=i
end;
if e=0 then
Begin
writeln('матрица вырождена');
goto vyh;
end;
if k<b then
Begin
for j:=1 to n do
Begin
s:=A[k,j];
A[k,j]:=A[b,j];
A[b,j]:=s
end;
t:=P[k];
P[k]:=P[b];
P[b]:=t;
end;
A[k,k]:=1/A[k,k];
for j:=1 to n do
Begin
if j=k then goto 2;
s:=A[k,j]*A[k,k];
for i:=1 to n do
Begin
if i=k then goto 1;
A[i,j]:=A[i,j]-A[i,k]*s;
1: end;
A[k,j]:=s;
2: end;
for i:=1 to n do
Begin
if i=k then goto 3;
A[i,k]:=-A[i,k]*A[k,k];
3: end;
end;
for k:=1 to n do
4: if k<P[k] then
Begin
i:=P[k];
for j:=1 to n do
Begin
s:=A[j,k];
A[j,k]:=A[j,i];
A[j,i]:=s 
end;
t:=P[i];
P[i]:=P[k];
P[k]:=t;
goto 4;
end;
writeln;
writeln(' О Б Р А Т Н А Я М А Т Р И Ц А');
for i:=1 to n do
Begin
writeln;
for j:=1 to n do write(A[i,j]:10:5)
end;
vyh:readln;
end.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.11.2018, 17:28
Ответы с готовыми решениями:

Кто может разъяснить списки?
Не контейнеры, а которые делаются без них. Классами или структурами. Бьюсь, бьюсь, немного понимаю, но не до конца. Кто-нибудь может это...

Может кто разъяснить как выполнить?
Напишите программу, рассчитывающую сумму денег, которые вы получи- те при вложении начальной суммы с фиксированной процентной ставкой...

Может кто разъяснить принцип работы со списками через паленомы?
Примерный смысл программы такой: Имеется список коэффициентов и степеней паленома. Ввести число X и найти значение паленома в этой точке....

7
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
27.11.2018, 08:34
Если над единичной матрицей проделать те же преобразования, что приводят основную к единичной, то на месте единичной получим обратную матрицу.
Возможно вот это окажется намного понятнее:
https://www.cyberforum.ru/post12958546.html
1
0 / 0 / 0
Регистрация: 19.10.2018
Сообщений: 7
27.11.2018, 10:40
bormant, спасибо, но преподавателю уже показали именно эту программу и блок схему по этой программ, поэтому нужно разобраться именно с этой. Мы сейчас смотрели, тут есть какой то вектор p, хотя я думал что здесь как раз должна быть единичная матрица, но её судя по нашей программе нет, а обратная матрица получается на месте исходной матрицы в какой то момент (не понятно опять же в какой)
В общем единичный матрицы тут нет, зато есть вектор p который принимает последовательно значения 1 2 3 и до размерности
В общем не понятно вообще ничего, как будто здесь не теорема гаусса жордана вообще
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
27.11.2018, 12:35
Цитата Сообщение от Neprogramist11 Посмотреть сообщение
как будто здесь не теорема гаусса жордана вообще
Отличное наблюдение.
Достаточно умножить "обратную" матрицу на исходную (неважно, слева или справа) и проверить, получилась ли единичная.
Возьмем матрицу из упомянутой выше темы, про нее точно известно, что она невырожденная:
Pascal
1
2
3
4
5
6
7
8
9
10
11
const nmax = 5;
type TMatrix = array [1..nmax,1..nmax] of Real;
const
  a: TMatrix = (
    (2, 3, 4, 5, 8),
    (0, 5, 9, 5, 7),
    (0, 0, 4, 2, 2),
    (0, 0, 0, 5, 1),
    (0, 0, 0, 0, 3));
var
  d, c: TMatrix;
Pascal
1
2
3
4
5
6
7
8
9
10
11
  d:=a; n:=5;
  { ... }
vyh:
  for i:=1 to n do for j:=1 to n do begin
    s:=0; for k:=1 to n do s:=s+d[i,k]*a[k,j]; c[i,j]:=s;
  end;
  WriteLn;
  for i:=1 to n do begin
    WriteLn; for j:=1 to n do Write(c[i,j]:10:5);
  end;
  ReadLn;
Получили матрицу, состоящую из единиц.
Единичная матрица -- это несколько иное: на главной диагонали единицы, все остальные элементы нули.


Добавлено через 4 минуты
Цитата Сообщение от Neprogramist11 Посмотреть сообщение
уже показали именно эту программу и блок схему по этой программ
С учетом изложенного выше, очевидно зря.
0
0 / 0 / 0
Регистрация: 19.10.2018
Сообщений: 7
27.11.2018, 14:10
bormant, а касательно нашей программы, вы разобрались какой здесь метод и как все устроено? Может, за небольшую плату вы нам разжуете нашу программу в математическом смысле?
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
27.11.2018, 14:31
Метод чего? Если нахождения обратной матрицы, то этот код обратную матрицу находить не умеет.
То, что он находит, не является обратной матрицей. Это обстоятельство было установлено очень просто: исходную матрицу умножили на «обратную» и НЕ получили единичную матрицу.
1
0 / 0 / 0
Регистрация: 19.10.2018
Сообщений: 7
27.11.2018, 16:21
bormant, если вы сейчас про наш код, то здесь нет сомнений, что программа находит обратную матрицу. Преподаватель давал пример матрицы 5х5 и обратная матрица была успешно найдена. Также мы сами решали, все сходилось, попробуйте сами, все работает, только совсем непонятно как оно работает)
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
27.11.2018, 17:17
Цитата Сообщение от Neprogramist11 Посмотреть сообщение
здесь нет сомнений, что программа находит обратную матрицу
Хм, действительно опечатался при проверке, вот здесь: s:=s+d[i,k]*a[k,i], должно было быть s:=s+d[i,k]*a[k,j].

Тогда все относительно просто. Особенно если отформатировать и переписать без использования goto, где это совершенно не нужно:
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
const nmax = 10;
var
  A: array[1..nmax,1..nmax] of Real;
  P: array[1..nmax] of Integer;
  i, j, k, b, n, t: Integer;
  e, s: Real;
label vyh;
begin
  WriteLn('программа обращения матрицы методом Гаусса-Жордана');
  WriteLn;
  Write('введите размерность матрицы А: n=');
  ReadLn(n);
  WriteLn('ввод матрицы А:');
  for i:=1 to n do for j:=1 to n do Read(A[i,j]); ReadLn;
  for i:=1 to n do P[i]:=i;
  for k:=1 to n do begin
    e:=0; b:=0;
    for i:=k to n do
      if e<Abs(A[i,k]) then begin
        e:=Abs(A[i,k]); b:=i;
      end;
    if e=0 then begin
      WriteLn('матрица вырождена');
      goto vyh;
    end;
    if k<b then begin
      for j:=1 to n do begin
        s:=A[k,j]; A[k,j]:=A[b,j]; A[b,j]:=s;
      end;
      t:=P[k]; P[k]:=P[b]; P[b]:=t;
    end;
    A[k,k]:=1/A[k,k];
    for j:=1 to n do if j<>k then begin
      s:=A[k,j]*A[k,k];
      for i:=1 to n do if i<>k then
        A[i,j]:=A[i,j]-A[i,k]*s;
      A[k,j]:=s;
    end;
    for i:=1 to n do if i<>k then
      A[i,k]:=-A[i,k]*A[k,k];
  end;
  for k:=1 to n do
    while k<P[k] do begin
      i:=P[k];
      for j:=1 to n do begin
        s:=A[j,k]; A[j,k]:=A[j,i]; A[j,i]:=s;
      end;
      t:=P[i]; P[i]:=P[k]; P[k]:=t;
    end;
  WriteLn;
  WriteLn('О Б Р А Т Н А Я   М А Т Р И Ц А');
  for i:=1 to n do begin
    WriteLn; for j:=1 to n do Write(A[i,j]:10:5);
  end;
vyh:
  ReadLn;
end.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.11.2018, 17:17
Помогаю со студенческими работами здесь

Статическая линковка Qt 5.02. P.S.: Может кто выложит уже готовую под WinXP 32x MinGW?
Привет! В описание версии 5.02 сказано, что теперь статическая линковка работает корректно :) . Это радует, но удалось ли на практике кому...

Получить последовательность (Напишите прогу, кто может?)
пожалуйста напишите прогу, кто может, пожалуйста. Условие:Даны натуральное число n, действительные числа Х1,...,Хn(n&gt;=2). Получить...

Может кто-нибудь слышал про эту прогу?
Программа по криптографии и/или стеганографии. CryptLink или CryptoLink. Может, кто знает? Киньте ссылочку, плиз? З.Ы.: понимаю, что...

Может кто перевести эту прогу,для codeblocks
#include &quot;stdafix.h&quot; #include &lt;iostream&gt; using namespace std; int _tmain(int argc, _TCHAR* argv) { float s,t; long...

кто может переделать прогу с под С++ билдера на ВинАпи?
кто может переделать прогу с под С++ билдера на ВинАпи? если кто-то сможет тогда дам саму прогу ... спасибо


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru