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

Лабы / 3

.doc
Скачиваний:
22
Добавлен:
30.04.2013
Размер:
80.9 Кб
Скачать

МИНИСТЕРСТВО РОССИЙСКОЙ ФЕДЕРАЦИИ ПО СВЯЗИ И ИНФОРМАТИЗАЦИИ Московский технический университет связи и информатики

Кафедра вычислительной математики и программирования

Численные методы и оптимизация Лабораторная работа №3 по теме: ”Методы решения систем линейных уравнений”

Выполнил: Востропятов Н. А.

Группа: УИ0301

Вариант: №9

Проверил: Митихин В. Г.

1. Условие.

Даны системы линейных уравнений для решения методами итерации и прогонки соответственно:

Точность нахождения корней E=10-3.

2. Исследование системы №1.

Система сходится, если выполняется хотя бы одно из условий:

, но для системы в заданном виде ни одно из условий не выполняется.

Приведём систему к виду, удобному для итерации:

  1. Поставим 2 последних уравнения в начало, а на место третьего запишем сумму 1-го и третьего:

  2. Разделим каждое уравнение на 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.

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

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

4

Соседние файлы в папке Лабы