希薄で非常に悪条件なシステムの解決


9

私はAx = bを解こうとしています。ここで、Aは複雑で、スパースで、非対称で、非常に悪条件(条件番号〜1E + 20)の正方形または長方形の行列です。LAPACKのZGELSSでシステムを正確に解くことができました。しかし、私のシステムの自由度が高くなると、スパース性が活用されないため、ZGELSSを使用してPCでシステムを解くのに長い時間がかかります。最近、同じシステムでSuperLU(Harwell-Boeingストレージを使用)を試しましたが、条件番号> 1E + 12で結果が不正確でした(これがピボットの数値的な問題かどうかはわかりません)。

すでに開発されたソルバーを使用する傾向があります。私が言及したシステムをすばやく(つまり、スパース性を活用して)確実に(条件数を考慮して)解決できる堅牢なソルバーはありますか?


1
事前条件付けできますか?もしそうなら、クリロフ部分空間法は効果的かもしれません。直接法を主張する場合でも、事前調整は数値誤差の制御に役立ちます。
Geoff Oxberry 2013

1
また、ここで説明しているように、プリコンディショニングについてもかなりの経験をしました。en.wikipedia.org / wiki / 正確な算術でプリコンディショニングを行うことができます。ただし、私の行列はすべて密集しているため、ここでより具体的なメソッド/ルーチンを示すことはできません。
AlexE 2013

11
(machine precision)(condition number)1020__float128

2
この条件番号の見積もりはどこから入手していますか?ヌルスペースのある行列の条件数を推定するようにMatlabに要求すると、無限大になるか、場合によっては(非常に大きな)非常に大きな数になることがあります。調べているシステムにnullスペースがあり、それが何であるかがわかっている場合は、それを投影して、残っているものの方が条件番号の方がよい場合があります。次に、PETScまたはTrilinosまたはあなたが持っているものを使用できます。
Daniel Shapero 2013

3
minAxbperp(N(A))

回答:


13

ZGELSSを使用してこの問題を解決する場合、切り捨てられた特異値分解を使用して、この非常に悪条件の問題を正則化します。このライブラリルーチンは最小二乗解を見つけるのではなく、を最小化する解のバランスをとることを理解することが重要です最小化に対して。 Ax=bxAxb

ZGELSSに渡されるパラメーターRCONDを使用して、どの特異値を含め、解の計算から除外するかを指定できます。RCOND * S(1)(S(1)は最大の特異値)未満の特異値は無視されます。ZGELSSでRCONDパラメータをどのように設定したかについてはまだ説明していません。、行列または右側のの係数のノイズレベルについては何もわかっていないため、使用したかどうかはわかりません適切な量​​の正則化。 Ab

ZGELSSで得られる正則化された解に満足しているように見えるため、切り捨てられたSVD法によって正則化が行われたようです(最小二乗解の中で最小の解を見つけ、を最小化します RCOND * S(1)よりも大きい特異値に関連付けられた特異ベクトルにまたがる解の空間上のは、問題ありません。 xAxb

あなたの質問は、「この大規模でスパースで条件の悪い線形最小二乗問題に対する正則化された最小二乗解を効率的に取得するにはどうすればよいですか?」として再定式化できます。

私の推奨は、反復法(CGLSやLSQRなど)を使用して、明示的に正則化された最小二乗問題を最小化することです。

minAxb2+α2x2

ここで、正規化パラメーターは、減衰最小二乗問題が適切に調整され、結果の正規化された解に満足するように調整されます。 α


最初にこれについて言及しなかったことに対する私の謝罪。解決されている問題は、FEMを使用した音響のヘルムホルツ方程式です。ソリューションを近似するために使用される平面波の基礎のため、システムは十分に調整されていません。
user1234 2013

と係数はどこから来るのですか?それらは測定データですか?あるオブジェクトの設計からの「正確な」値(実際には、15桁の許容誤差に加工することはできません...)?Ab
Brian Borchers 2013

1
AおよびBはヘルムホルツPDEの弱い製剤を用いて形成されるマトリックス、参照:asadl.org/jasa/resource/1/jasman/v119/i3/...
user1234

9

ジェド・ブラウンはすでに質問へのコメントでこれを指摘していますが、条件数が大きい場合、通常の倍精度で実行できることはほとんどありません。ほとんどの場合、1桁の精度は得られないでしょう。解、さらに悪いことに、解ベクトルに対応する残差を正確に評価できないので、それを知ることさえできません。言い換えれば、どの線形ソルバーを選択するかという問題ではありません。そのような行列に対して有用な何かを行う線形ソルバーはありません。

このような状況は通常、不適切な基準を選択したために発生します。たとえば、ガラーキン法の基礎として関数を選択した場合、このような悪条件の行列が得られます。(これにより、悪条件で悪名高い悪名高いヒルベルト行列が生成されます。)このような場合の解決策は、どのソルバーが線形システムを解くことができるかを尋ねるのではなく、使用できるより良い基底があるかどうかを尋ねることです。同じことをすることをお勧めします。これらの種類の行列で終わらないように問題を再構成することを考えてください。1,x,x2,x3,...


逆熱方程式などのPDEの悪条件の問題を離散化すると、間違いなく悪条件の行列式になります。これは、方程式を再公式化したり、効率的な行列ソルバーを選択したり、浮動小数点数の精度を向上させたりして解決できる場合ではありません。この場合[音響逆問題]には、正則化法が必要です。
tqviet 2016年

7

悪条件の問題を解決する最も簡単な/最速の方法は、(ブルートフォースによって)計算の精度を上げることです。別の(まだ可能ではない)方法は、問題を再定式化することです。

4倍精度(10進34桁)を使用する必要がある場合があります。(条件番号のため)20桁がコースで失われる場合でも、14桁の正しい数字が得られます。

興味があれば、MATLABで4倍精度スパースソルバーも利用できるようになりました。

(私は上記のツールボックスの作者です)。

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