4

私はmatlabに2つの疎行列を持っています

サイズ9千×180万のM1とサイズ180万×180万のM2。

今、私は式を計算する必要があります

M1/M2

1時間ほどかかりました。それは正常ですか?この時間の問題を克服できるように、matlab に効率的な方法はありますか。つまり、多くの繰り返しを行うと、1時間かかり続けます。なにか提案を?

4

1 に答える 1

4

共役勾配法や Kaczmarz 法などの反復法が使用されていることを前提とした簡単な封筒の計算が使用されており、サイズを差し込むと、1 時間は悪くないと思います。

「反転」されている行列の三重対角性のため (明示的ではない場合)、これらの方法は両方とも、「反復回数の 1.8e6 倍の ~ 9000 倍の 1 に近いスカラー係数」倍に近い数の命令を使用します。収束に必要」です。引用符で囲まれた 2 つの値の積は、おそらく約 50 (最小) から約 1000 (最大) です。私はあなたの数学を機能させるためにこれらを選んだわけではありません. 1 秒あたり約 1e9 命令 (メモリ アクセスなどは考慮されていません) を想定すると、約 13 分から約 4.5 時間かかります。

したがって、スパース性を悪用するアルゴリズムの適切な範囲にあるようです。

構造を知っていれば、自分でもっとうまく活用できるかもしれませんが、おそらくそれほどではありません.

これは、13 分が達成可能であると言っているわけではないことに注意してください。

編集: 1 つの補足として、何が使用されているかはわかりませんが、反復的な方法を想定しています。直接的な方法を使用することも可能です(ここで説明したように)。 これらの方法は、スパース性の権利を活用すれば、スパース システムに対して非常に効率的です。Matlab がデフォルトでこれらを使用している可能性は非常に高いですが、あなたのケースで Matlab が何をしているのかを調査する価値があります。

私の限られた経験では、システムのサイズが大きくなるため (あなたのシステムは大きい)、反復法は通常、直接法よりも好まれました。私たちの線形システムは、画像処理でよくあるように、ブロック三重対角にもなりました。

于 2012-06-12T22:03:34.933 に答える