Мы все знакомы со многими вычислительными методами для решения стандартной линейной системы
Однако мне любопытно, существуют ли какие-либо «стандартные» вычислительные методы для решения более общей (конечномерной) линейной системы вида
где, скажем,являются м 1 × п 1 матрица B является м 2 × п 2 матрицы, а L представляет собой линейный оператор, т 1 × п 1 матрицы в м 2 × н 2 матриц, которыйне включает векторизацию матриц, то есть преобразование всего в стандартнуюформу A x = b .
Поэтому я прошу, мне нужно , чтобы решить следующее уравнение для :
где R - двумерное преобразование Радона, R ∗ - его сопряженный, а u и f - двумерные массивы (образы). Можно векторизовать это уравнение, но это боль, особенно если мы идем в 3D.
В целом, как насчет массивов? Например, решение L A = B, где A и B - трехмерные массивы (в какой-то момент мне понадобится сделать это и с преобразованием Радона).
Заранее спасибо, и не стесняйтесь отправить меня в другой StackExchange, если вы чувствуете необходимость.
источник
Ответы:
Одна вещь, с которой вы должны быть осторожны, когда вы реализуете CG (или аналогичные итеративные подходы) с общими линейными операторами, это правильно реализовать сопряженную с вашим линейным оператором. То есть люди часто понимают правильно, но делают ошибку, реализуя .y=F(x) z=F∗(y)
Я рекомендую реализовать простой тест, который использует следующие преимущества: для любых соответствующих и , Таким образом, вы генерируете случайные значения и , запускаете их через прямую и сопряженную операции, соответственно, и вычисляете два внутренних произведения, описанные выше. Убедитесь, что они соответствуют с разумной точностью, и повторите несколько раз.x y
РЕДАКТИРОВАТЬ: что вы делаете, если ваш линейный оператор должен быть симметричным? Ну, тебе тоже нужно проверить эту симметрию. Поэтому используйте тот же тест, просто отметив, что --- примените одну и ту же операцию к и . Конечно, OP имеет как асимметричный оператор, так и симметричный оператор, чтобы иметь дело с ...F=F∗ x y
источник
linop_test.m
рутину по этой причине. Этот пакет также поддерживает матрицы, массивы и декартовы произведения в векторных пространствах.Как оказалось, поскольку моя система симметрична и положительно определена (поскольку мой линейный оператор записан как ), сопряженный градиент можно адаптировать для итерационного решения этого типа уравнений. Единственное изменение происходит при вычислении внутренних продуктов - то есть типичное вычисление внутреннего продукта в CG выглядит как или . В модифицированной версии мы используем внутренний продукт Фробениуса, который можно вычислить путем суммирования записей продукта Адамара (точечно). Т.е.R∗R+λI rTkrk pTkApk
Я подозреваю, что все пройдет хорошо, когда я обновлю 3D-массивы, хотя мне еще предстоит увидеть внутренний продукт Frobenius, определенный на 3D-массивах (я буду работать в предположении, что снова смогу просто суммировать точечный продукт).
Я все еще был бы заинтересован в более общих методах, если кто-нибудь знает о них!
источник