2017-07-18 30 views
6

Simetrik bir yoğun matrisin (2000 * 2000) tersinin köşegenini hesaplamanın en iyi yolu nedir? Şu anda ilk olarak solve(x)'u kullanarak tersi hesaplayın ve sonra köşegeni (diag(y)) ayıklayın. Çalışsa da, kodun daha hızlı çalışabilmesi için daha iyi bir yol olup olmadığını merak ediyorum. chol2inv()'u denedim, ancak matrisim pozitif-kesin olmadığından çalışmadı.Bir matrisin tersini diyagonal hesaplamak için etkili bir yol

Güncelleme: İlgilenen herkes için, optimize edilmiş bir matematik kütüphanesi Intel MKL kullanarak matris dönüşümü hızlandırabildim. Makinemde 2000 * 2000 matrisini tersine çevirmek 3 saniye sürüyor. Intel MKL, Microsoft R Open ile kullanılabilir. matriksiniz simetrik, diyagonal veya pozitif tanımlı olmak gibi hiçbir güzel özelliklere sahipse

+0

Kısa google aramada, algoritmalar ve bu sorunla ilgili diğer uygulamalar için bazı bağlantılar buldum. Köşegenin her elemanına açıkça ihtiyacınız var mı yoksa bunu başka bir hesaplamada mı kullanmak istiyorsunuz? Daha fazla hesaplamada kullanmak istiyorsanız, bu bilginin yürütülmesi hızlandırmak için çok önemli olacaktır. – Vandenman

+0

Diğer hesaplamalarda köşegeni kullanıyorum. Spesifik olarak, her bir elemanı, başka bir vektörde, ters matrisin köşegeninin her bir elemanı ile bölerek toplar. – Katherine

+0

Tersin köşegen elemanlarının her birinin sıfır olmadığını biliyor musunuz? Matrisin bunu garanti eden bir özelliği var mı? – dmuir

cevap

0

, tek seçeneğiniz ne yazık ki yapmaktır sum(diag(solve(x)))

ne zamandır sizin matris üzerinde çalışacak şekilde sürer?

+0

Simetrik ama ne yazık ki pozitif-kesin değil. Chol2inv çok daha hızlı olurdu. Kaçması yaklaşık 15 saniye sürdü. Çalışma zamanı korkunç değil, yinelemeli bir işlem yaptığımdan bu süreç hızlı bir şekilde ekleniyor, böylece matris her zaman işlemde tersine çevriliyor. – Katherine