行列引数を持つ線形システムを解く


10

私たちは、標準の線形システムを解くための多くの計算方法に精通しています

Ax=b.
ただし、次の形式のより一般的な(有限次元)線形システムを解くための「標準的な」計算方法があるかどうか知りたいです。

LA=B,
ここで、Am1×n1行列、Bm2×n2行列、Lm1×n1行列からm2×n2行列を取る線形演算子、これは、行列のベクトル化、つまりすべてを標準のAx=b形式に変換することを含みません

私が尋ねる理由は、について次の方程式を解く必要があるためですu

(RR+λI)u=f
ここでR 2Dラドン変換であり、Rの随伴、両u及びf、2D配列(画像)です。この方程式をベクトル化することは可能ですが、特に3Dに移行する場合は面倒です。

より一般的には、nD配列はどうですか?たとえば、ABが3D配列である解く(ある時点でラドン変換を使用してこれを行う必要があります)。LA=BAB

今後ともよろしくお願いいたします。必要に応じて、別のStackExchangeにお送りください。


1
効果的なマルチレベル前提条件子を作成して、共役勾配法を使用できる場合があります。私はこれが非常に効果的で非常に並列化できる同様の問題を抱えています。直接的な方法が必要な場合は、リアプノフ方程式に関するこの論文のように、シュール形式への縮小を検討してください。cs.cornell.edu/ cv
Nick Alger

参考になりました。ありがとうございます。CGが上手く動いたので嬉しいです。
icurays1 2013

回答:


9

Rny,xRe(yHx)

一般的な線形演算子を使用してCG(または同様の反復アプローチ)を実装する場合に注意する必要があるのは、線形演算子の随伴要素を適切に実装することです。つまり、人々はしばしば正しく理解しますが、実装を間違えます。z = F y y=F(x)z=F(y)

次の同一性を利用する簡単なテストを実装することをお勧めします:適合すると場合、 したがって、実行することは、とランダムな値を生成し、それらをそれぞれフォワード操作と随伴操作で実行し、上記の2つの内積を計算することです。それらが妥当な精度内で一致することを確認し、数回繰り返します。、Y Y F X = F *Y X x yxy

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

編集:線形演算子が対称的であると想定されている場合はどうしますか?まあ、その対称性も検証する必要があります。したがって、 ---と同じ演算を適用することに注意して、同じテストを使用してください。もちろん、OPには非対称演算子と対称演算子の両方があります... x yF=Fxy


@ChristianClasonに感謝!私は経験から、随伴計算におけるいらいらするようなエラーがいかに起こり得るかを知っています。:)私たちのパッケージTFOCSでは、linop_test.mこの理由からルーチンを実装しました。このパッケージは、ベクトル空間での行列、配列、デカルト積もサポートします。
マイケルグラント

3

結局のところ、私のシステムは対称で正定であるため(私の線形演算子はと書かれているため)、共役勾配はこのタイプの方程式を反復的に解くように適合させることができます。唯一の変更は、内積を計算するときに行われます。つまり、CGの典型的な内積計算は、またはます。修正バージョンでは、アダマール(点ごと)積のエントリを合計することで計算できるフロベニウス内積を使用します。すなわちR T K Rのk個のP T K AのPのKRR+λIrkTrkpkTApk

A,B=i,jAijBij

3Dアレイにアップグレードすると、これはうまくいくと思いますが、3Dアレイで定義されたフロベニウスの内積はまだ確認していません(点ごとの積をもう一度合計できるという前提で作業します)。

誰かが知っているなら、私はまだもっと一般的な方法に興味があります!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.