Розв’язування лінійної системи з матричними аргументами


10

Всі ми знайомі з багатьма обчислювальними методами для вирішення стандартної лінійної системи

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

LА=Б,
де, скажімо,А -матрицям1×н1 ,Б -матрицям2×н2 , аL - лінійний оператор, що приймаєм1×н1 матриць дом2×н2 матриць, щоне передбачає векторизації матриць, тобто перетворення всього в стандартнуформуАх=б .

Причина, яку я запитую, мені потрібно розв’язати наступне рівняння для у :

(RR+λЯ)у=f
деR - 2d перетворення Радона,його суміжне, іі- 2d масиви (зображення). Це рівняння можна векторизувати, але це біль, особливо якщо ми переходимо до 3D. u fRуf

Загалом, що з масивами? Наприклад, розв’язування де і це 3D-масиви (мені потрібно це зробити і з перетворенням Радона в якийсь момент).L A = B A BнDLА=БАБ

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


1
Можливо, ви зможете створити ефективний багаторівневий попередній кондиціонер, тоді використовуйте спряжений градієнт. У мене є аналогічна проблема, коли це досить ефективно і дуже паралельно. Якщо ви хочете прямих методів, розгляньте скорочення форми шуру, як у цій статті про рівняння Ляпунова: cs.cornell.edu/cv/ResearchPDF/Hessenberg.Schur.Method.pdf
Нік

Відмінно, дякую за реф. Мені просто доводилося ефективно працювати з CG, тому я задоволений.
icurays1

Відповіді:


9

Rну,хRe(уНх)

Одне, що ви повинні бути обережними, коли ви реалізуєте CG (або подібні ітераційні підходи) із загальними лінійними операторами, - це правильно реалізувати суміжність вашого лінійного оператора. Тобто, люди часто отримують правильно, але роблять помилку, реалізуючи .z = F ( y )у=Ж(х)z=Ж(у)

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

у,Ж(х)=Ж(у),х.
ху

EDIT: що робити, якщо ваш лінійний оператор повинен бути симетричним? Що ж, вам потрібно перевірити і цю симетрію. Тому використовуйте той самий тест, лише зазначивши, що --- застосуйте ту саму операцію до та . Звичайно, ОП має як асиметричний оператор, так і симетричний для вирішення ... x yЖ=Жху


Дякуємо @ChristianClason! Я з досвіду знаю, як можуть бути розчарувальні помилки в суміжних розрахунках. :) З нашого пакету TFOCS ми реалізували linop_test.mрозпорядок роботи. Цей пакет також підтримує матриці, масиви та декартові продукти у векторних просторах.
Майкл Грант

3

Як виявляється, оскільки моя система є симетричною і позитивно визначеною (оскільки мій лінійний оператор записаний як ), спряжений градієнт може бути адаптований для ітеративного вирішення цього типу рівнянь. Єдина модифікація відбувається при обчисленні внутрішніх продуктів - тобто типовий внутрішній обчислення продукту в CG виглядає як r T k r k або p T k A p k . У модифікованій версії ми використовуємо внутрішній продукт Frobenius, який можна обчислити шляхом підсумовування записів продукту Адамара (по точці). ТобтоRR+λЯrкТrкpкТАpк

А,Б=i,jАijБij

Я підозрюю, що це відбудеться прекрасно, коли я перейду до 3D-масивів, хоча ще не бачу внутрішнього продукту Frobenius, визначеного на 3D-масивах (я буду працювати при припущенні, що я можу знову просто підбити точковий продукт).

Мені б все-таки цікаві більш загальні методи, якщо хтось знає про якісь!

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