Решение линейной системы с матричными аргументами


10

Мы все знакомы со многими вычислительными методами для решения стандартной линейной системы

Однако мне любопытно, существуют ли какие-либо «стандартные» вычислительные методы для решения более общей (конечномерной) линейной системы вида

Ax=b.

где, скажем,являются м 1 × п 1 матрица B является м 2 × п 2 матрицы, а L представляет собой линейный оператор, т 1 × п 1 матрицы в м 2 × н 2 матриц, которыйне включает векторизацию матриц, то есть преобразование всего в стандартнуюформу A x = b .

LA=B,
Am1×n1Bm2×n2Lm1×n1m2×n2Ax=b

Поэтому я прошу, мне нужно , чтобы решить следующее уравнение для :u

где R - двумерное преобразование Радона, R ∗ - его сопряженный, а u и f - двумерные массивы (образы). Можно векторизовать это уравнение, но это боль, особенно если мы идем в 3D.

(RR+λI)u=f
RRuf

В целом, как насчет массивов? Например, решение L A = B, где A и B - трехмерные массивы (в какой-то момент мне понадобится сделать это и с преобразованием Радона).nDLA=BAB

Заранее спасибо, и не стесняйтесь отправить меня в другой StackExchange, если вы чувствуете необходимость.


1
Вы можете создать эффективный многоуровневый предварительный кондиционер, а затем использовать сопряженный градиент. У меня есть похожая проблема, где она довольно эффективна и очень распараллеливаема. Если вы хотите использовать прямые методы, рассмотрите редукции к форме Шура, как в этой статье об уравнении Ляпунова: cs.cornell.edu/cv/ResearchPDF/Hessenberg.Schur.Method.pdf
Ник Алджер,

Отлично, спасибо за ссылку! Я только что заставил CG работать эффективно, поэтому я счастлив.
icurays1

Ответы:


9

Rny,xRe(yHx)

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

Я рекомендую реализовать простой тест, который использует следующие преимущества: для любых соответствующих и , Таким образом, вы генерируете случайные значения и , запускаете их через прямую и сопряженную операции, соответственно, и вычисляете два внутренних произведения, описанные выше. Убедитесь, что они соответствуют с разумной точностью, и повторите несколько раз.xy

y,F(x)=F(y),x.
xy

РЕДАКТИРОВАТЬ: что вы делаете, если ваш линейный оператор должен быть симметричным? Ну, тебе тоже нужно проверить эту симметрию. Поэтому используйте тот же тест, просто отметив, что --- примените одну и ту же операцию к и . Конечно, OP имеет как асимметричный оператор, так и симметричный оператор, чтобы иметь дело с ...F=Fxy


Спасибо @ChristianClason! Я знаю из опыта, как могут быть расстраивающие ошибки в сопутствующих вычислениях. :) В нашем пакете TFOCS мы реализовали linop_test.mрутину по этой причине. Этот пакет также поддерживает матрицы, массивы и декартовы произведения в векторных пространствах.
Майкл Грант

3

Как оказалось, поскольку моя система симметрична и положительно определена (поскольку мой линейный оператор записан как ), сопряженный градиент можно адаптировать для итерационного решения этого типа уравнений. Единственное изменение происходит при вычислении внутренних продуктов - то есть типичное вычисление внутреннего продукта в CG выглядит как или . В модифицированной версии мы используем внутренний продукт Фробениуса, который можно вычислить путем суммирования записей продукта Адамара (точечно). Т.е.RR+λIrkTrkpkTApk

A,B=i,jAijBij

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

Я все еще был бы заинтересован в более общих методах, если кто-нибудь знает о них!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.