
Практична робота № 6
Тема: Розв’язування систем лінійних алгебраїчних рівнянь (СЛАР) ітераційними методами.
Ідея ітераційних методів розв’язування СЛАР полягає в послідовному обчисленні векторів рішень, починаючи з деякого вибраного початкового наближення. Якщо ці вектори утворюють послідовність наближень, що сходиться, то розв’язування знайдено. Ефективність ітераційних методів визначається швидкістю збіжності послідовних наближень до розв’язування.
Алгоритм ітераційних методів складається з послідовного виконання трьох кроків:
1. На першому кроці виконується аналіз СЛАР і перетворення її до виду, зручного для ітерації.
2. На другому кроці будується ітераційний процес і задається початкове наближення.
3. На третьому кроці перевіряється збіжність чергового отриманого наближення до точного розв’язку і оцінка похибки отриманого наближення.
3.1 Метод простої ітерації
Алгоритм методу простої ітерації розглянемо на прикладі.
Приклад 1.
Нехай потрібно знайти розв’язок СЛАР.
4х1 – х2 + х3 = 7
4х1 –8х2 + х3 = -21 (1)
-2х1 + х2 + 5х3 = 15
1. Перетворимо систему до виду, зручного для ітерацій.
х1 = (7+ х2 - х3 )/4
х2 = (21+4х1+ х3)/8 (2)
х3 = (15 + 2х1 + х2 )/5
2. Це дозволить побудувати ітераційний процес
х1(k+1) = (7+ х2(k) - х3(k) )/4
х2(k+1) = (21+4х1(k)+ х3(k))/8 (3)
х3(k+1) = (15 + 2х1(k) + х2(k) )/5
Отже, для отримання нових значень вектора наближень ітерація використовує старі значення, отримані на попередньому кроці.
Покажемо, що якщо почати з точки Р0=[1;2;2], то ітерація сходиться до розв’язку х=[2;4;3].
Підставимо значення вектора Р0=[1;2;2] в праву частину кожного рівняння (3) для отримання нових значень.
Виконаємо обчислення значень в Matlab
>> х1=7/4
х1 =1.7500
>> х2=27/8
х2 = 3.3750
>> х3=15/5
х3 = 3
Нове наближення Р1=[1.7500;3.3750;3.00] ближче до розв’язування X=(2;4;3) ніж Р0. Для отримання нових значень наближення в кожне рівняння системи (3) підставляємо координати Р1 і т.д. до отримання розв’язку із заданою точністю.
Формула (3) задає ітераційний процес обчислення нових координат вектора наближень через старі координати.
3. Для перевірки збіжності чергового отриманого наближення Рк до точного розв’язку X=(2;4;3) після кожної ітерації обчислюємо різницю координат векторів Рк і X
||Pк-X||
Обчислення продовжуються поки ця різниця або не досягне заданої похибки eps, або не перевищить заданого числа ітерацій.
Для реалізації алгоритму цього методу в Matlab створимо два m-файли:
Файл програму iter1.m, яка задає вхідні умови і універсальну файл-функцію jaсobi.m, що реалізує метод простої ітерації.
Файл iter1.m
%Розв'язок СЛАР методом простої ітерації
%А – матриця коефіцієнтів початкового рівняння, B – вектор вільних членів, P – вектор початкових наближень, delta – точність обчислень, max – максимальне число ітерацій.
A=[4 -1 1
4 -8 1
-2 1 5];
B=[7;-21;15];
P=[1;2;2];
delta=0.0001;
max=20;
[X]=jacobi(A,B,P,delta,max)
A*X
%Виклик функції, що реалізує ітераційний алгоритм знаходження коренів СЛАР за методом простої ітерації. Результуючий аргумент X – вектор коренів.
[X]=jacobi(A,B,P,eps,max)
A*X
Файл jaсobi.m
% Розв'язок СЛАР методом простої ітерації
function X=jacobi(A,B,P,delta,max)
N=length(B); % N - кількість рівнянь СЛАР
%цикл по заданій кількості ітерацій
for k=1:max
for j=1:N
%цикл обчислення к-го наближення для всіх невідомих xj
% оператор A(j,[1:j-1,j+1:N] вибирає всі елементи в j-й рядку матриці, окрім елементів в j-м стовпці (тобто А(j,j)). X(j) – елементи вектора-рядка X.
X(j)=(B(j)-A(j,[1:j-1,j+1:N])*P([1:j-1,j+1:N]))/A(j,j);
end
%для знаходження різниці координат векторів X і P використовуються функції: abs – модуль числа і norm – обчислення норми Евкліда. X' – транспонований вектор-стовпець.
err=abs(norm(X'-P));
relerr=err/(norm(X)+eps);
P=X';
if (err<delta)|(relerr<delta)
break
end
end
X=X';
Розв’язок:
X =
1.9999
3.9999
2.9999
Цей метод може використовуватися для СЛАР певного типу, а саме, для систем, в яких матриця А – строго діагонально домінуюча.
Це означає виконання умови
|akk|> |akj|, j=1,N, j k
Іншими словами, в кожному рядку матриці величина елемента на головній діагоналі повинна перевищувати суму величин решти елементів в рядку.
Дійсно, легко перевірити, що матриця А нашої СЛАР строго домінуюча.
|4|>|-1|+|1|
|-8| > |-1|+|1|
|5|>|-2|+|1|