Эксперименты лаба8,9(2курс)
.pdf19, 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