Ваше запитання трохи схоже на запитання, яку викрутку вибрати в залежності від приводу (слот, Phillips, Torx, ...): Крім того, що їх занадто багато , вибір також залежить від того, ви хочете лише закрутити один гвинт або зібрати весь набір бібліотечних полиць. Тим не менше, частково відповідаючи на ваше запитання, ось деякі питання, про які слід пам’ятати, вибираючи метод розв’язання лінійної системи . Я також обмежуся оберненими матрицями; випадки над- чи недостатньо визначених систем - це інша справа і справді повинні бути окремими питаннями.Ax=b
Як ви правильно зазначали, варіанти 1 і 2 виправдані: обчислення та застосування зворотної матриці - надзвичайно погана ідея, оскільки вона набагато дорожча і часто чисельно менш стабільна, ніж застосування одного з інших алгоритмів. Це залишає вам вибір між прямими та ітераційними методами. Перше, що слід врахувати - це не матриця , а те, що ви очікуєте від числового рішення :Ax~
- Наскільки точно це повинно бути? Чи має вирішувати систему до точності машини, чи ви задоволені задоволенням (скажімо) , де - точне рішення?x~x~∥x~−x∗∥<10−3x∗
- Як швидко вам це потрібно? Єдиною релевантною метрикою тут є годинний годинник на вашій машині - метод, який ідеально масштабується на величезному кластері, може бути не найкращим вибором, якщо у вас немає жодної з них, але у вас є одна з цих блискучих нових карт Tesla.
Оскільки немає безкоштовного обіду, зазвичай, ви повинні вирішити питання про компроміс між двома. Після цього ви починаєте дивитися на матрицю (і ваше обладнання), щоб визначитися з хорошим методом (а точніше, методом, для якого ви можете знайти хорошу реалізацію). (Зверніть увагу, як я уникав писати тут "найкраще" ...) Найбільш релевантні властивості тутA
- Структура : Is симетричні? Він щільний чи розріджений? Пов’язаний?A
- Ці власні значення : є чи вони все позитивні (тобто є позитивно визначена)? Вони кластеризовані? Чи мають деякі з них дуже малу чи дуже велику величину?A
Зважаючи на це, тоді вам доведеться заграти (величезну) літературу та оцінити різні методи, які ви знайдете для вашої конкретної проблеми. Ось кілька загальних зауважень:
Якщо вам дуже потрібна (близька до) точна машина для вашого рішення, або якщо ваша матриця невелика (скажімо, до рядків), важко перемогти прямі методи, особливо для щільних систем (оскільки в цьому випадку кожне множення матриці буде , і якщо вам потрібно багато ітерацій, це може бути далеко не від потрібного прямому методу). Також розкладання LU (з поворотом) працює для будь-якої незворотної матриці, на відміну від більшості ітеративних методів. (Звичайно, якщо симетричний і позитивно визначений, ви використовуєте Cholesky.)1000O(n2)O(n3)A
Це справедливо і для (великих) розріджених матриць, якщо у вас не виникають проблеми з пам'яттю: Розріджені матриці взагалі не мають розрідженого розкладання LU, і якщо фактори не вписуються в (швидку) пам'ять, ці методи стають непридатними.
Крім того, прямі методи були навколо в протягом довгого часу, і дуже високого якість існує програмне забезпечення (наприклад, UMFPACK, епідемічний паротит, SuperLU для розріджених матриць) , яка може автоматично використовувати зонний структуру .A
Якщо вам потрібна менша точність або ви не можете використовувати прямі методи, виберіть метод Крилова (наприклад, CG, якщо - симетричний позитивний певний, GMRES або BiCGStab, якщо ні) замість стаціонарного методу (наприклад, Якобі або Гаус-Сейделя): Це зазвичай працюють набагато краще, оскільки їх конвергенція не визначається спектральним радіусом а (квадратним коренем) числа умови і не залежить від структури матриці. Однак, щоб отримати дійсно хороші показники від методу Крилова, потрібно вибрати хороший попередній умова для своєї матриці - і це скоріше ремесло, ніж наука ...AA
Якщо вам неодноразово потрібно вирішувати лінійні системи з однаковою матрицею та різними правими сторонами, прямі методи все ще можуть бути швидшими, ніж ітеративні методи, оскільки вам потрібно обчислити декомпозицію лише один раз. (Це передбачає послідовне рішення; якщо у вас одночасно всі праві сторони, ви можете використовувати блокові методи Крилова.)
Звичайно, це лише дуже грубі вказівки: для будь-якого з перерахованих вище тверджень, ймовірно, існує матриця, для якої справжнє зворотне ...
Оскільки ви попросили посилань у коментарях, ось деякі підручники та оглядові документи, щоб розпочати роботу. (Жодне з них - ні набір - не є вичерпним; це питання занадто широке і занадто багато залежить від вашої конкретної проблеми.)