МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ ”ЛЬВІВСЬКА ПОЛІТЕХНІКА ”
ІКТА
кафедра захисту інформації
ЗВІТ
до лабораторної роботи №3
з курсу:
Комп'ютерні методи дослідження інформаційних
процесів і систем
на тему:
“ ІТЕРАЦІЙНІ МЕТОДИ РОЗВ’ЯЗУВАННЯ СИСТЕМ
ЛІНІЙНИХ АЛГЕБРАЇЧНИХ РІВНЯНЬ ”
Варіант 11
Львів – 2010
Мета роботи – ознайомлення з ітераційними методами розв’язування систем лінійних алгебраїчних рівнянь.
Ітераційні методи розв’язування систем лінійних
алгебраїчних рівнянь
До ітераційних методів належать: метод простої ітерації, метод Зейделя, метод верхньої релаксації та інші.
Метод простої ітерації.
Нехай дано лінійну систему
(1)
Розглянемо матриці
Тоді систему (1) можна записати у вигляді матричного рівняння
(2)
Будемо вважати, що діагональні коефіцієнти (і = 1, 2,…, n).
Розв’яжемо перше рівняння системи (1) відносно , друге відносно і т.д. Тоді одержимо еквівалентну систему
(3)
де , при ; , при ;
; ;
Іноді кажуть, що система (3) зведена до нормального вигляду.
Введемо матриці ( та (
Систему (3) запишемо у вигляді
(4)
Систему (3) будемо розв’язувати методом послідовних наближень. За нульове наближення позначимо, наприклад, стовпчик вільних членів . Далі послідовно будуємо матриці-стовпці:
– перше наближення
– друге наближення і т.д.
Будь-яке (k + 1)-е наближення обчислюється за формулою:
, (k = 0, 1, 2, …) (5)
В розгорнутому вигляді .
Якщо послідовність наближень має границю
, (6)
то ця границя є розв’язком системи (3).
На практиці ітераційний процес припиняють, коли , де ( – гранична абсолютна похибка.
2. Завдання:
Розв’язати систему лінійних алгебраїчних рівнянь методом простої ітерації.
S = 0.2*k b = 0.2*p
k = 2 p = 1
3. Блок-схема алгоритму програми:
початок
f(x)
i=0;i<n
i++
ні
j=0;j<n ні
j++
так
i == j
так
A[i, j] := 0
A[i, j]:=f(x)
b[i]:=f(x)
i=0;i<n;
i++
ні
так
j=0;j<n; ні
j++
S:=S+f(x)
k = X[i];
X[i] = b[i] + S;
S = 0;
так
|X[i] – k|>E
i=0;i<n;
i++
ні
x[i]
кінець
f(x) = -a[i, j] / a[i, i]
f(x) = b[i] / a[i, i]
f(x) = A[i, j] * X[j]
Блок-схема алгоритму метода Main( ).
початок
I.Iterac()
кінець
5. Список ідентифікаторів констант, змінних, процедур і функцій, використаних в програмі:
i,j – змінні, що застосовуються в циклах для позначення рядків та
стовпців.
n – змінна, що містить розмір створеного масиву.
E – похибка обчислень.
S – змінна, що містить значення суми добутку коефіцієнтів і
початкових наближень елементів рядку.
I.Iterac()- функція, в якій відбувається виведення вихідної
системи на екран, знаходження допоміжних
коефіцієнтів, обчислення коренів системи рівнянь і
виведення їх на екран.
.
6. Остаточно відлагоджений текст програми згідно з отриманим завданням мовами С:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Lab_3
{
double s, p, k;
int i, j;
int n = 4;
double E = 0.0001;
double S = 0;
public Lab_3(double y, double z)
{
s = 0.2 * y;
p = 0.2 * z;
}
public void Iterac()
{
double[,] a ={{8.3,2.62+s,4.1,1.9},
{3.92,8.45,7.78-s,2.46},
{3.77,7.21+s,8.04,2.28},
{2.21,3.65-s,1.69,6.99}};
double[] b = { -10.55 + p, 12.21, 15.45 - p, -8.35 };
double[,] A = new double[n, n];
double[] X = new double[n];
Console.Clear();
Console.WriteLine(@" Розв'язок системи лінійних алгебраїчних рівнянь методом простої ітерації");
Console.WriteLine("\n");
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
if (j == 3)
Console.Write("{0} x{1} ", a[i, j], j + 1);
else
{
Console.Write("{0} x{1}", a[i, j], j + 1);
Console.Write(" + ");
}
}
Console.Write(" = " + b[i]);
Console.WriteLine("\n");
}
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
if (i == j)
A[i, j] = 0;
else
A[i, j] = -a[i, j] / a[i, i];
}
b[i] = b[i] / a[i, i];
}
for (i = 0; i < n; i++)
X[i] = b[i];
do
{
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
S += A[i, j] * X[j];
k = X[3];
X[i] = b[i] + S;
S = 0;
}
} while (Math.Abs(X[3] - k) > E);
Console.WriteLine("\nКорені рівняння:\n");
for (i = 0; i < n; i++)
Console.WriteLine("x{0}={1}", i + 1, X[i]);
}
}
class Program
{
public static void Main()
{
Lab_3 I = new Lab_3(1, 1);
I.Iterac();
Console.ReadLine();
}
}
}
7. Результати виконання програми
/
8.Висновок:
На цій лабораторній роботі я ознайомився з ітераційними методами розв’язування систем лінійних алгебраїчних рівнянь. Розробив програму для розв’язку систем лінійних алгебраїчних рівнянь методом простої ітерації.