Вычислит.мат_лаб.р
..pdfПродолжение таблицы 1
1 |
|
|
2 |
3 |
|
|
2.93 |
2,52 |
2,02 |
20,80 |
|
|
|
|
|
|
|
13 |
3,72 |
3,47 |
3,06 |
30,74 |
|
|
4,47 |
4,10 |
3,63 |
36,80 |
|
|
4,96 |
4,53 |
4,01 |
40,79 |
|
|
|
|
|
|
|
14 |
4,35 |
4,39 |
3,67 |
40,15 |
|
|
4,04 |
3,65 |
3,17 |
36,82 |
|
|
3,14 |
2,69 |
2,17 |
28,10 |
|
15 |
4,07 |
3,79 |
3,37 |
40,77 |
|
|
2,84 |
2,44 |
1,95 |
27,68 |
|
|
4,99 |
4,50 |
3,97 |
49,37 |
|
|
|
|
|
|
|
16 |
3,19 |
2,89 |
2,47 |
33,91 |
|
|
4,43 |
4,02 |
3,53 |
47,21 |
|
|
3,40 |
2,92 |
2,40 |
32,92 |
|
|
|
|
|
|
|
17 |
2,57 |
2,26 |
1,84 |
28,66 |
|
|
4,47 |
4,03 |
3,57 |
50,27 |
|
|
4,89 |
4,40 |
3,87 |
55,03 |
|
|
|
|
|
|
|
18 |
2,83 |
2,50 |
2,08 |
33,28 |
|
|
3,00 |
2,55 |
2,07 |
33,59 |
|
|
3,72 |
3,21 |
2,68 |
43,43 |
|
|
|
|
|
|
|
19 |
3,78 |
3,44 |
3,02 |
46,81 |
|
|
4,33 |
3,88 |
3,39 |
53,43 |
|
|
4,76 |
4,24 |
3,71 |
58,73 |
|
|
|
|
|
|
|
20 |
4,59 |
4,24 |
3,82 |
59,54 |
|
|
4,83 |
4,36 |
3,88 |
62,33 |
|
|
4,06 |
3,53 |
3,01 |
52,11 |
|
|
|
|
|
|
|
21 |
4,56 |
4,20 |
3,78 |
61,86 |
|
|
3,21 |
2,73 |
2,25 |
42,98 |
|
|
4,58 |
4,04 |
3,52 |
61,67 |
|
|
|
|
|
|
|
22 |
3,75 |
3,39 |
2,97 |
53,38 |
|
|
4,18 |
3,70 |
3,22 |
59,28 |
|
|
4,43 |
3,88 |
3,36 |
62,62 |
|
23 |
2,95 |
2,58 |
2,16 |
44,16 |
|
|
5,11 |
4,62 |
4,14 |
46,68 |
|
|
4,38 |
3,82 |
3,30 |
65,34 |
|
24 |
2,93 |
2,55 |
2,14 |
46,41 |
|
|
3,47 |
2,98 |
2,50 |
54,78 |
|
|
4,78 |
4,22 |
3,70 |
75,81 |
|
|
|
|
|
|
|
25 |
3,74 |
3,36 |
2,94 |
63,26 |
|
|
4,02 |
3,51 |
3,04 |
67,51 |
|
|
4,18 |
3,61 |
3,09 |
70,03 |
|
|
|
|
|
|
|
11
Продолжение таблицы 1
1 |
|
|
2 |
3 |
26 |
4,07 |
4,28 |
3,87 |
84,43 |
|
5,30 |
4,79 |
4,32 |
95,45 |
|
5,11 |
4,54 |
4,03 |
91,69 |
27 |
4,90 |
4,50 |
4,09 |
94,18 |
|
3,79 |
3,27 |
2,81 |
71,57 |
|
4,01 |
3,43 |
2,91 |
75,45 |
28 |
4,25 |
3,84 |
3,43 |
86,07 |
|
3,86 |
3,34 |
2,87 |
77,12 |
|
5,40 |
4,82 |
4,30 |
108,97 |
|
|
|
|
|
29 |
3,35 |
2,94 |
2,53 |
70,69 |
|
5,41 |
4,88 |
4,41 |
115,38 |
|
3,88 |
3,30 |
2,78 |
81,07 |
|
|
|
|
|
30 |
3,05 |
2,64 |
2,23 |
67,17 |
|
4,14 |
3,61 |
3,14 |
91,43 |
|
5,63 |
5,03 |
4,52 |
125,40 |
|
|
|
|
|
12
Лабораторная работа №2 Решение систем линейных алгебраических уравнений
Приближенные методы
Метод Якоби
Входные параметры: n—целое положительное число, равное порядку n системы; а — массив из n х n действительных чисел, содержащий матрицу коэффициентов системы (а(1) = а11, а(2) = a12…а(n) = аn1, а(n + 1) = а12, .... а (n n) = аnn); b — массив из n действительных чисел, содержащий столбец свободных членов системы (b(1) = b1, b(2)=b2,…b(n)=bn), eps – малое число для условия окончания итерационного процесса.
Выходные параметры: b—массив из n действительных чисел (он же входной); при выходе из программы содержит решение системы b(l) = x1, b(2) = x2, … b(n) = хn; p—количество итераций.
Схема алгоритма приведена на рисунке 15.
Пример. Решить систему уравнений с погрешностью ε=0,01
100x1 6x2 2x3 200 6x1 200x2 10x3 600 x1 2x2 100x3 500.
Текст программы:
Procedure Jackoby(n:integer;a:tmatr;b:tvector;Eps:real;var x:tvector;var p:integer); Var i,j:integer;
x0:tvector;
e,d,d1,d2,s:real;
procedure Vector; {рассчитывает очередное приближение x0 через предыдущее х}]
var i,j:integer; begin
for i:=1 to n do begin x0[i]:=b[i];
for j:=1 to n do if j<>i then x0[i]:=x0[i]+a[i,j]*x[j];
end;
end;
function Normlm(x:Tvector):real; {рассчет нормы вектора как максимального по модулю элемента вектора}
var y:real; i,j:integer; begin
y:=abs(x[1]); for i:=1 to n do if abs(x[i])>y then y:=abs(x[i]); normlm:=y;
13
end;
procedure OutVec; var i:integer; begin
for i:=1 to n do writeln(x0[i]); end;
{ Jackoby} Begin error:=0;
Out_Slau_T(n,a,b); for i:=1 to n do
if a[i,i]=0 then begin
MessageDlg('!!!!',mtError,[mbOk],0); error:=1; exit;
end;
d2:=0;
for i:=1 to n do {рассчет норм d и d2} begin
s:=a[i,i]; a[i,i]:=0;x0[i]:=0;b[i]:=b[i]/s; x[i]:=b[i]; for j:=1 to n do if j<>i then
begin
a[i,j]:=-a[i,j]/s; x0[i]:=x0[i]+abs(a[i,j]); d2:=d2+abs(a[i,j])*abs(a[i,j]);
end;
end;
d2:=sqrt(d2); Out_Slau_T(n,a,b); d:=Normlm(x0);
for i:=1 to n do{рассчет нормы d1} begin
x0[i]:=0; for j:=1 to n do if j<>i then x0[i]:=x0[i]+abs(a[j,i]);
end; |
|
|
d1:=normlm(x0); |
|
|
if d1<d then d:=d1; |
{поиск наименьшей нормы} |
|
if d2<d then d:=d2; |
|
|
if d>=1 then |
{проверка достаточного условия} |
|
begin |
writeln(‘достаточное условие не выполнено’); readln; exit; |
end; s:=d/(1-d);
p:=0; {подсчет итераций} repeat
p:=p+1; vector; { x0=b+Ax} for i:=1 to n do x[i]:=x0[i]-x[i];
14
d:=normlm(x);
outvec; {вывод вектора x0} for i:=1 to n do x[i]:=x0[i]; until d*s<eps;
End;
Вычисления по программе привели к следующим результатам:
X1=1,907
X2=3,1884
X3=4,917
Количество итераций:2
15
procedure Jakoby(n:integer;a:tmatr;b :tVector;eps;real;var x:tvector;var p:integer)
Out_Slau_T(n,a,b)
I
I>N
+
a[i,i]=0
Возврат
I=I+1
I
d2=0
I
I>N
s=a[i,i]
a[i,i]=0 b[i]=b[i]/ s x[i]=b[i]
J
J>N
+
j<>i
a[i,j]=-a[i,j]/ s x0[i]=x0[i]+abs(a[i,j]) d2=d2+abs(a[i,j]* abs(a[i,j]))
J=J+1
J
I=I+1
I
d2=sqrt(d2)
Out_Slau_T(n,a,b)
d=Normlm(x0)
I
I>N
A
A
x0[i]=0
J
J>N
+
j<>i
x0[i]=x0[i]+abs(a[i,j])
J=J+1
J
I=I+1
I
d1=Normlm(x0)
+
d1<d
d=d1
+
d2<d
d=d2
+
d>=1
Возврат
s=d/ (1-d)
p=o
P
P=P+1
Vector
I
I>N
x[i]=x0[i]-x[i]
B
Рисунок 15 - Схема алгоритма метода Якоби
B
I=I+1
I
d=Normlm(x)
Outvec
I
I>N
x[i]=x0[i]
I=I+1
I
D*S<eps
P
Возврат
16
Варианты заданий для решения систем линейных алгебраических уравнений методом Якоби приведены в таблице 2.
Метод верхней релаксации
Входные параметры: n—целое положительное число, равное порядку n системы; а — массив из n х n действительных чисел, содержащий матрицу
коэффициентов системы (а(1) = а11, а(2) = a12…а(n) = аn1, а(n + 1) = а12, .... а(n х n) = аnn); b — массив из n действительных чисел, содержащий столбец
свободных членов системы (b(1) = b1, b(2)=b2,…b(n)=bn); eps – малое число для условия окончания итерационного процесса.
Выходные параметры: b—массив из n действительных чисел (он же входной); при выходе из программы содержит решение системы b(l) = x1, b(2) = x2, … b(n) = хn; p—количество итераций.
Схема алгоритма приведена на рисунке 16.
Пример. Решить систему уравнений методом релаксации с погрешностью ε=0,01 и параметром релаксации w=1,8
100x1 6x2 2x3 200 6x1 200x2 10x3 600 x1 2x2 100x3 500.
Текст программы:
Procedure Relax(n:integer;a:tmatr;b:tvector;Eps,w:real;var x:tvector;var p:integer); Var i,j:integer; x0:tvector; e:real;
Begin
Out_Slau_T(n,a,b);For i:=1 To n Do x0[i]:=x[i];p:=0; Repeat
For i:=1 To n Do Begin If a[i,i]=0 Then Begin
p:=0; MessageDlg('!!!!',mtError,[mbOk],0); error:=2; Exit; End;
x[i]:=w*b[i]/a[i,i];
For j:=1 To i-1 Do x[i]:=(1-w)*x[i]-w*a[i,j]*x[j]/a[i,i]; For j:=i+1 To n Do x[i]:=(1-w)*x[i]-w*a[i,j]*x0[j]/a[i,i]; End;e:=0;
For i:=1 To n Do Begin
If e<Abs(x[i]-x0[i]) Then e:=Abs(x[i]-x0[i]); x0[i]:=x[i];End;p:=p+1;
Until e<=Eps;End;
Вычисления по программе привели к следующим результатам:
17
X1=2,860
X2=4,088
X3=5,654
Количество итераций:3
procedure relax(n:integer;a:tmatr;b:t Vector;eps,w :real;var x:tvector;var p:integer)
Out_Slau_T(n,a,b)
I
I>N
X[0]=X[i]
I=I+1
I
p=0
P
P=P+1
I
I=I+1
+
a[i,i]=0
p=0
x[i]=w *b[i] / a[i]
Возврат
J
J>I-1
X[i]=(1-w )*X[i]-w *a[i,j]*x[j] / a[i,i]
J=J+1
J
J
J>N
X[i]=(1-w )*X[i]-w *a[i,j]* x0[j] / a[i,i]
J=J+1
J
I=I+1
I
e=0
A
A
I
I>N
+
e<abs(x[i]-x0[i])
|
|
|
|
|
x0[i]=x[i] |
|
e=abs(x[i]-x0[i]) |
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
I=I+1
I
p=p+1
E<=EPS
P
Возврат
Рисунок 16 - Схема алгоритма метода релаксации
18
Варианты заданий для решения систем линейных алгебраических уравнений методом верхней релаксации приведены в таблице 2.
Метод Зейделя
Входные параметры: n—целое положительное число, равное порядку n системы; а — массив из n х n действительных чисел, содержащий матрицу
коэффициентов системы (а(1) = а11, а(2) = a12…а(n) = аn1, а(n + 1) = а12, .... а(n х n) = аnn); b — массив из n действительных чисел, содержащий столбец
свободных членов системы (b(1) = b1, b(2)=b2,…b(n)=bn); eps – малое число для условия окончания итерационного процесса.
Выходные параметры: b—массив из n действительных чисел (он же входной); при выходе из программы содержит решение системы b(l) = x1, b(2) = x2, … b(n) = хn; p—количество итераций.
Схема алгоритма приведена на рисунке 17.
Пример. Решить систему уравнений с погрешностью ε=0,01
100x1 6x2 2x3 200 6x1 200x2 10x3 600 x1 2x2 100x3 500.
Текст программы:
Procedure Zeidel(n:integer;a:tmatr;b:tvector;Eps:real;var x:tvector;var p:integer); Var i,j:integer;
x0:tvector;
e:real; Begin
Out_Slau_T(n,a,b);
For i:=1 To n Do x0[i]:=x[i]; p:=0;
Repeat
For i:=1 To n Do Begin If a[i,i]=0 Then Begin
p:=0; MessageDlg('!!!!',mtError,[mbOk],0); error:=2; Exit; End;
x[i]:=b[i]/a[i,i];
For j:=1 To i-1 Do x[i]:=x[i]-a[i,j]*x[j]/a[i,i]; For j:=i+1 To n Do x[i]:=x[i]-a[i,j]*x0[j]/a[i,i]; End;e:=0;
For i:=1 To n Do Begin
If e<Abs(x[i]-x0[i]) Then e:=Abs(x[i]-x0[i]); x0[i]:=x[i];
End;
p:=p+1;Until e<=Eps;End;
19
procedure Zeidel(n:integer;a:tmatr;b:t Vector;eps:real;var x:tvector;var p:integer)
Out_Slau_T(n,a,b)
I
I>N
X[0]=X[i]
I=I+1
I
p=0
P e<=eps
I
I>N
a[i,i]=0
p=0
x[i]=w *b[i] / a[i,i]
Возврат
J
J>I-1
X[i]=X[i]-a[i,j]*x[j] /
a[i,i]
J=J+1
J
J
J>N
X[i]=X[i]-a[i,j]*
x0[j] / a[i,i]
J=J+1
J
I=I+1
I
e=0
A
A
I
I>N
e<abs(x[i]-x0[i])
e=abs(x[i]-x0[i])
x0[i]=x[i]
I=I+1
I
p=p+1
P
Возврат
Рисунок 17Схема алгоритма метода Зейделя
20