4

A が大きな行列の場合、exp(b*A) を使用する拡散カーネルを計算したいと考えています。b の値を操作するために、A を対角化したい (exp(A) がすばやく実行されるように)。

私の行列は約 25k x 25k ですが、非常にまばらです - ゼロ以外の値は約 60k だけです。Matlab の "eigs" 関数は、オクターブの "eig" や R の "eigen" と同様に、メモリを使い果たします。大きな疎行列の分解を見つけるツールはありますか?

これが関連するかどうかはわかりませんが、 A は隣接行列であるため、対称であり、フルランクです。

4

5 に答える 5

2

svdsmatlabの疎行列のために、SVDを試しましたか。

編集:もう1つ、ディメンションが大きいためフルランクSVDを実行しないでください。ソリューションがメモリに収まるように、500などの小さなランクを使用してください。これにより、小さな固有値とそのベクトルが切り取られます。したがって、精度が大幅に低下することはありません。

于 2010-05-27T00:27:40.720 に答える
1

64 ビット マシンと 64 ビット サポートでコンパイルされたオクターブにアクセスできる場合は、この問題を回避できる可能性があります。

また、これらすべてを実行しているプラ​​ットフォームはわかりませんが、UNIX ベースのシステムではulimit、ユーザー プロセスの最大許容スタック サイズを増やすために使用できます。

たとえば、実行できます

ulimit -u unlimited

これにより、プロセスにメモリ制限などがなくなります。これは一般的には良い考えではありません。マシンを完全に停止させるランナウェイ プロセスがあるからです。代わりに試す

ulimit -s [stacksize]

スタックサイズの制限を増やします。

于 2010-06-27T02:11:05.137 に答える
1

次のプロパティを考慮しましたか? exp(A*t) = L^(-1) {(sI-A)^(-1)} ここで、L^(-1) は逆ラプラス変換ですか? - 反転できる場合 (sI-A)

于 2010-05-27T07:12:12.800 に答える
0

Rでは、 ARPACKライ​​ブラリへのインターフェイスであるigraphパッケージと関数を確認できます。arpack

于 2010-05-28T22:21:26.457 に答える
0

Octave には、スパース行列の lu 分解を行う splu があります。25k x 25k を処理できるかどうかはわかりませんが、試してみる価値はあります。

または、行列が次のように構成されている場合: A = [B zeros;zeros C] 次に、B と C を個別に対角化し、それらを 1 つの行列にまとめることができます。eigでも同様のことができると思います。

于 2010-05-27T00:25:33.053 に答える