あなたの質問は、ドライブ(スロット、フィリップス、トルクス、...)に応じて選択するドライバーを尋ねるようなものです:多すぎることに加えて、選択は1本のネジを締めるか、または組み立てるかによっても異なりますライブラリシェルフのセット全体。それにもかかわらず、あなたの質問に対する部分的な答えとして、線形システムを解くための方法を選択する際に留意すべきいくつかの問題があります。また、可逆行列に限定します。過剰に決定されたシステムや不十分に決定されたシステムのケースは異なる問題であり、実際には個別の質問である必要があります。A x = b
当然のことながら、オプション1と2は正解です。逆行列の計算と適用は、他のアルゴリズムの1つを適用するよりもはるかに高価で、数値的に安定性が低いため、非常に悪い考えです。そのため、直接法と反復法のどちらかを選択できます。考慮すべき最初の事は行列ではありませんが、あなたは、数値解に期待〜X:Aバツ〜
- それはどれほど正確である必要がありますか?機械精度にシステムを解決するために持っている、またはあなたが満足している〜は、xは(例えば)を満たす‖ 〜X - X * ‖ < 10 - 3、X *は厳密解であるの?バツ〜バツ〜∥ X〜− x∗∥ < 10− 3バツ∗
- どれくらい早く必要ですか?ここで関連する唯一のメトリックは、マシンのクロック時間です-巨大なクラスター上で完全にスケーリングする方法は、それらのいずれかを持っていない場合は最良の選択ではないかもしれませんが、それらの光沢のある新しいテスラカードのいずれかを持っています。
無料のランチなどはありませんので、通常は両者のトレードオフを決定する必要があります。その後、マトリックス(およびハードウェア)を調べて、適切な方法(または、適切な実装を見つけることができる方法)を決定します。(ここで「最高」を書くのを避けた方法に注意してください...)ここで最も関連するプロパティはA
- 構造:ある対称?密か疎か?縞模様?A
- 固有値は:彼らは(つまり、すべて正である正定値)?それらはクラスター化されていますか?それらのいくつかは非常に小さいか、または非常に大きい等級を持っていますか?A
これを念頭に置いて、次に(巨大な)文献を探して、特定の問題に対して見つけたさまざまな方法を評価する必要があります。一般的な注意事項は次のとおりです。
ソリューションにマシンの精度が本当に必要な場合(またはほぼ近い場合)、またはマトリックスが小さい場合(最大行など)、特に高密度のシステム(この場合、すべてのマトリックス乗算なりますO(N 2)、及びあなたが繰り返しの多くを必要とする場合、これは遠くからではないかもしれませんO(nは3))直接法の必要性。また、ほとんどの反復法とは対照的に、LU分解(ピボットあり)は、任意の可逆行列に対して機能します。(もちろん、Aが対称で正定値の場合、コレスキーを使用します。)1000O( n2)O( n3)A
これは、メモリの問題に遭遇しない場合の(大きな)スパース行列にも当てはまります:スパース行列は一般にスパースLU分解を持たず、因子が(高速)メモリに適合しない場合、これらのメソッドは使用できなくなります。
A
AA
同じ行列と異なる右辺を持つ線形システムを繰り返し解く必要がある場合、分解を1回計算するだけでよいため、直接法は反復法よりも高速です。(これは逐次解決を前提としています。すべての右側が同時にある場合は、ブロッククリロフ法を使用できます。)
もちろん、これらは非常に大まかなガイドラインです。上記のステートメントのいずれについても、逆のことが当てはまるマトリックスが存在する可能性があります...
あなたはコメントで参考文献を求めたので、ここにあなたが始めるためのいくつかの教科書とレビュー論文があります。(これらもセットも包括的ではありません。この質問はあまりにも広範で、特定の問題に依存しすぎています。)