İki 12x12 matrisin aynı belirleyiciye sahip olup olmadığını test etme


11

Bana 12×12 matris Q , bu simetrik, ters çevrilebilir, pozitif kesin ve yoğun. Eğer test mi

det(Q)=det(12IQJ)(1)
burada J tamamen birli bir matristir.

Şu anda armadillo kütüphanesi ile yapıyorum ama çok yavaş olduğu ortaya çıkıyor. Mesele şu ki, bunu bir trilyon matris için yapmam gerekiyor ve iki belirleyiciyi hesaplamanın programımın darboğaz olduğu ortaya çıkıyor. Dolayısıyla iki sorum var

  1. Boyutlarını bildiğim için determinantı daha hızlı hesaplamak için kullanabileceğim bir hile var mı? Belki 12×12 matrisi için bu durumda çalışabilecek dağınık bir genişleme midir?

  2. Eşitliği test etmenin başka etkili bir yolu var mı (1)

Düzenle. Yorumları cevaplamak için. Bütün bağlı olmayan kendi kendini tamamlayan grafikler hesaplamak gerekir G, düzeninin 13 öyle ki G, ve G,¯ kapsayan ağaç sayısı aynıdır. Bunun için motivasyon, bu mathoverflow yayınında bulunabilir. Makineye gelince, bunu 8 çekirdekli 3.4GHh makinede paralel olarak çalıştırıyorum.

Düzenle. Özellikle matrisinin determinantını hesaplamak için bir C programı yaparak beklenen çalışma süresini% 50 oranında azaltabildim . Önerilerinizi bekliyoruz.12x12


6
Ne kadar yavaş çok yavaş? Hangi donanımı ne kadar sürede alır? Bu belirleyicilerin çoğunu paralel olarak hesaplayabilmeniz için bu trilyonları bağımsız mı? Öyleyse, ne kadar büyük bir makine ile çalışabilirsiniz? Bu soruna ne sebep oldu? Determinantları hesaplamanız gerektiğinden emin misiniz? S
Bill Barth

3
Determinantlar ne sıklıkla (vakaların hangi kısmı için) aynı / farklıdır? Çoğu zaman farklılarsa, farklı olabileceklerini belirlemek için daha ucuz bir test olabilir ve yalnızca ilk test başarısız olursa aynı olduklarını doğrularsınız. Eğer çoğu zaman aynıysa, başka türlü.
Wolfgang Bangerth

1
Daha önce de söylendiği gibi: nereden geldiğiyle ilgili biraz ayrıntı verebilir misiniz ? Belki de körü körüne hesaplama belirleyicilerinden daha iyi bir yaklaşım vardır. S
JM

4
Bu durumun "bir trilyon matris için test edilmesi gerektiği" düşüncesi, 1) bazı özel yapıya sahip olduğu (aksi halde durumun rastgele beklendiği beklentisi azdır) ve 2) daha iyi bir yaklaşım olduğunu göstermektedir. bu özellik ile tüm Q matrislerini karakterize etmek (etkin bir şekilde kontrol edilebilir formülasyon ile) olabilir. SS
hardmath

1
@hardmath Evet, diyagonal elemanları olarak 1 ila 12 ve - 1 arasında değişen diyagonal girişlere sahip bir tamsayı matrisidirS112-1
Jernej

Yanıtlar:


8

Zaten C ++ kullanıyorsunuz ve matrisleriniz simetrik pozitif tanımlı olduğundan, Q'nun ve ayrıca 12 I - Q - J'nin açık bir çarpanlarına ayırmayı gerçekleştiririm . Burada 12 I - Q - J'nin de pozitif kesin olduğunu varsayıyorum , aksi takdirde L D L T sayısal kararlılık için eksen etrafında dönmeyi gerektirecektir (pozitif kesin olmasa bile, eksen etrafında dönmeye gerek yoktur, ancak dene).LDLTS12ben-S-J12ben-S-JLDLT

Bu bir LU çarpanlarına ayırma işleminden daha hızlı ve ayrıca Cholesky'den daha hızlıdır, çünkü kare köklerden kaçınılır. Determinant basitçe diyagonal matrisinin elemanlarının ürünüdür . Bir LDL çarpanlara ayırma işlemi gerçekleştirmek için kod o kadar basittir ki, 50'den az C satırına yazabilirsiniz. Üzerinde Wikipedia sayfası algoritmayı açıklar ve burada Cholesky yapmak için bazı basit şablon kodları var . Bunu büyük ölçüde basitleştirebilir ve L D L T çarpanlarına ayırmayı uygulamak için karekökünü önlemek için değiştirebilirsiniz .DLDLT

Depolama biçimini de kontrol edebileceğiniz için, matrisin yalnızca yarısını depolamak ve bellek yerini en üst düzeye çıkarmak için doğrusal bir dizide paketlemek için rutini daha da optimize edebilirsiniz. Sorun boyutları çok küçük olduğu için basit özel nokta ürünü ve sıra-1 güncelleme rutinleri de yazarım, derleyicinin çağrı yükünü azaltmak için rutinleri sıraya koymasına izin vermelisiniz. Sabit boyutlu bir döngü olduğundan, derleyici uygun olduğunda şeyleri otomatik olarak satır içine alabilmeli ve açabilmelidir.

İfadenin içinde Q içerdiği gerçeğinden yararlanmak için hileler çalmaya çalışmaktan kaçınırım . Böyle küçük problem boyutları için, bu püf noktaları, sadece iki ayrı belirleyici hesaplama yapmaktan daha yavaş olur. Elbette, bu iddiaları doğrulamanın tek yolu denemektir.12ben-S-JS


1
İkinci olarak, köksüz Cholesky olan uygulanmasını tavsiye ediyorum , çünkü Armadillo'nun pozitif tanımlayıcılık / diyagonal hakimiyetten yararlanmanın bir yolu yok gibi görünüyor. LDLT
hardmath

5

Bu pozitif kesin gerçek simetrik matrislerin yapımı hakkında bazı bilgiler olmadan yapılması gereken öneriler oldukça sınırlıdır.12x12

Armadillo paketini Sourceforge'dan indirdim ve belgelere bir göz attım. Ayrı ayrı hesaplama ve det ( 12 I - Q - J ) performansını artırmaya çalışın , burada J , örneğin ayarlayarak, tüm grupların bir numaralı matrisidir . Belgeler, bunun 4 × 4 boyutuna kadar olan matrisler için varsayılan olduğunu not eder , bu nedenle, seçeneğin 12 × 12 durum için varsayılan olduğunu varsayıyorum .det(S)det(12ben-S-J)Jdet(Q,slow=false)4x4slow=true12x12

Ne slow=true muhtemelen yapar belirleyici kolayca bulunmus bir sıralı basamak formu, almakla kısmi veya tam döner olduğunu. Bununla birlikte, matrisinin pozitif olarak kesin olduğunu biliyorsunuz , bu nedenle pivotlama stabilite için gereksizdir (en azından varsayımsal olarak hesaplamalarınızın büyük kısmı için). . cebir paket doğrusal makul sayısaldan özelliği EDIT: Ben uygular o Armadillo kodu bulundu başlık dosyasında , önemli işlevleri için c ++ şablonları kullanarak ayarı. etkileyecek gibi görünmüyor nasıl bir 12 × 12Sdetinclude\armadillo_bits\auxlib_meat.hppslow=false12x12determinant yapılacaktır çünkü hesaplama, o noktada dönme işleminin gerekli olmadığına dair hiçbir işaret olmaksızın LAPACK'e (veya ATLAS) “bir duvarın üzerinden atılır”; bakın det_lapackve bu dosyadaki çağrıları.

Diğer bir nokta, eğer gerçekten kullanıyorsanız, BLAS ve LAPACK için yüksek hızlı değiştirmelere bağlanan Armadillo paketini oluşturma önerilerini takip etmek olacaktır; bkz. Ayrıntılar için Armadillo README.TXT dosyasının 5'i. [Mevcut 64 bit makinelerde hız için BLAS veya LAPACK'in ayrılmış 64 bit sürümünün kullanılması önerilir.]

Echelon forma satır indirimi esasen Gauss eliminasyonu ve aritmetik karmaşıklığı vardır . Her iki matris için bu, o işin iki katı veya423n3+Ö(n2). Bu işlemler, işleminizdeki "darboğaz" olabilir, ancakQ'dakiözel yapı(veya amortismana izin veren trilyon test vakaları arasında bilinen bazı ilişkilerolmadan) çalışmanınO(n2) 'yedüşürülebileceğiumudu yoktur.43n3+Ö(n2)SÖ(n2)

Karşılaştırma için, genel bir kofaktörü ile genişleme matrisinin içerir n ! çarpma işlemleri (ve kabaca birçok toplama / çıkarma), yani n = 12 için karşılaştırma ( 12 ! = 479001600 vs. 2nxnn!n=1212!=479001600) kofaktörlere karşı eliminasyonu açıkça desteklemektedir.23n3=1152

4 gerektiren başka bir yaklaşımçalışması,12I-Q'yuüçgensel formasokan Hanehalkı dönüşümleri ileQ'nunüçgen formaindirgenmesi olacaktır. Bilgisayardet(S)vedet(12I-S-J)daha sonra yapılabilirO(n)işlemleri. [Rütbe bir güncellemenin etkisi-J43n3+Ö(n2)S12ben-Sdet(S)det(12ben-S-J)Ö(n)-J ikinci belirleyicide, bir üçgen sistemi çözülerek verilen bir skaler faktör olarak ifade edilebilir.]

Böyle bağımsız bir hesaplamanın uygulanması, Armadillo'nun detişlevine yapılan başarılı (veya başarısız) çağrıların sonuçları üzerinde bir kontrol olarak faydalı olabilir .

Özel Örnek: olarak Jernej bir Comment önerilen varsayalım ki burada J daha önce olduğu gibi tüm olanlar ve (sıra 1) matrisi D = diag ( d 1 , ... , d n ) bir tekil olmayan (pozitif ) Diyagonal matris. Aslında, grafik teorisinde önerilen uygulama için bunlar tamsayı matrisleri olacaktır. O zaman det ( Q ) için açık bir formül :S=D-JJD=diag(d1,...,dn)det(S)

det(Q)=(i=1ndi)(1i=1ndi1)

Kanıtının bir taslağı, daha geniş uygulanabilirliği göstermek için bir fırsat sağlar, yani nin bilinen bir belirleyicisi olduğunda ve D v = ( 1 1 ) T sistemi hızla çözüldüğünde. Faktoring yaparak başlayın:DDv=(11)T

det(DJ)=det(D)det(ID1J)

Şimdi tekrar 1. sırada, yani ( d - 1 1d - 1 n ) T ( 1 1 ) . İkinci belirleyicinin basitçe:D1J(d11dn1)T(11)

f(1)=det(ID1J)

burada , D - 1 J'nin karakteristik polinomudur . Kademe 1 matrisi olarak f ( x ) , boş alanını hesaba katmak için (en azından) n - 1 x faktörüne sahip olmalıdır. Özdeğer olan "kayıp" Σ d - 1 i olarak hesaplamasından görülebilir:f(x)D1Jf(x)n1xdi1

D1J(d11dn1)T=(di1)(d11dn1)T

Sonuç olarak, det ( I - D - 1 J ) , 1 - d - için karakteristik polinom ve f ( 1 ) yukarıda gösterildiği gibidir. 1 i .f(x)=xn1(xdi1)f(1)det(ID1J)1di1

Ayrıca, , 12 I - Q - J = 12 I - D + J - J = 12 I - D , belirleyicisi basitçe diyagonal girişlerinin ürünü olan çapraz bir matris olduğuna dikkat edin.Q=DJ12IQJ=12ID+JJ=12ID


Hm .. aslında D - A, burada A , G'nin bitişiklik matrisidir, bu yüzden bu sonucun doğru olmayabileceğini düşünüyorum. Özellikle, bir grafik G'nin yayılan ağaç sayısının, tutmayan derece sırası ile belirlendiği anlamına gelir. QDAAGG
Jernej

diyagonal olmayan girdileri daha sonra genellikle 0 ve -1 içerir. L D L , T Victor önerdiği ayrışma simetri yararlanır ve gelen işletme sayısı lider terimi azaltır 2QLDLTile123n3. Tam bir tamsayı yaklaşımı vardır, ancak bu muhtemelen mütevazı boyut matrisiniz ve girişleriniz için gerekli değildir. Yapıyı anlarsam,12I-Q-J,Qileaynı nedenden dolayı pozitiftir. 13n312IQJQ
hardmath

@Jernej: Belirttiğim bir şeyin yanlış olduğuna inanıyorsanız, burada gereksiz yorum yapmadan tartışmaların işlenebileceği bu Soruya dayalı bir sohbet odası oluşturdum .
hardmath

1

Belirleyicileri hesaplamak istediğiniz grafikleri numaralandırmak için yapılandırılmış bir yolunuz varsa, belki de sizi bir grafikten diğerine aktaran düşük seviyeli güncellemeler bulabilirsiniz.

Eğer öyleyse, o zaman mevcut grafiğin belirleyicisi hakkında bilginiz kullanılarak numaralandırılacak sonraki grafiğin belirleyicisini ucuz bir şekilde hesaplamak için matris belirleyici lemmayı kullanabilirsiniz.

Yani, bir matrisi ve u,v vektörleri için , v :

det(bir+uvT)=(1+vTbir-1u)det(bir)
U ve V nxm matrisleri ve bir olduğu nxn :
det(bir+UVT)=det(benm+VTbir-1U)det(bir)

(bir+uvT)-1=bir-1-bir-1uvTbir-11+vTbir-1u

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.