Чисельно стійке явне рішення малої лінійної системи


11

У мене неоднорідна лінійна система

Ax=b

де - дійсна матриця з . Гарантовано, що нульовий простір має нульовий вимір, тому рівняння має унікальну обернену . Оскільки результат потрапляє в праву частину ODE, яку я маю намір вирішити за допомогою адаптивного методу, важливо, щоб рішення було рівним щодо невеликих варіацій елементів і . Через цю вимогу та малу розмірність я думав реалізувати явні формули дляn × n n 4 A x = A - 1 b A b A - 1 bAn×nn4Ax=A1bAbA1b. Елементи можуть бути рівно нульовими або приймати дуже різні значення. Моє запитання, чи це має для вас сенс і чи для цього відомі стійкі вирази. Я кодую в C для систем x86.


Я знаю, що це настає дуже пізно, але ось моя пропозиція: так як ліквідація Гаусса із сумарним обертанням, як відомо, є стабільною, це може мати сенс жорсткого кодування алгоритму для невеликих розмірів. Скручування ускладнює матерію, оскільки існує способу вибору послідовних стрибків, що призводять до різних наборів формул; Ви можете зменшити цю складність, замінивши те, що потрібно замінити, зменшивши кількість випадків до . ( n ! ) 2 1 2 + 2 2 + n 2(n!)2(n!)212+22+n2
Ів Дауст

Відповіді:


6

Перш ніж реалізувати явні формули, я поставив би собі запитання: "чи варто це?":

  • Чи варто витрачати час на написання, налагодження та перевірку цих явних формул, тоді як ви могли з легкістю зв’язатись із BLAS + LAPACK, які використовують класичне усунення Гаусса?
  • Чи очікуєте ви отримати стабільність? Я не думаю, що програмування явних формул (як правило Крамера) дасть вам кращу стабільність, навпаки.
  • Ви очікуєте набрати швидкість? Ви вже профілювали всю свою програму? Яка частка часу витрачається на вирішення систем hese 4x4?
  • Яка ймовірність того, що за рік ви вдосконалите свою модель і вам потрібно 5 рівнянь замість 4?

Моя порада: спочатку скористайтесь комбінацією BLAS / LAPACK, подивіться, чи працює вона, профіліруйте всю програму, попросіть студента реалізувати явні формули (вибачте, що тут є саркастичними) та порівняйте швидкість та надійність.


Докладні зусилля, необхідні для здійснення цього, - це приблизно 15 хвилин, тому що я просто ввожу загальну матрицю 1x1, 2x2, 3x3 та 4x4 в CAS (Maple для мене) та інвертую її. Він повинен повернути явний (подібний до С) результат (нібито заснований на правилі Крамера). Ваш другий пункт - це саме моя стурбованість. В результаті вийде продукція матричних елементів вищого порядку. Очевидно, це може ввести помилки через "майже скасування" різних термінів. Але питання полягає в тому, чи можна записати результат у формі, де цього не відбувається. Швидкість не є головним питанням у цьому місці.
highsciguy

6

Єдиний явний зворотний результат, про який я знаю, - це правило Креймера , яке нещодавно було показано, що його можна обчислити в час (як Гауссова елімінація; невпевненість константи перед провідним фактором, хоча).O(n3)

Матриця, обернена є гладкою функцією тих пір, як , і рішення , безумовно, є гладкою функцією , до тих пір, поки права частина ODE є гладкою Функція і ви уникаєте випадків, коли має дефіцит, я думаю, що правий бік вирівняється. (Тут я вважаю гладким, щоб означати "принаймні двічі безперервно диференційованих".)AAdet(A)0xbxA

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

Проблема з Правилом Крамера полягає в тому, що його властивості стійкості невідомі, за винятком (який стійкий вперед, але не стійкий назад). (Див. Точність та стійкість числових алгоритмів , 2-е видання, Н. Хігхем.) Це не вважається надійним алгоритмом; Гауссова ліквідація за допомогою часткового повороту (GEPP) є сприятливою.n=2

Я б очікував, що проблема з використанням BLAS + LAPACK для здійснення GEPP у вирішенні ODE буде будь-якою кінцевою диференціацією, що використовується в неявному методі ODE. Я знаю, що люди вирішували лінійні програми як частину правого оцінювання, і оскільки вони це зробили наївно (просто підключили лінійну програму до правої частини, викликаючи алгоритм симплекс), вони значно знизили точність їх обчислюваного рішення та істотно збільшив час, необхідний для вирішення проблеми. Мій лаборант придумав, як вирішити подібні проблеми набагато ефективніше, точніше; Мені доведеться подивитися, чи не вийшла його публікація. У вас може виникнути аналогічна проблема незалежно від того, ви вирішили використовувати GEPP або Cramer's Rule.

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

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


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

1
Я маю на увазі "щонайменше двічі безперервно диференціюється". Я думаю, що обернена карта матриці нескінченно безперервно диференціюється для всіх таких, що . Adet(A)0
Джефф Оксберрі

Ваш коментар про "кінцеве розмежування, що використовується в неявному методі ODE", стосується мене. Так як розмірність від значно менше , ніж розмір моєї системи ОДУ (ця матриця виникає лише у відображенні декількох змінних), надійність набагато важливіше на даному етапі , ніж швидкість. Тим більше, що на стадії розробки я ніколи не дізнаюся, де виникають числові помилки, якщо я не переконуюсь у безпеці окремих компонентів. nA
highsciguy

-2

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


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

Я не вважаю цю відповідь такою негативною, як інші, здається, бачать її. Звичайно, питання стабільності існує і для явних результатів. Але я вважаю, що ctNGUYEN просто хотів сказати приблизне рішення, таке як розширення в невеликій кількості, насправді може бути більш точним, ніж повний явний результат, який, я думаю, є правильним. У певному сенсі я прошу явних рішень, які стосуються таких важких випадків, щоб формула завжди була стійкою.
highsciguy
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.