Файл: Эксперименты лаба8,9(2курс).pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 06.04.2021

Просмотров: 161

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

6.

19

,

27

x

1

+ 3

,

42

x

2

+ 4

,

27

x

3

+ 1

,

21

x

4

+ 2

,

32

x

5

= 33

,

91

4

,

18

x

1

+ 20

,

16

x

2

+ 5

,

18

x

3

+ 2

,

01

x

4

+ 1

,

03

x

5

= 52

,

72

1

,

32

x

1

+ 4

,

78

x

2

+ 17

,

97

x

3

+ 1

,

92

x

4

+ 1

,

36

x

5

= 32

,

13

5

,

21

x

1

+ 5

,

01

x

2

+ 1

,

31

x

3

+ 15

,

03

x

4

+ 2

,

70

x

5

= 34

,

27

3

,

93

x

1

+ 4

,

81

x

2

+ 1

,

23

x

3

+ 2

,

69

x

4

+ 18

,

78

x

5

= 36

,

25

7.

21

,

23

x

1

+ 3

,

04

x

2

+ 1

,

25

x

3

+ 2

,

97

x

4

+ 4

,

15

x

5

= 31

,

39

3

,

47

x

1

+ 15

,

76

x

2

+ 2

,

04

x

3

+ 3

,

56

x

4

+ 4

,

17

x

5

= 31

,

04

1

,

32

x

1

+ 2

,

29

x

2

+ 10

,

03

x

3

+ 4

,

01

x

4

+ 1

,

03

x

5

= 28

,

71

5

,

21

x

1

+ 3

,

87

x

2

+ 1

,

39

x

3

+ 12

,

94

x

4

+ 4

,

49

x

5

= 29

,

29

2

,

07

x

1

+ 5

,

32

x

2

+ 1

,

87

x

3

+ 3

,

54

x

4

+ 13

,

56

x

5

= 28

,

23

8.

15

,

21

x

1

+ 3

,

06

x

2

+ 2

,

31

x

3

+ 1

,

74

x

4

+ 3

,

78

x

5

= 28

,

41

1

,

87

x

1

+ 12

,

97

x

2

+ 2

,

45

x

3

+ 3

,

29

x

4

+ 1

,

79

x

5

= 24

,

82

2

,

34

x

1

+ 1

,

83

x

2

+ 10

,

15

x

3

+ 1

,

35

x

4

+ 1

,

98

x

5

= 27

,

80

4

,

25

x

1

+ 3

,

67

x

2

+ 3

,

77

x

3

+ 18

,

19

x

4

+ 1

,

02

x

5

= 34

,

67

1

,

84

x

1

+ 2

,

37

x

2

+ 1

,

03

x

3

+ 3

,

04

x

4

+ 10

,

07

x

5

= 19

,

38

9.

17

,

13

x

1

+ 3

,

21

x

2

+ 4

,

17

x

3

+ 1

,

23

x

4

+ 1

,

45

x

5

= 28

,

42

3

,

18

x

1

+ 18

,

32

x

2

+ 3

,

44

x

3

+ 1

,

31

x

4

+ 4

,

01

x

5

= 31

,

57

1

,

08

x

1

+ 3

,

34

x

2

+ 20

,

04

x

3

+ 2

,

07

x

4

+ 3

,

71

x

5

= 32

,

31

3

,

15

x

1

+ 4

,

79

x

2

+ 2

,

32

x

3

+ 15

,

17

x

4

+ 1

,

11

x

5

= 41

,

71

1

,

45

x

1

+ 3

,

79

x

2

+ 4

,

21

x

3

+ 1

,

58

x

4

+ 20

,

01

x

5

= 32

,

62

10.

15

,

98

x

1

+ 2

,

32

x

2

+ 4

,

78

x

3

+ 1

,

03

x

4

+ 1

,

07

x

5

= 26

,

21

1

,

32

x

1

+ 17

,

08

x

2

+ 2

,

71

x

3

+ 1

,

58

x

4

+ 4

,

53

x

5

= 28

,

80

5

,

18

x

1

+ 1

,

48

x

2

+ 19

,

18

x

3

+ 1

,

18

x

4

+ 2

,

13

x

5

= 30

,

33

2

,

47

x

1

+ 3

,

71

x

2

+ 1

,

57

x

3

+ 9

,

91

x

4

+ 0

,

54

x

5

= 28

,

11

1

,

45

x

1

+ 2

,

81

x

2

+ 4

,

07

x

3

+ 1

,

37

x

4

+ 10

,

96

x

5

= 22

,

03

1.7.

Примеры процедур в среде Maple

1.7.1.

Метод Гаусса

> restart;

11


background image

> GaussSystem:=proc(a,b,n)
# a — массив коэффициентов матрицы А
# b — массив коэффициентов вектора B
# n — порядок системы линейных уравнений

local k,i,j,x,c,sum;

# k,i,j — переменные циклов
# x — массив неизвестных переменных (решение системы линейных

уравнений)

# прямой ход метода Гаусса (т.е. приведение системы к треугольному

виду)

for k from 1 to n-1 do
for i from k+1 to n do

c[i-1]:=a[i,k]/a[k,k];
b[i]:=b[i]-c[i-1]*b[k];
for j from k to n do

a[i,j]:=a[i,j]-c[i-1]*a[k,j];

end do;

end do; end do;

# обратный ход метода Гаусса

x[n]:=b[n]/a[n,n]:
for i from n-1 by (-1) to 1 do

sum:=0;
for j from i+1 to n do

sum:=sum+a[i,j]*x[j]:

end do;
x[i]:=(b[i]-sum)/a[i,i]:

end do;
for i from 1 to n do # вывод результата

print(evalf(x[i])):

end do;
end proc;

# ввод коэффициентов матрицы A и вектора B

> a[1,1]:=23.81837: a[1,2]:=2.33377: a[1,3]:=-0.73872: a[1,4]:=0.85797:
a[1,5]:=-0.67457:
> a[2,1]:=-1.59171: a[2,2]:=29.48598: a[2,3]:=1.81520: a[2,4]:=3.90203:
a[2,5]:=-0.57008:
> a[3,1]:=-0.15720: a[3,2]:=1.44805: a[3,3]:=21.33172: a[3,4]:=2.64148:
a[3,5]:=3.36273:
> a[4,1]:=-3.29147: a[4,2]:=2.64912: a[4,3]:=2.16798: a[4,4]:=26.72888:
a[4,5]:=1.21258:

12


background image

> a[5,1]:=-1.55251: a[5,2]:=2.73236: a[5,3]:=2.00201: a[5,4]:=-1.97732:
a[5,5]:=29.53347:
> b[1]:=1.77836: b[2]:=0.10234: b[3]:=3.82426: b[4]:=-2.71881:
b[5]:=0.72844:

Проверим работу процедуры
> GaussSystem(a,b,5);

0.08367486810
0.01069853036

0.1913458028

-0.1083505631

0.007848515159

1.7.2.

Метод простой итерации

> restart;
> piter:=proc(a,b,x,t,n,eps) # Решение систем линейных уравнений

(Метод простых итераций)

# a — массив коэффициентов матрицы А
# b — массив коэффициентов вектора B
# x — произвольное начальное приближение к решению системы
# t — произвольная постоянная (

t

0

)

# n — порядок системы линейных уравнений
# eps — точность с которой требуется найти решение системы

local i,j,k,c,x1,f;

# i, j, k — переменные циклов
# с — массив элементов матрицы C: С=E-t*A
# x1 — приближение к точному решению системы
# f — логическая переменная

for i from 1 to n do

for j from 1 to n do

# заполнение массива элементами матрицы C: С=E-t*A

if i=j then c[i,j]:=1-t*a[i,j]
else c[i,j]:=-t*a[i,j]: end if;

end do; end do;
for i from 1 to n do x1[i]:=0;

for j from 1 to n do
x1[i]:=x1[i]+c[i,j]*x[j]; # вычисление первого приближения
end do;

x1[i]:=x1[i]+t*b[i];

13


background image

end do;
f:=false;
for k from 1 to n do

# проверка условия выхода

if abs(x[k]-x1[k])>eps then f:=true; end if;

end do;
for i from 1 while(f=true) do

for j from 1 to n do

# переобозначение приближения к решению системы

x[j]:=x1[j]:

end do;
for k from 1 to n do x1[k]:=0;

for j from 1 to n do

# вычисление последующих приближений

x1[k]:=x1[k]+c[k,j]*x[j];

end do;

x1[k]:=x1[k]+t*b[k];
end do;
f:=false;
for k from 1 to n do

# проверка условия выхода

if abs(x[k]-x1[k])>eps then f:=true; end if;

end do;

end do;
for i from 1 to n do

print(x1[i]);

end do;
end proc;

# ввод коэффициентов матрицы

A

, вектора

B

и начального произ-

вольного приближения к решению системы

> a[1,1]:=7: a[1,2]:=5: b[1]:=19:
> a[2,1]:=1: a[2,2]:=3: b[2]:=5:
> x[1]:=0: x[2]:=0:
Проверим работу процедуры
> piter(a,b,x,0.0001,2,0.00001);

2.049543068

0.9501628063

14


background image

1.7.3.

Метод Гаусса – Зейделя

> restart;
> Zeidel:=proc(a,b,x,n,eps)
# a — массив коэффициентов матрицы А
# b — массив коэффициентов вектора B
# x — произвольное начальное приближение к решению системы
# n — порядок системы линейных уравнений
# eps — точность с которой требуется найти решение системы

local i,j,k,z,x0,x1,f;

# i, j, k, z — переменные циклов
# x0 — предыдущее приближение к точному решению системы
# x1 — последующее приближение к точному решению системы
# f — логическая переменная
# поиск первого и второго приближения к решению системы линей-

ных уравнений

for i from 1 to n do x0[i]:=0; x1[i]:=0;

for j from 1 to n do

if (i<j)and(i<>j) then x0[i]:=x0[i]-a[i,j]*x[j]
elif (i>j)and(i<>j) then x0[i]:=x0[i]-a[i,j]*x1[j]; end if;

end do;
x1[i]:=1/a[i,i]*(b[i]+x0[i]);

end do;
f:=false;
for i from 1 to n do

# проверка условия выхода

if abs(x1[i]-x[i])>eps then f:=true end if;

end do;
for k from 1 while (f = true) do

for j from 1 to n do

x[j]:=x1[j];

end do;
for i from 1 to n do x0[i]:=0; x1[i]:=0;

for j from 1 to n do

if (i<j) and (i<>j) then x0[i]:=x0[i]-a[i,j]*x[j]
elif (i>j) and (i<>j) then x0[i]:=x0[i]-a[i,j]*x1[j]
end if;

end do;
x1[i]:=1/a[i,i]*(b[i]+x0[i]);
end do;

15