6

私のmatlabコード内で、特定の行列のコレスキー分解を処理する必要があります。私は通常chol(A,'lower')、下三角因子を生成するために呼び出しています。

今、私のコードを でチェックすると、特に入力行列のサイズが大きくなった場合、関数が本当に時間がかかるprofilerことが明らかです。chol

cholしたがって、組み込み関数に代わる価値のあるものがあるかどうかを知りたいです。

LAPACK私は図書館、つまりspptrf関数について考えてきました。で利用できますMATLABか?

ヒントやサポートは大歓迎です。

編集

例として、プロファイラーは次の情報を取得します。

ここに画像の説明を入力

どこCoh_uにサイズがあります(1395*1395)。また、さまざまな構成でコレスキー係数が必要なため、時間cholと呼ばれることにも注意してください。40004000

4

2 に答える 2

1

使用しているmatlabのバージョンはわかりませんが、このディスカッションを見つけました。これは、古いバージョンでは、コレスキー分解が非常に遅いことを示しています。

そこの答えの1つは、より高速であるはずの機能を持つCHOLMOD パッケージまたは SuiteSparseを使用することです。chol2

于 2013-02-26T15:30:22.833 に答える
0

Coh_uの正しい表現が次のようになっているか確認できますか

a)Coh_u = exp(-a.*sqrt((f(ii)/Uhub).^2 + (0.12/Lc).^2)).*(df.*psd(ii,1));

また

b)Coh_u = exp(-a.*dist*sqrt((f(ii)/Uhub).^2 + (0.12/Lc).^2)).*(df.*psd(ii,1));

a) と b) の違いは、b)では 2 つの行列間のdist距離が追加されていることです。YZ

dist = pdist2([Y(:) Z(:)],[Y(:) Z(:)]);

しかし、それは関数で「行列が正定値ではない」というエラーにつながりchol()ます。

于 2015-09-29T12:06:40.037 に答える