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
| ype
m2 = array[1..100]of real;
a1 = array[1..100, 1..100]of real;
var
a{матрица коэффицентов перед неизвестными}: a1;
i{переменная цикла}, j{переменная цикла}, n{порядок матрицы}: integer;
f{правая часть}: m2;
f1{файл из которого читается матрица}: file of real;
z{переменная с помошью которой находится порядок матрицы при чтении ее из файла}: real;
procedure iteraciya(var a{матрица коэффицентов перед неизвестными}: a1; n{порядок матрицы}: integer; f{правая часть}: m2){процедура нахождения последуещего решения системы уравнений };
var
e1{первая сумма из формулы },e2{вторая сумма из формулы},r{разница между i и i+1 решением уравнения},e{погрешность},m{погрешность в каждой строке},u{невязка}:real;
i{переменная цикла},j{переменная цикла},b{счетчик итераций}:integer;
x1{i-ое решение системы уравнений},x{i+1 решение системы уравнений}:m2;
begin
e:=1/power(10,10);
for i:=1 to n do
begin
x1[i]:=0;
end;
r:=1;
b:=0;
while (r>e)and(b<100) do begin
b:=b+1;
for i:=1 to n do
begin
e1:=0;
e2:=0;
for j:=1 to i-1 do
begin
e1:=e1+a[i,j]*x1[j];
end;
for j:=i+1 to n do
begin
e2:=e2+a[i,j]*x[j];
end;
x[i]:=(f[i]-e1-e2)/a[i,i];
end;
r:=0;
for i:=1 to n do
begin
r:=r+power(x[i]-x1[i],2);
end;
r:=sqrt(r);
write('номер итерации':10);
writeln(b:10);
write('разница = ':10);
writeln(r);
for i:=1 to n do
begin
x1[i]:=x[i];
end;
end;
for i:=1 to n do begin
write('x');
write(i);
write('= ');
writeln(x[i]);
end;
{нахождение невязки}
u:=0;
for i:=1 to n do
begin
m:=0;
for j:=1 to n do
begin
m:=m+a[i,j]*x[j];
end;
m:=m-f[i];
u:=u+power(m,2);
end;
u:=sqrt(u);
write('невязка = ');
writeln(u);
end;
begin
{чтение матрицы}
assign(f1,'F:\f11');
reset(f1);
while not eof(f1) do
begin
read(f1,z);
end;
n:=round(z);
seek(f1,0);
for i:=1 to n do
begin
for j:=1 to n do
begin
read(f1,a[i,j]);
end;
read(f1,f[i]);
end;
{вывод матрицы}
for i:=1 to n do
begin
for j:=1 to n do
begin
write(a[i,j]:5);
end;
write('= ');
writeln(f[i]);
end;
iteraciya(a,n,f);
end. |