3

私は次元 900000x900000 のこの巨大な行列 A を持っています。そして、この一次方程式 Ax=b を解かなければなりません。ここで、b はサイズ 900000x1 の列行列です。

A\b のような matlab のバックスラッシュ演算子を使用して、x を取得しようとしました。しかし、フリーズして×が取れませんでした。ほとんどの場合、メモリの問題から抜け出します。大容量のメモリを搭載したコンピューターで実行しましたが、システムが非常に遅くなり、答えが出るまで待たなければなりません。

この連立方程式を解くにはどうすればよいでしょうか。私のマトリックスはかなりまばらです。ただし、帯域は広くなりますが、ほとんどの要素はゼロです。b は非スパース行列です。助言がありますか?

4

1 に答える 1

2

私はプロジェクトを行いました。そこでは、このような大規模だが幸いなことに非常にまばらな行列も操作しました。このような大きな行列を使用すると、直接的な方法ではかなり迷ってしまいます。格納できない密な行列になるため、逆を計算することはできません。また、LU やコレスキー分解などの方法は、かなりのフィルインを作成するため、つまりゼロを破棄するため、非常にコストがかかります。

実行可能な代替手段は、反復メソッドを使用することです。行列が対称で正定値であることがわかっている場合は、共役勾配法を試してください。

x = pcg(A, b);  %# Computes a solution to Ax = b, with A symm. pos-def.

メソッドが収束する場合は、試してみてください。残念ながら、正定値の仮定を証明するのは簡単ではありません。

解決策が得られない場合は、さらに多くの反復方法があります。例えば:

bicg     - BiConjugate Gradient Method
bicgstab - BiConjugate Gradient Method (stabilized)
lsqr     - Least Squares QR Method
gmres    - Generalized Minimum Residual Method (I like this a lot)
于 2012-08-29T15:18:12.793 に答える