Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Вычислит.мат_лаб.р

..pdf
Скачиваний:
23
Добавлен:
17.05.2015
Размер:
1.32 Mб
Скачать

Продолжение таблицы 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