私たちは、標準の線形システムを解くための多くの計算方法に精通しています
私が尋ねる理由は、について次の方程式を解く必要があるためです。
より一般的には、配列はどうですか?たとえば、AとBが3D配列である解く(ある時点でラドン変換を使用してこれを行う必要があります)。
今後ともよろしくお願いいたします。必要に応じて、別のStackExchangeにお送りください。
私たちは、標準の線形システムを解くための多くの計算方法に精通しています
私が尋ねる理由は、について次の方程式を解く必要があるためです。
より一般的には、配列はどうですか?たとえば、AとBが3D配列である解く(ある時点でラドン変換を使用してこれを行う必要があります)。
今後ともよろしくお願いいたします。必要に応じて、別のStackExchangeにお送りください。
回答:
一般的な線形演算子を使用してCG(または同様の反復アプローチ)を実装する場合に注意する必要があるのは、線形演算子の随伴要素を適切に実装することです。つまり、人々はしばしば正しく理解しますが、実装を間違えます。z = F ∗(y )
次の同一性を利用する簡単なテストを実装することをお勧めします:適合すると場合、 したがって、実行することは、とランダムな値を生成し、それらをそれぞれフォワード操作と随伴操作で実行し、上記の2つの内積を計算することです。それらが妥当な精度内で一致することを確認し、数回繰り返します。、Y ⟨ Y 、F (X )⟩ = ⟨ F *(Y )、X ⟩ 。x y
編集:線形演算子が対称的であると想定されている場合はどうしますか?まあ、その対称性も検証する必要があります。したがって、 ---と同じ演算を適用することに注意して、同じテストを使用してください。もちろん、OPには非対称演算子と対称演算子の両方があります... x y
linop_test.m
この理由からルーチンを実装しました。このパッケージは、ベクトル空間での行列、配列、デカルト積もサポートします。
結局のところ、私のシステムは対称で正定であるため(私の線形演算子はと書かれているため)、共役勾配はこのタイプの方程式を反復的に解くように適合させることができます。唯一の変更は、内積を計算するときに行われます。つまり、CGの典型的な内積計算は、またはます。修正バージョンでは、アダマール(点ごと)積のエントリを合計することで計算できるフロベニウス内積を使用します。すなわちR T K Rのk個のP T K AのPのK
3Dアレイにアップグレードすると、これはうまくいくと思いますが、3Dアレイで定義されたフロベニウスの内積はまだ確認していません(点ごとの積をもう一度合計できるという前提で作業します)。
誰かが知っているなら、私はまだもっと一般的な方法に興味があります!