
МЕТОДИ ОБЧИСЛЕНЬ
4 Задачі лінійної алгебри
4.1 Розв’язок систем лінійних рівнянь
Будемо розглядати системи
лінійних рівнянь, в яких число невідомих
співпадає з числом рівнянь у системі
при цьому допускаємо, що існує єдиний
розв’язок такої системи.
Отже, вивчається питання про чисельний розв’язок системи такого виду:
(4.1)
де
- дійсні коефіцієнти системи;
вільні
члени системи.
Систему рівнянь (4.1) можна
подати компактніше, якщо ввести квадратну
матрицю, елементами якої є коефіцієнти
.
Тоді система (4.1) буде еквівалентною наступному матричному рівнянню:
(4.2)
де
вектор невідомих;
вектор вільних членів
системи.
Ефективність способів
розв’язку системи (4.1) багато залежить
від структури і властивостей матриці
розміру, обумовленості, симетричності,
наповненості (тобто від співвідношення
між нульовими і ненульовими елементами),
місця і специфіки розміщення ненульових
елементів та ін.
Якщо система рівнянь (4.1) має
невелике число змінних
,
то для її розв’язку застосовують формулу
Крамера
(4.3)
де
-
детермінант матриці
в якій
тий
стовпець замінений вільними членами;
- детермінант матриці
.
Інший спосіб розв’язку
системи рівнянь (4.1), який по суті
еквівалентний (4.3), це знаходження
безпосередньо із рівнянням (4.2) шляхом
множення зліва лівої і правої частин
рівнянь (4.2) на матрицю
,
що є оберненою до матриці
.
(4.4)
Не дивлячись на простоту
формул (4.3) і (4.4), воно є непридатним для
систем з великим числом невідомих,
оскільки число машинних операцій
множення зв’язаних з обчисленням
детермінанта матриці або її оберненням
пропорційно факторіалу числа невідомих
.
Наприклад, при
і при швидкодії ЕОМ 109
(операцій множення)/с на розв’язок такої
системи необхідно приблизно затратити
10141
років, що робить нереальним застосування
формул (4.3), (4.4) для систем великої
розмірності .
Метод Гауса з вибором головного елемента. Ідея методу Гауса полягає в приведенні матриці до верхньої, (нижньої) трикутної матриці у результаті чого система рівнянь (4.1) набуде також вигляду:
(4.5)
Останнє рівняння системи
(4.5) має тільки одне невідоме і його легко
розв’язати відносно
Оскільки тепер відомо, то його можна підставити в передостаннє рівняння і знайти
.
Продовжуючи цей процес, на
тому
етапі так званого зворотного
ходу Гауса, отримаємо
,
.
(4.6)
Сума у формулі (4.6) за визначенням дорівнює нулеві, якщо нижній індекс суми більший за верхній.
Тепер задача полягає у
приведені матриці
до діагонального вигляду. Це робиться
послідовним виключенням спочатку
із другого, третього ,…,
го
рівнянь, потім
із третього, …,
го
рівнянь,
із
,
…,
го
рівнянь і т. д.
На першому етапі перше рівняння
помножимо на коефіцієнт
і додамо його до другого рівняння; потім
перше рівняння множимо на коефіцієнт
і додаємо до третього рівняння і т.д.;
на
му
кроці перше рівняння множимо на
і додаємо до
того
рівняння.
Отже, після 1 кроків отримаємо систему рівнянь:
(4.7)
яка буде еквівалентною (4.1).
Нові коефіцієнти системи (4.7) (з верхнім індексом «1») перераховуються за формулами:
,
,
де
При цьому ми вважаємо, що
оскільки
система має єдиний розв’язок і не всі
коефіцієнти
дорівнюють нулю. Це значить, що завжди
рівняння з ненульовим коефіцієнтом при
змінній
можна поставити першим.
На другому етапі виключають змінну із третього і наступних рівнянь, виконуючи аналогічні операції, що і на першому етапі. У результаті отримують
де
Процес послідовного виключення
змінних можна продовжити і на
кроці отримаємо систему рівнянь (4.5), в
якій
,
(4.8)
,
,
.
Нижні індекси
змінюються від
до
.
Для полегшення запам’ятовування
формул можна скористатись правилом
прямокутника (рис. 3.9), на основній
діагоналі якого розміщені коефіцієнти
і
,
а на допоміжній коефіцієнти
і
.
Тоді коефіцієнти для наступної ітерації
обчислюються як різниці добутків
коефіцієнтів основної та допоміжної
діагоналей, що діляться на коефіцієнт
.
За таким же правилом перераховуються
і вільні коефіцієнти системи. Різниця
лише у тому, що на схемі, яка наведена
на рис. 4.1, коефіцієнт
необхідно замінити на
,
а
на
.
Степінь складності алгоритму
.
Рисунок 4.1 – Правило прямокутника
Приклад 4.1. Систему лінійних рівнянь
,
,
,
розв’язати методом Гауса.
Перший етап
Перше рівняння системи множимо на (-2) і додаємо його до другого рівняння
На наступному кроці перше рівняння множимо на (-4) і додаємо його до третього рівняння
І накінець перше рівняння множимо на 3 і додаємо його до четвертого рівняння
Отже, після першого етапу отримали наступну систему рівнянь:
,
,
,
.
Другий етап
На другому етапі виконуються кроки аналогічні крокам, що виконуються на першому етапі. Тільки вихідною системою рівнянь є система, що отримана після першого етапу обчислень.
Тепер «базовим» рівнянням
системи буде її друге рівняння. Це
рівняння множимо на
і додаємо його до третього рівняння
На другому кроці друге рівняння
множимо на
і додаємо його до четвертого рівняння.
у результаті отримаємо
Після закінчення другого етапу обчислень, отримали наступну систему рівнянь:
,
,
,
.
Третій етап
На третьому етапі «базовим»
буде третє рівняння системи, яку ми
отримали на другому етапі. Це рівняння
множимо на
і додаємо до четвертого рівняння
Після трьох етапів обчислень отримали верхню трикутну систему лінійних алгебраїчних рівнянь
,
,
,
,
розв’язок якої починаємо із
останнього рівняння. Оскільки воно
вміщує тільки одну невідому
,
то його розв’язком буде
.
Тепер знайдене значення
підставляємо у третє рівняння, яке також
вміщує тільки одне невідоме
.
У результаті розв’язку такого рівняння,
матимемо
.
Аналогічно, підставивши значення
і
у друге рівняння системи отримаємо
значення
як її розв’язок -
.
І на кінець, після підстановки значень
,
і
у перше рівняння системи знаходимо, що
.
Наведена нижче процедура SystemEqualizationAgebra1 знаходить розв’язок системи лінійних алгебраїчних рівнянь, яка подана у матрично-векторній формі (4.2)
SystemEqualizationAgebra*
А-
матриця коефіцієнтів системи розміром
nxn
b-
вектор
вільних членів системи розміром nx1
Х – вектор розв’язків системи розміром nx1
1 n=length(b)
2 Ab=[a b] об’єднання матриць Aі b
Вибір головного елементу для стовпця k
3 for k=1 to n-1
4 for r=k to n
5 ab(r)=Ab(r,k)
6 end for
7 [Y,j]=Max(abs(ab))
Міняємо місцями лінійки k та j
Створюємо нульову матрицю С розміром 1xn+1
8
9
10
11 if AB(k,k)=0
12 then error (‘Матриця А особлива. Cистема немає розв’язку’)
13 end
Процес виключення для стовпця k
14 for p=k to n+1
15 M=Ab(p,k)/Ab(k,k)
16 for r=k to n+1
17 Ab(p,r)=Ab(p,r)-M*Ab(k,r)
18 end for
19 end for
20 end for
Створюємо нульову матрицю As розміром nxn
Створюємо нульовий вектор bs розміром nx1
21 As=Ab
22 bs=b
Обчислення розв’язку методом зворотного ходу
Створюємо нульовий вектор X розміром nx1
23 X(n)=bs(n)/As(n,n)
24 for k=n-1 step -1 to 1
25 s=0
26 for r=k+1 to n
27 s=s+As(k,r)*X(r)
28 end for
29 p(k)=s
30 X(k)=(bs(k)-p(k))/A(k,k)
31 end for
32 return X
У рядках 8 – 9 процедури через
і
позначені
-ий
і
рядки відповідних матриць.
Процедура SystemEqualizationAgebra побудована так, що на кожному кроці обчислень рівняння у системі (4.1) переставляються таким чином, що у -ому рядку вибирається найбільший за модулем елемент . Це запобігає діленню на нуль і дає змогу зменшити похибки від закруглень.