Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Искуственный интелект / ШІ / files / Лабораторна робота 6.doc
Скачиваний:
52
Добавлен:
30.05.2020
Размер:
70.14 Кб
Скачать

Практична робота № 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|