Лабы / 3
.docМИНИСТЕРСТВО РОССИЙСКОЙ ФЕДЕРАЦИИ ПО СВЯЗИ И ИНФОРМАТИЗАЦИИ Московский технический университет связи и информатики
Кафедра вычислительной математики и программирования
Численные методы и оптимизация Лабораторная работа №3 по теме: ”Методы решения систем линейных уравнений”
Выполнил: Востропятов Н. А.
Группа: УИ0301
Вариант: №9
Проверил: Митихин В. Г.
1. Условие.
Даны системы линейных уравнений для решения методами итерации и прогонки соответственно:

Точность нахождения корней E=10-3.
2. Исследование системы №1.
Система сходится, если выполняется хотя бы одно из условий:
,
но для системы в заданном виде ни одно
из условий не выполняется.
Приведём систему к виду, удобному для итерации:
-
Поставим 2 последних уравнения в начало, а на место третьего запишем сумму 1-го и третьего:

-
Разделим каждое уравнение на 10, для обеспечения хотя бы одного из условий сходимости:

Разрешим 1 уравнение относительно x1,
2 относительно x2 и
3 относительно x3:

Составим матрицы коэффициентов, свободных членов и определим норму:

3. Оценка теоретического количества шагов метода итерации.
Теоретическое количество шагов k при точности E определяется из следующего неравенства:

4. Программа.
Вырезка из модуля для программы, содержащего процедуры нахождения корней систем линейных уравнений методом итерации (язык программирования - Паскаль):
procedure iter(mat:mymatr;num:byte;n:byte;var res:myrests;var it:byte);
var acc,i,j:byte;
resprev:array[1..8] of real;
s:real;
begin
clrscr;
for i:=1 to n do resprev[i]:=mat[num,n+1,i];
it:=0;
repeat
for i:=1 to n do
begin
s:=0;
for j:=1 to n do s:=s+mat[num,j,i]*resprev[j];
res[i]:=mat[num,n+1,i]+s;
end;
it:=it+1;
acc:=0;
for i:=1 to n do if abs(res[i]-resprev[i])<=1E-3 then acc:=acc+1;
for i:=1 to n do
begin
write(it:2,' x',i,'=',res[i]:6:3,', ');
resprev[i]:=res[i];
end;
writeln;
until (acc=n)or(it>=150);
writeln('Выполнено итеpаций: ',it);
write('Нажмите любую клавишу...');
repeat until keypressed;
end;
Результат выполнения программы:
1 x1=-0.464, 1 x2= 3.217, 1 x3= 2.042,
2 x1=-0.015, 2 x2= 2.883, 2 x3= 1.824,
3 x1=-0.118, 3 x2= 2.923, 3 x3= 1.639,
4 x1=-0.239, 4 x2= 3.016, 4 x3= 1.678,
5 x1=-0.224, 5 x2= 3.014, 5 x3= 1.729,
6 x1=-0.192, 6 x2= 2.990, 6 x3= 1.723,
7 x1=-0.193, 7 x2= 2.989, 7 x3= 1.710,
8 x1=-0.201, 8 x2= 2.995, 8 x3= 1.710,
9 x1=-0.202, 9 x2= 2.995, 9 x3= 1.713,
10 x1=-0.200, 10 x2= 2.994, 10 x3= 1.714,
11 x1=-0.199, 11 x2= 2.994, 11 x3= 1.713,
Выполнено итераций: 11
Рассчитаем погрешность расчетов, основываясь на результаты программного пакета MathCAD 12:
![]()
5. Решение системы №2 методом прогонки.
Вырезка из модуля для программы, содержащего процедуры нахождения корней систем линейных уравнений методом прогонки (язык программирования - Паскаль):
procedure prog(mat:mymatr;num:byte;n:byte;var res:myrests);
var i:byte;
t,z:array[1..8] of real;
begin
z[1]:=-mat[num,2,1]/mat[num,1,1];
t[1]:=mat[num,n+1,1]/mat[num,1,1];
for i:=2 to n-1 do
begin
z[i]:=-mat[num,i+1,i]/(mat[num,i-1,i]*z[i-1]+mat[num,i,i]);
t[i]:=(mat[num,n+1,i]-mat[num,i-1,i]*z[i-1])/(mat[num,i-1,i]*z[i-1]+mat[num,i,i]);
end;
res[n]:=(mat[num,n+1,n]-mat[num,n-1,n]*t[n-1])/(mat[num,n,n]+mat[num,n-1,n]*z[n-1]);
for i:=n-1 downto 1 do
res[i]:=z[i]*res[i+1]+t[i];
end;
Результат выполнения программы:
x1= 0.677, x2= 1.820, x3= 1.101
6. Решение систем с помощью программного пакета MathCAD 12.
Решим первую систему:

Решим вторую систему:

