Метод Гауса

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

Ме́тод Га́уса (англ. Gaussian elimination) — алгоритм розв'язування систем лінійних алгебраїчних рівнянь. Зазвичай під цим алгоритмом розуміють деяку послідовність операцій, що виконують над відповідною матрицею коефіцієнтів, для приведення її до трикутного вигляду, з наступним вираженням базисних змінних через небазисні.[1] Цей метод також можливо використовувати для знаходження рангу матриці, для обчислення визначника матриці, а також для обчислення обернення невиродженої квадратної матриці. Цей метод названо на честь Карла Фрідріха Гаусса (1777—1855), хоча китайські математики знали його ще 179 року н. е. (див. розділ про історію).

У методі Гауса для спрощення матриці, використовують послідовні елементарні операції перетворення матриці для модифікації матриці доки нижній лівий кут матриці не буде заповнено нулями, настільки наскільки це можливо. Існує три типи елементарних перетворень матриці: 1) Заміна двох рядків, 2) Множення рядка на не нульове число, 3) Додавання одного рядка до іншого. Використовуючи ці операції, матрицю завжди можна перетворити на верхню трикутну матрицю, а фактично і у скорочену рядкову ступінчасту форму. Як тільки всі перші коефіцієнти (ті що знаходяться ліворуч і є не нульовими входженням в кожному рядку) стають рівними 1, і кожен стовпець, який містить перший ненульовий коефіцієнт має в усіх інших місцях нулі, тоді говорять що матриця знаходиться у скороченій рядковій ступінчастій формі. Ця фінальна форма є унікальною; іншими словами, вона не залежить від того, яку послідовність перетворень буде здійснено.

Цю послідовність перетворення матриці іноді називають спрощенням або скороченням матриці.

Опис алгоритму[ред.ред. код]

Початок алгоритму.

Прямий хід: Шляхом елементарних перетворень рядків (додавань до рядка іншого рядка, помноженого на число, і переставлянь рядків) матрицю приводять до верхньотрикутного вигляду (сходинчастого вигляду).

З цього моменту починається зворотний хід. З останнього ненульового рівняння виражають кожну з базисних змінних через небазисні й підставляють до попередніх рівнянь. Повторюючи цю процедуру для всіх базисних змінних, отримують фундаментальний розв'язок.

Наприклад, треба виконати наступну послідовність перетворень (де на кожному кроці виконано декілька елементарних перетворень матриці), щоб фінальна утворена матриця прийняла свою унікальну скорочену рядкову ступінчасту форму.

Операції над рядками[ред.ред. код]

Існує три види елементарних перетворень матриць, які можуть здійснюватися над рядками матриці:

1: Заміна позиції двох рядків.
2: Множення рядка на не нульове скалярне значення.
3: Додавання до одного рядка іншого рядка помноженого на скаляр.

Якщо матриця має відношення до системи лінійних рівнянь, ці операції не змінюють результат рішення. Таким чином, якщо задачею є вирішення системи лінійних рівнянь, то використання цих перетворень може спростити задачу.

Рядкова ступінчаста форма[ред.ред. код]

У кожному рядку матриці, якщо рядок не складається із самих нулів, не нульове входження, яке знаходиться лівіше від усіх називають провідним коефіцієнтом цього рядка. Тому якщо два провідних коефіцієнти знаходяться в одному стовпці, тоді можна застосувати операцію над рядком типу 3 (див. вище) аби один з цих коефіцієнтів став нульовим. Далі, використавши операцію заміни рядків, завжди можна впорядкувати рядки таким чином, що для кожного не нульового рядка, провідний коефіцієнт знаходитиметься праворуч від провідного коефіцієнта рядка, що знаходиться вище. Якщо це так для всіх рядків, то говорять що матриця знаходиться у рядковій ступінчастій формі. Таким чином ліва нижня частина матриці містить лише нулі, і всі нульові рядки знаходяться нижче не нульових рядків. Слово "ступінчаста" використовується тут тому, оскільки можна вважати, що рядки матриці впорядковані за їх розміром, так що найбільший рядок знаходиться зверху, а найменший рядок - знизу.

Наприклад, наступна матриця знаходиться у рядковій ступінчастій формі, а її провідні коефіцієнти показані червоним.

Це є рядкова ступінчаста форма, оскільки нульовий рядок знаходиться знизу, а провідний коефіцієнт другого рядка (у третьому стовпці), знаходяться праворуч від провідного коефіцієнту першого рядка (у другому стовпці).

Говорять, що матриця знаходиться в скороченій рядковій ступінчастій формі, якщо крім усього того її провідні коефіцієнти дорівнюють 1 (що можна досягти, якщо застосувати елементарне перетворення типу 2), і в кожному стовпці, де містяться провідні коефіцієнти, усі інші входження дорівнюють нулю (що можна досягти, якщо використати елементарне перетворення типу 3).

Приклад[ред.ред. код]

Нехай необхідно простити і найти рішення наступної системи лінійних алгебраїчних рівнянь:

Запишімо розширену матрицю системи

Припустимі операції для кожного рядка[ред.ред. код]

  • переставляння рядків;
  • множення та ділення на число (окрім нуля);
  • додавання та віднімання іншого рядка (можливо помноженого чи поділеного на число).

Мета цих дій — звести квадратну матрицю, в цьому прикладі розміру 3×3, (розташовану ліворуч від вертикальної лінії) до одиничної матриці. Тоді стовпчик праворуч від лінії й буде розв'язком системи рівнянь.

Алгоритм прямого ходу[ред.ред. код]

Переберімо стовпчики матриці й здійснимо рядкові операції, щоб у кожному стовпчику:

  • діагональний елемент став дорівнювати одиниці;
  • елементи під діагональним стали дорівнювати нулеві.

Поділімо перший рядок на 2, щоб отримати 1 як перший діагональний елемент:

Додаймо до другого рядка перший, помножений на 3, щоб отримати піддіагональний елемент 0:

Додаймо до третього рядка перший, помножений на 2, щоб отримати другий піддіагональний елемент 0:

Перейдімо до наступного стовпчика.

Помножмо другий рядок на 2, щоб отримати другий діагональний елемент 1:

Віднімімо від третього рядка другий, помножений на 2, щоб отримати піддіагональний елемент 0:

Перейдімо до наступного стовпчика.

Помножмо останній рядок на −1, щоб отримати третій діагональний елемент 1:

Алгоритм зворотного ходу[ред.ред. код]

Переберімо стовпчики матриці у зворотному порядку й здійснімо рядкові операції, щоб у кожному стовпчику елементи над діагональним стали дорівнювати нулеві.

Віднімімо від другого рядка третій, щоб отримати наддіагональний елемент 0:

Додаймо до першого рядка третій, поділений на 2, щоб отримати другий наддіагональний елемент 0:

Перейдімо до наступного стовпчика.

Віднімімо від першого рядка другий, поділений на 2, щоб отримати наддіагональний елемент 0:

Застосування[ред.ред. код]

Історично, першим застосуванням методу Гауса було вирішення систем лінійних алгебраїчних рівнянь. В цьому розділі наведені деякі інші важливі застосування цього алгоритму.

Розрахунок детермінанту (визначника)[ред.ред. код]

Для того, щоб пояснити як метод Гауса може допомогти розрахувати визначник квадратної матриці, необхідно нагадати як елементарні операції над матрицями можуть змінити визначник:

  • Заміна двої рядків призводить до множення визначника на -1;
  • Множення рядка на ненульовий скаляр помножує визначник на той самий скаляр;
  • Додавання до одного рядка іншого рядка помноженого на скаляр не змінює детермінант.

Якщо при застосування Гаусового скорочення до квадратної матриці A утворено рядкову ступінчасту матрицю B, нехай d є добутком скалярів, на які було помножено детермінант, при використанні наведених вище правил. Тоді детермінант матриці A є добутком елементів діагоналі матриці B розділеним на коефіцієнт d : det(A) = ∏diag(B) / d.

Складність обчислення цим методом для матриці n×n, оцінюється лише в O(n3) необхідних арифметичних операцій, в той час як при вирішенні елементарними методами необхідно буде здійснити O(2n) або O(n!) операцій. Навіть для швидкого комп'ютера, елементарні методи стають не практичними при n більше 20.

Знаходження оберненої матриці[ред.ред. код]

Для знаходження оберненої матриці, якщо така існує застосовують різновид методу Гауса, який називають методом Гауса-Жордана. Якщо A є квадратною матрицею n на n, тоді спершу праворуч до неї доповнюють одиничну матрицю n на n, так, що утворюється блочна матриця n на 2n [A | I]. Тепер, за допомогою елементарних матричних перетворень, знаходимо скорочену рядкову ступінчасту форму цієї n на 2n матриці. Матриця A може бути оберненою тоді й тільки тоді, коли лівий блок може бути скорочений до одиничної матриці I; в такому випадку правий блок утвореної в результаті матриці є обернена матриця A−1. Якщо за допомогою алгоритму не вдається скоротити лівий блок до I, тоді A не може бути оберненою.

Наприклад, розглянемо наступну матрицю

Для того, щоб знайти обернену матриці, доповнимо її одиничною матрицею праворуч, і над утвореною матрицею 3 на 6 будемо застосовувати метод скорочення Гусса:

Виконавши операції перетворення, отримаємо скорочену рядкову ступінчасту форму цієї доповненої матриці:

Кожну операцію можна розглядати як лівий добуток на елементарну матриці. Позначивши добуток цих елементарних матриць як B, ми показали, ліворуч, що BA = I, і таким чином, B = A−1. Ця процедура знаходження оберненої матриці буде працювати для квадратних матриць будь-якого розміру.

Обчислення рангів та базисів[ред.ред. код]

Алгоритм Гауса для скорочення матриці можна застосувати до будь-якої матриці . У такому випадку, наприклад, деякі матриці можна перетворити у матрицю, що має рядкову ступінчасту форму наступного вигляду

де * є довільними входженнями і a, b, c, d, e є не нульовими входженнями. Ця ступінчаста матриця містить в собі багато корисної інформації про : ранг матриці дорівнює 5 оскільки існує 5 не нульових рядків в ; векторний простір, на який поширюються стовпці матриці має базис, що складається із першого, третього, четвертого, сьомого і дев'ятого стовпців (стовпці із a, b, c, d, e у ), а значення * вказують як можуть бути записані у вигляді лінійної комбінації базових стовпців інші стовпці із . Це є наслідком дистрибутивності скалярного добутку при вираженні лінійного відображення у вигляді матриці.

Все це застосовується і у випадку скороченої рядкової ступінчастої форми, що є частковим випадком рядкової ступінчастої форми.

Історія[ред.ред. код]

Метод Гаусового скорочення матриці згадується у китайському математичному тексті Розділ восьмий «Прямокутні масиви» із «Дев'яти розділів математичного мистецтва[en]». Його використання показано в вісімнадцяти задачах, при розв'язанні від двох до п'яти рівнянь. Перша згадка про книгу із такою назвою датується 179 роком н. е., але деякі її розділи було написано раніше, приблизно 150 року до н. е.[2][3] В третьому столітті н. е. коментарі до неї давав Лю Хуей.

Цей метод в Європі з'являється із записів Ісаака Ньютона.[4][5] В 1670, він написав, що в всіх книжках з алгебри, які були йому відомі бракувало уроку для вирішення спільних рівнянь, які тоді надавав Ньютон. Університет Кембріджу зрештою опублікував нотатки під назвою Arithmetica Universalis в 1707 набагато пізніше, після того як Ньютон вже полишив академічне життя. Нотатки широко розповсюдилися, що вже до кінця 18-го століття зробило те, що зараз називають Гаусовим скороченням, стандартним уроком у книжках із алгебри. Карл Фрідріх Гаусс в 1810 виробив систему нотації для симетричного скорочення, що була широко прийнята в 19-му столітті для вирішення нормальних рівнянь задачі найменших квадратів, яку розраховували професійні люди комп'ютери[en].[6] Алгоритм, який викладається у вищій школі був названий на честь Гауса лише в 1950-их, і є результатом плутанини, щодо історії предмету.[7]

Псевдокод[ред.ред. код]

Як описувалося вище, метод Гаусового скорочення записує дану × матрицю унікальним способом як добуток оберненої × матриці і рядкової ступінчастої матриці . Тут, це добуток матриць, що відповідає виконаній операції перетворення.

Формальний алгоритм для розрахунку із є наступним. Записуємо , що є елементом у рядку , стовпці матриці , де перший індекс елемента дорівнює 1. Перетворення відбувається поверх, це означає, що початкова матриця не зберігається і успішно заміняється матрицею .

 for k = 1 ... min(m,n):
   /* Знайти k-ий поточний елемент: */
   i_max  := argmax (i = k ... m, abs(A[i, k]))
   if A[i_max, k] = 0
     помилка "Матриця є сингулярною!"
   замінити місцями рядки(k, i_max)
   /* Виконати для всіх наступних рядків: */
   for i = k + 1 ... m:
     f := A[i, k] / A[k, k]
     /* Виконати для всіх елементів, що залишилися в даному рядку: */
     for j = k + 1 ... n:
       A[i, j]  := A[i, j] - A[k, j] * f
     /* Заповнити нижню трикутну матрицю нулями: */
     A[i, k]  := 0

Цей алгоритм трохи відрізняється від того, що описувався вище, тому що перед спрощенням змінної, він спершу заміняє рядки аби перемістити входження із більшим абсолютним значенням на позицію поточного елементу. Це поліпшує обчислювальну стійкість алгоритму.

У сучасних комп'ютерах, метод Гауса не завжди є найшвидшим алгоритмом для розрахунку рядкової ступеневої форми матриці. Існують такі бібліотеки, як BLAS, які використовують можливості апаратного забезпечення і особливості структури матриці для вибору найкращого алгоритму автоматичним чином.

Див. також[ред.ред. код]

Примітки[ред.ред. код]

  1. Ляшенко, Б.М; Кривонос, О.М.; Вакалюк, Т.А (2014). Методи обчислень. Навчально-методичний посібник для студентів фізико-математичного факультету. Житомир: Вид-во ЖДУ ім І. Франка. с. 37—39. 
  2. Calinger, (1999), pp. 234—236
  3. Timothy Gowers; June Barrow-Green; Imre Leader (8 September 2008). The Princeton Companion to Mathematics. Princeton University Press. с. 607. ISBN 978-0-691-11880-2. 
  4. Grcar, (2011a), pp. 169-172
  5. Grcar, (2011b), pp. 783-785
  6. Lauritzen,P.3
  7. Grcar, (2011b), p. 789