Як вибрати метод розв’язування лінійних рівнянь


31

Наскільки мені відомо, існують 4 способи вирішення системи лінійних рівнянь (виправте мене, якщо їх більше):

  1. Якщо матриця системи є повноцінною квадратною матрицею, ви можете використовувати правило Крамера;
  2. Обчислити зворотну або псевдоінверсію системної матриці;
  3. Використовуйте матричні способи розкладання (гауссова чи Гауссова-Йорданська елімінація вважається розкладанням LU);
  4. Використовуйте ітераційні методи, такі як метод спряженого градієнта.

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

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

Наприклад, метод спряженого градієнта використовується для розв’язання рівнянь, де матриця є симетричною і позитивно визначеною, хоча вона також може бути застосована до будь-яких лінійних рівнянь шляхом перетворення в . Також для отримання позитивно визначеної матриці ви можете використовувати метод розкладання Холеського для пошуку рішення. Але я не знаю, коли вибрати метод КГ та коли вибрати розклад Холеського. Моє відчуття, що нам краще використовувати метод CG для великих матриць.Ax=bATAx=ATb

Для прямокутних матриць ми можемо використовувати QR розкладання або SVD, але я знову не знаю, як вибрати одну з них.

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


1
Привіт @chaohuang, і ласкаво просимо до SciComp! Ви можете побачити це обговорення: scicomp.stackexchange.com/questions/81/…
Пол

Привіт @Paul, дякую за ваші коментарі, це нитка лише про рідкісні матриці чи будь-яку матрицю?
чаохуанг

6
Ваше запитання має масштабний обсяг і може бути занадто широким для формату запитань і запитів, який ми маємо тут, на зміні stackexchange ... чи існує певний клас матричної системи, який вас цікавить?
Павло

3
@chaohuang Існує чимало книг на цю тему. Це питання трохи схоже на те, щоб запитати лікаря, як вони обирають методи лікування «загалом». Якщо ви хочете задати питання, не характерне для певного класу проблем, вам слід вкластися в роботу, щоб достатньо ознайомитися з полем, щоб задати щось точне. В іншому випадку поясніть конкретну проблему, яка вас хвилює.
Джед Браун

2
З FAQ: Якщо ви можете уявити всю книгу, яка відповідає на ваше запитання, ви занадто багато запитуєте. З цим питанням пов’язані цілі журнали та сотні книг.
Девід Кетчесон

Відповіді:


45

Ваше запитання трохи схоже на запитання, яку викрутку вибрати в залежності від приводу (слот, Phillips, Torx, ...): Крім того, що їх занадто багато , вибір також залежить від того, ви хочете лише закрутити один гвинт або зібрати весь набір бібліотечних полиць. Тим не менше, частково відповідаючи на ваше запитання, ось деякі питання, про які слід пам’ятати, вибираючи метод розв’язання лінійної системи . Я також обмежуся оберненими матрицями; випадки над- чи недостатньо визначених систем - це інша справа і справді повинні бути окремими питаннями.Ax=b

Як ви правильно зазначали, варіанти 1 і 2 виправдані: обчислення та застосування зворотної матриці - надзвичайно погана ідея, оскільки вона набагато дорожча і часто чисельно менш стабільна, ніж застосування одного з інших алгоритмів. Це залишає вам вибір між прямими та ітераційними методами. Перше, що слід врахувати - це не матриця , а те, що ви очікуєте від числового рішення :Ax~

  1. Наскільки точно це повинно бути? Чи має вирішувати систему до точності машини, чи ви задоволені задоволенням (скажімо) , де - точне рішення?x~x~x~x<103x
  2. Як швидко вам це потрібно? Єдиною релевантною метрикою тут є годинний годинник на вашій машині - метод, який ідеально масштабується на величезному кластері, може бути не найкращим вибором, якщо у вас немає жодної з них, але у вас є одна з цих блискучих нових карт Tesla.

Оскільки немає безкоштовного обіду, зазвичай, ви повинні вирішити питання про компроміс між двома. Після цього ви починаєте дивитися на матрицю (і ваше обладнання), щоб визначитися з хорошим методом (а точніше, методом, для якого ви можете знайти хорошу реалізацію). (Зверніть увагу, як я уникав писати тут "найкраще" ...) Найбільш релевантні властивості тутA

  • Структура : Is симетричні? Він щільний чи розріджений? Пов’язаний?A
  • Ці власні значення : є чи вони все позитивні (тобто є позитивно визначена)? Вони кластеризовані? Чи мають деякі з них дуже малу чи дуже велику величину?A

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

  • Якщо вам дуже потрібна (близька до) точна машина для вашого рішення, або якщо ваша матриця невелика (скажімо, до рядків), важко перемогти прямі методи, особливо для щільних систем (оскільки в цьому випадку кожне множення матриці буде , і якщо вам потрібно багато ітерацій, це може бути далеко не від потрібного прямому методу). Також розкладання LU (з поворотом) працює для будь-якої незворотної матриці, на відміну від більшості ітеративних методів. (Звичайно, якщо симетричний і позитивно визначений, ви використовуєте Cholesky.)1000O(n2)O(n3)A

    Це справедливо і для (великих) розріджених матриць, якщо у вас не виникають проблеми з пам'яттю: Розріджені матриці взагалі не мають розрідженого розкладання LU, і якщо фактори не вписуються в (швидку) пам'ять, ці методи стають непридатними.

    Крім того, прямі методи були навколо в протягом довгого часу, і дуже високого якість існує програмне забезпечення (наприклад, UMFPACK, епідемічний паротит, SuperLU для розріджених матриць) , яка може автоматично використовувати зонний структуру .A

  • Якщо вам потрібна менша точність або ви не можете використовувати прямі методи, виберіть метод Крилова (наприклад, CG, якщо - симетричний позитивний певний, GMRES або BiCGStab, якщо ні) замість стаціонарного методу (наприклад, Якобі або Гаус-Сейделя): Це зазвичай працюють набагато краще, оскільки їх конвергенція не визначається спектральним радіусом а (квадратним коренем) числа умови і не залежить від структури матриці. Однак, щоб отримати дійсно хороші показники від методу Крилова, потрібно вибрати хороший попередній умова для своєї матриці - і це скоріше ремесло, ніж наука ...AA

  • Якщо вам неодноразово потрібно вирішувати лінійні системи з однаковою матрицею та різними правими сторонами, прямі методи все ще можуть бути швидшими, ніж ітеративні методи, оскільки вам потрібно обчислити декомпозицію лише один раз. (Це передбачає послідовне рішення; якщо у вас одночасно всі праві сторони, ви можете використовувати блокові методи Крилова.)

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

Оскільки ви попросили посилань у коментарях, ось деякі підручники та оглядові документи, щоб розпочати роботу. (Жодне з них - ні набір - не є вичерпним; це питання занадто широке і занадто багато залежить від вашої конкретної проблеми.)


2
Мені подобається ваша аналогія викрутки!
Пол

@chaohuang Якщо це відповів на ваше запитання, слід прийняти його. (Якщо цього не сталося,
сміливо зазначте

@ChristianClason прийняв це. Я чекав і сподівався, що хтось може пролити трохи світла на питання прямокутних матриць. Оскільки минуло тривалий час, я думаю, ніколи не буде такої відповіді :(
chaohuang

@chaohuang Дякую Якщо вас все ще цікавлять прямокутні матриці, вам слід поставити (зв'язане) запитання на тему "Як вибрати метод розв'язання невизначених систем".
Крістіан Класон

Тут посилання на використання ітеративних методів для розв’язання великих розріджених систем лінійних рівнянь.
chaohuang


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.