線形方程式を解く方法を選択する方法


31

私の知る限り、線形方程式系を解くには4つの方法があります(さらにある場合は修正してください):

  1. システム行列がフルランク正方行列の場合、Cramerの規則を使用できます。
  2. システム行列の逆または擬似逆を計算します。
  3. マトリックス分解法を使用します(ガウスまたはガウスヨルダン消去法はLU分解と見なされます)。
  4. 共役勾配法などの反復法を使用します。

実際、特に高次元行列の場合、Cramerのルールを使用するか、逆行列または擬似逆行列を計算して方程式を解くことはほとんどありません。したがって、最初の質問は、それぞれ分解法と反復法を使用する場合です。システムマトリックスのサイズとプロパティに依存すると思います。

2番目の質問は、数値の安定性と効率の観点から、特定のシステムマトリックスに最適な分解法または反復法の種類を知っていることです。

たとえば、共役勾配法は、行列が対称かつ正定値の方程式を解くために使用されますが、A T A x = A T bに変換することにより、任意の線形方程式に適用することもできます。正定行列の場合も、コレスキー分解法を使用して解を求めることができます。しかし、CGメソッドを選択するタイミングと、コレスキー分解を選択するタイミングはわかりません。私の感覚では、大きな行列にはCG法を使用した方が良いと思います。Aバツ=bATAバツ=ATb

長方形行列の場合、QR分解またはSVDのいずれかを使用できますが、ここでもいずれかを選択する方法がわかりません。

他のマトリックスについては、エルミート/対称マトリックス、スパースマトリックス、バンドマトリックスなど、適切なソルバーを選択する方法は今ではありません。


1
@chaohuangこんにちは、SciCompへようこそ!:あなたはこの議論を見たいかもしれ scicomp.stackexchange.com/questions/81/...
ポール

こんにちは、@ Paul、コメントありがとうございます。そのスレッドはスパース行列だけですか、それとも任意の行列ですか?
-chaohuang

6
あなたの質問の範囲は広範であり、スタック交換に関するQ&A形式には少し広すぎるかもしれません...興味のある特定のクラスのマトリックスシステムはありますか?
ポール

3
@chaohuangこのテーマに関する数多くの本があります。この質問は、医師に「一般に」治療を選択する方法を尋ねるようなものです。特定のクラスの問題に固有ではない質問をしたい場合は、正確な何かを尋ねるのに十分な分野に精通するように作業を行う必要があります。そうでない場合は、懸念している特定の問題を説明してください。
ジェドブラウン

2
FAQから:あなたの質問に答える本全体を想像できるなら、あなたはあまりにも多くを求めています。 この質問に関連するジャーナル全体と数百冊の本があります。
デビッドケッチャソン

回答:


45

あなたの質問は、ドライブ(スロット、フィリップス、トルクス、...)に応じて選択するドライバーを尋ねるようなものです:多すぎることに加えて、選択は1本のネジを締めるか、または組み立てるかによっても異なりますライブラリシェルフのセット全体。それにもかかわらず、あなたの質問に対する部分的な答えとして、線形システムを解くための方法を選択する際に留意すべきいくつかの問題があります。また、可逆行列に限定します。過剰に決定されたシステムや不十分に決定されたシステムのケースは異なる問題であり、実際には個別の質問である必要があります。Aバツ=b

当然のことながら、オプション1と2は正解です。逆行列の計算と適用は、他のアルゴリズムの1つを適用するよりもはるかに高価で、数値的に安定性が低いため、非常に悪い考えです。そのため、直接法と反復法のどちらかを選択できます。考慮すべき最初の事は行列ではありませんが、あなたは、数値解に期待XAバツ

  1. それはどれほど正確である必要がありますか?機械精度にシステムを解決するために持っている、またはあなたが満足している〜は、xは(例えば)を満たすX - X *< 10 - 3X *は厳密解であるの?バツバツバツバツ<103バツ
  2. どれくらい早く必要ですか?ここで関連する唯一のメトリックはマシンのクロック時間です-巨大なクラスター上で完全にスケーリングする方法は、それらのいずれかを持っていない場合は最良の選択ではないかもしれませんが、それらの光沢のある新しいテスラカードのいずれかを持っています。

無料のランチなどはありませんので、通常は両者のトレードオフを決定する必要があります。その後、マトリックス(およびハードウェア)を調べて、適切な方法(または、適切な実装を見つけることができる方法)を決定します。(ここで「最高」を書くのを避けた方法に注意してください...)ここで最も関連するプロパティはA

  • 構造:ある対称?密か疎か?縞模様?A
  • 固有値は:彼らは(つまり、すべて正である正定値)?それらはクラスター化されていますか?それらのいくつかは非常に小さいか、または非常に大きい等級を持っていますか?A

これを念頭に置いて、次に(巨大な)文献を探して、特定の問題に対して見つけたさまざまな方法を評価する必要があります。一般的な注意事項は次のとおりです。

  • ソリューションにマシンの精度が本当に必要な場合(またはほぼ近い場合)、またはマトリックスが小さい場合(最大行など)、特に高密度のシステム(この場合、すべてのマトリックス乗算なりますON 2、及びあなたが繰り返しの多くを必要とする場合、これは遠くからではないかもしれませんOnは3)直接法の必要性。また、ほとんどの反復法とは対照的に、LU分解(ピボットあり)は、任意の可逆行列に対して機能します。(もちろん、Aが対称で正定値の場合、コレスキーを使用します。)1000On2On3A

    これは、メモリの問題に遭遇しない場合の(大きな)スパース行列にも当てはまります:スパース行列は一般にスパースLU分解を持たず、因子が(高速)メモリに適合しない場合、これらのメソッドは使用できなくなります。

    A

  • AA

  • 同じ行列と異なる右辺を持つ線形システムを繰り返し解く必要がある場合、分解を1回計算するだけでよいため、直接法は反復法よりも高速です。(これは逐次解決を前提としています。すべての右側が同時にある場合は、ブロッククリロフ法を使用できます。)

もちろん、これらは非常に大まかなガイドラインです。上記のステートメントのいずれについても、逆のことが当てはまるマトリックスが存在する可能性があります...

あなたはコメントで参考文献を求めたので、ここにあなたが始めるためのいくつかの教科書とレビュー論文があります。(これらもセットも包括的ではありません。この質問はあまりにも広範で、特定の問題に依存しすぎています。)


2
ドライバーの例えが好きです!
ポール

@chaohuangこれがあなたの質問に答えたなら、あなたはそれを受け入れるべきです。(それがなかった場合、不足しているものを指摘してください。)
クリスチャンクラソン

@ChristianClasonはそれを受け入れました。私は待っていて、誰かが長方形行列の問題に光を当てることを望んでいました。それは長い間されているので、私はそのような答えは決してないだろうと思います:(
chaohuang

@chaohuangありがとうございます。それでも長方形行列に興味がある場合は、「過剰決定システムを解く方法を選択する方法」に関する(リンクされた)質問を投げかける必要があります。
クリスチャンクラソン

ここでは、線形方程式の大規模なスパースシステムを解くための反復法の使用に関するリファレンスです。
-chaohuang


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