2017-07-18 19 views
6

対称密度行列(2000 * 2000)の逆行列の対角を計算する最良の方法は何ですか?現在、私はsolve(x)を使用して逆数を計算してから、対角(diag(y))を抽出します。それは動作しますが、コードをより速く実行できるようにするためのより良い方法があるかどうかは疑問です。私はchol2inv()を試しましたが、私の行列は正定ではないので動作しませんでした。行列の逆行列の対角を効率的に計算する

更新: 興味のある方は、最適化された数学ライブラリIntel MKLを使用して、行列反転を高速化することができました。私のマシンで2000 * 2000行列を逆にするには3秒かかります。インテルMKLは、Microsoft R Openで利用できます。

+0

短いGoogle検索で、この問題に関連するアルゴリズムや他の実装へのリンクがかなり見つかりました。対角線の各要素を明示的に必要としているのですか、別の計算で使用する予定ですか?さらなる計算にそれを使用したい場合、その知識は実行のスピードアップにとって重要です。 – Vandenman

+0

私は他の計算で対角線を使います。具体的には、各要素を逆行列の対角の各要素で別のベクトルに分割し、それらを合計します。 – Katherine

+0

逆行列の対角線の各要素が非ゼロであることをどのように知っていますか?マトリックスにはこれを保証するいくつかの特性がありますか? – dmuir

答えて

0

あなたの行列は、対称対角、または正定値であることなどの一切の素敵な性質を持っていない場合は、あなたの唯一の選択肢は、悲しげにどのくらいそれがあなたのマトリックス上で実行するために取るんsum(diag(solve(x)))

を行うことですか?

+0

これは対称ですが、残念ながら正定ではありません。 Chol2invはずっと高速です。実行には約15秒かかりました。ランタイムはひどいわけではありませんが、反復処理があるのですぐに積算されるので、行列はその都度逆行列になります。 – Katherine

関連する問題