つまりA\b
、非常に大きく、対称でスパースなAを実行する場合、matlabはどのアルゴリズムを使用しますか?
2 に答える
行列がスパースで対称正定行列であるが、帯域が非常に狭い場合、専用の帯域ソルバーが使用されます。ほとんどのマトリックスには、この条件をトリガーするのに十分な狭い帯域がありません。通常、これは Spline Toolbox の 1-D スプラインで発生します。2 次元の問題には大きな「バンド」があります (実際にはバンド行列ではありません)。
より一般的には、MATLAB はスパース対称正定行列に CHOLMOD を使用します。行列が疎で、対称で、不定の場合、Iain Duff による MA49 が使用されます。
A\b
このオプションを使用すると、MATLAB が内部で何を行っているかを知ることができます。
spparms ('spumoni',3)
次に、もう一度オフにします
spparms ('spumoni',0)
疎正方行列の場合、UMFPACK を使用します。疎な長方形行列の場合は、SuiteSparseQR (略して spqr) を使用します。
下三角または上三角である疎行列、またはそのように置換できる疎行列の場合、これらのプロパティを利用するフォワード/バック ソルバーを使用します。
MATLAB はバックスラッシュでシンプレックス メソッドをまったく使用しません。行列が長方形の場合 (および行よりも列が多く、短く太い) はA\b
基本的な解を返します。最小 2 ノルムの解が必要な場合は、因数分解する必要がありますA'
。これは spqr MATLAB インターフェイスで実行できますが、そのオプションは MATLAB ディストリビューションでは利用できません。suitesparse.com のソース コードからspqrをインストールする必要があります。
答えは、A のいくつかのプロパティ (対角線/正方形/縞模様など) によって異なります。CHOLMOD、UMFPACK、および qr 因数分解は、オプションの一部です。
ドキュメントはそれを説明しています。ドキュメントのオンライン スナップショットへのリンクを次に示します。これは時代遅れかもしれません。- http://amath.colorado.edu/computing/Matlab/OldTechDocs/ref/arithmeticoperators.html - http://www.maths.lth.se/na/courses/NUM115/NUM115-11/backslash.html