Yoğun bir matrisin düşük dereceli olup olmadığını hızla belirleme


13

Üzerinde çalıştığım bir yazılım projesinde, bazı hesaplamalar yoğun düşük dereceli matrisler için çok daha kolaydır. Bazı problem örnekleri yoğun düşük dereceli matrisleri içerir, ancak bana faktörlerden ziyade tam olarak verilir, bu yüzden düşük dereceli yapıdan yararlanmak istiyorsam dereceyi kontrol etmem ve matrisi faktör yapmalıyım .

Söz konusu matrisler tipik olarak tamamen veya neredeyse tamamen yoğundur, n yüz ila birkaç bin arasında değişir. Bir matris düşük dereceye sahipse (örneğin 5 ila 10'dan az), SVD'nin hesaplanması ve düşük dereceli bir çarpanlara ayırma işleminin kullanılması çabaya değer. Ancak, eğer matris düşük dereceli değilse, çaba boşa harcanacaktır.

Bu nedenle, tam bir SVD çarpanlarına ayırma çabalarına yatırım yapmadan önce rütbenin düşük olup olmadığını belirlemenin hızlı ve makul derecede güvenilir bir yolunu bulmak istiyorum. Herhangi bir noktada rütbenin kesimin üstünde olduğu anlaşılırsa, işlem hemen durdurulabilir. Prosedür matrisi yanlışlıkla düşük dereceli olarak ilan ederse, bu büyük bir sorun değildir, çünkü düşük seviyeyi doğrulamak ve düşük dereceli bir çarpanlara ayırma bulmak için tam bir SVD yapıyorum.

Düşündüğüm seçenekler arasında, LU veya QR çarpanlarına ayırma ve ardından kontrol olarak tam bir SVD var. Dikkate almam gereken başka yaklaşımlar var mı?

Yanıtlar:


8

Bu makaleden son zamanlarda öğrendiğim düzgün bir hile var . açığa çıkaran QR yapmaya başlarsınız ve biçiminde bir matrisiniz olduğunda , ilk Hanehalkı yansımalarından sonra ile boyutu üçgen ve tipik olmayan üçgen (biz ilk sonra durdu beri ana döngünün tekrarlamalar). Bu noktada, : tutarsa, en fazla bir rütbe matrisinden uzaktadırk

[R1R120R22],
R1k×kR22kR22εAεk; aksi halde olmamalıdır (sayısal hataları engelleme).

Bu yordam , yoğun bir matrisi için .O(n2k)n×n


Bu aslında soruda tarif ettiğim yaklaşım. Wolfgang Bangerth'in önerdiği cevabın den daha iyi olabileceğini düşünüyorum . O(n2k)
Brian Borchers

7

Sorun, elbette, gerçek sıralamanın hesaplanmasının (örneğin, bir QR ayrışması yoluyla) matrisin düşük sıralı bir gösterimini hesaplamaktan daha ucuz olmadığıdır.

Muhtemelen yapabileceğiniz en iyi şey, düşük seviyeli yaklaşımları bulmak için rastgele bir algoritma kullanmaktır. Bunlar, en azından teoride, tüm matris üzerinde çalışmaktan önemli ölçüde daha hızlı olabilir, çünkü özünde, sadece matrisin rastgele alt uzaylara izdüşümü için ayrışmaları hesaplarlar .

büyüklüğünde bir matris için buna değip değmeyeceği iyi bir soru olabilir, ancak sorunlarınız gerçekten büyük olursa, bunun işe yaradığından şüphelenirim.100×100


Bu algoritmalar hakkında bildiklerimden, verilen matrise norm olarak oldukça yakın olan düşük dereceli bir matris üretiyorlar. Verilen matrise çok yakın olan (örneğin) bir sıra-10 veya daha az matris olup olmadığını bilmeliyim (1.0e-10 veya daha iyi bir göreceli hata söyleyin.)
Brian Borchers

Evet, ancak öngörülen (düşük boyutlu) matrisin QR ayrışmasını da yapabilirsiniz ve bu ayrışma tam sıralama eksikliğini ortaya çıkarsa, aynı zamanda sıra eksikliği olan orijinal bir matrisiniz olacaktır. Orijinal matriste QR ayrışması yapmak için gereken kriter bu değil miydi?
Wolfgang Bangerth

Ben tahmin matris derecesi daha az olduğunu görüyoruz veya eşit olabilir o rütbe ilişkinse, (rastgele matrisin satır sayısı I çarpın kez A) ve A. rütbesi , daha sonra orijinal matris olamaz rütbe veya daha az. Daha az değerde ise o zaman sadece şanssız ya da olabileceğini az değerde idi . by matrisinin sırasını bulmak zamanında yapılabilir. Ancak, çarpı çarptığım rasgele matris yoğun ise, mutipasyon alırk k - 1 k A k k n O ( k 2 n ) A O ( k n 2 )kkk1kAkknO(k2n)AO(kn2)saati. Sıralamayı yüksek olasılıkla koruyan seyrek matrisler var mı?
Brian Borchers

Bilmiyorum. Algoritmanın sadece bir matrisin tam sırada olmadığını söyleyebileceğini kabul ediyorum (ve ima etmek istedim). Matris eğer söyleyemem olduğu tüm almadıkça tam sıralı rastgele yönlere. Benim umarım sadece nerede yeterince küçük için bir cevap almak olacaktır . k k n 2n 3k=nkkn2n3
Wolfgang Bangerth

1

Denemeye değer başka bir yaklaşım, Uyarlamalı Çapraz Yaklaşım (ACA) kullanmaktır. Çevrimiçi olarak birçok uygulamaya sahip oldukça popüler bir algoritmadır. Referans için orijinal kağıdı görebilirsiniz:

ACA ve varyasyonları (örneğin, ACA +, hibrit çapraz yaklaşım HCA) farklı senaryolarda kullanılabilir. Tüm yoğun matrisin hesaplanmış olması, artık gerektiğinde artıkları hesaplayabileceğiniz için elverişli olanlardan biridir.

Sezgisel artıklar (algoritmaya bakın) yeterli olursa, karmaşıklığınızın olacağına inanıyorum , burada kare matrisin büyüklüğü ve rütbe. Not, bu sırası , öngörülen kesme toleransının bir fonksiyonudur . Kesin ve garantili hata sınırları .N r ( ϵ ) r ϵ O ( N 2 r )O(Nr)Nr(ϵ)rϵO(N2r)


0

matrisinin simetrik pozitif tanımlı olduğu basit durum için , onun en büyük 20 özdeğerini hesaplayın ve olup olmadığını görün veya normları karşılaştırın. ARPACK bunun için hızlı; daha da önemlisi, sadece fonksiyonuna ihtiyaç duyar . Genel için özdeğerlerine bakın (bir LinOp olarak, somutlaştırmadan.)0 x AA0A A T AxAxAATA

scipy.sparse.linalg.svds bunu yapar: LinOp Arpack, herhangi bir boyutta için :A(ATA)A

from scipy.sparse.linalg import svds
sing = svds( A, k=20, tol=1e-4, return_singular_vectors=False )  # v0=random
# runtimes on random-normal n x n:
# n = 100, 1k, 2k
#       5, 130, 770 ms
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.