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

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

.pdf
Скачиваний:
5
Добавлен:
21.05.2015
Размер:
153.74 Кб
Скачать

19, 27x1 + 3, 42x2 + 4, 27x3 + 1, 21x4 + 2, 32x5 = 33, 91 4, 18x1 + 20, 16x2 + 5, 18x3 + 2, 01x4 + 1, 03x5 = 52, 72

6.1, 32x1 + 4, 78x2 + 17, 97x3 + 1, 92x4 + 1, 36x5 = 32, 13

5, 21x1 + 5, 01x2 + 1, 31x3 + 15, 03x4 + 2, 70x5 = 34, 27

3, 93x1 + 4, 81x2 + 1, 23x3 + 2, 69x4 + 18, 78x5 = 36, 25

21, 23x1 + 3, 04x2 + 1, 25x3 + 2, 97x4 + 4, 15x5 = 31, 39 3, 47x1 + 15, 76x2 + 2, 04x3 + 3, 56x4 + 4, 17x5 = 31, 04

7.1, 32x1 + 2, 29x2 + 10, 03x3 + 4, 01x4 + 1, 03x5 = 28, 71

5, 21x1 + 3, 87x2 + 1, 39x3 + 12, 94x4 + 4, 49x5 = 29, 29

2, 07x1 + 5, 32x2 + 1, 87x3 + 3, 54x4 + 13, 56x5 = 28, 23

15, 21x1 + 3, 06x2 + 2, 31x3 + 1, 74x4 + 3, 78x5 = 28, 41 1, 87x1 + 12, 97x2 + 2, 45x3 + 3, 29x4 + 1, 79x5 = 24, 82

8.2, 34x1 + 1, 83x2 + 10, 15x3 + 1, 35x4 + 1, 98x5 = 27, 80

4, 25x1 + 3, 67x2 + 3, 77x3 + 18, 19x4 + 1, 02x5 = 34, 67

1, 84x1 + 2, 37x2 + 1, 03x3 + 3, 04x4 + 10, 07x5 = 19, 38

17, 13x1 + 3, 21x2 + 4, 17x3 + 1, 23x4 + 1, 45x5 = 28, 42 3, 18x1 + 18, 32x2 + 3, 44x3 + 1, 31x4 + 4, 01x5 = 31, 57

9.1, 08x1 + 3, 34x2 + 20, 04x3 + 2, 07x4 + 3, 71x5 = 32, 31

3, 15x1 + 4, 79x2 + 2, 32x3 + 15, 17x4 + 1, 11x5 = 41, 71

1, 45x1 + 3, 79x2 + 4, 21x3 + 1, 58x4 + 20, 01x5 = 32, 62

15, 98x1 + 2, 32x2 + 4, 78x3 + 1, 03x4 + 1, 07x5 = 26, 21 1, 32x1 + 17, 08x2 + 2, 71x3 + 1, 58x4 + 4, 53x5 = 28, 80

10.5, 18x1 + 1, 48x2 + 19, 18x3 + 1, 18x4 + 2, 13x5 = 30, 33

2, 47x1 + 3, 71x2 + 1, 57x3 + 9, 91x4 + 0, 54x5 = 28, 11

1, 45x1 + 2, 81x2 + 4, 07x3 + 1, 37x4 + 10, 96x5 = 22, 03

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

1.7.1.Метод Гаусса

> restart;

11

> 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

>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

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

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

f:=false;

for z from 1 to n do

if abs(x1[z]-x[z])>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]:=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:

>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:

>x[1]:=1: x[2]:=1: x[3]:=1: x[4]:=1: x[5]:=1:

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

0.08365479557

0.01070750424

0.1914082408 -0.1083504947 0.007842401791

16