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.12 × 12
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 ( Q )det ( 12)I- S -J)Jdet(Q,slow=false)
4 × 4slow=true
12 × 12
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 × 12Sdet
include\armadillo_bits\auxlib_meat.hpp
slow=false
12 × 12determinant 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_lapack
ve 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+ O ( 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+ O ( n2)SO ( 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. 2n × nn !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+ O ( n2)S12 Ben- Sdet ( Q )det ( 12 I- S - J)O ( 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 det
iş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 :Q = D - JJD = diag ( d1, … , Dn)det ( Q )
det(Q)=(∏i=1ndi)(1−∑i=1nd−1i)
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=(1…1)T
det(D−J)=det(D)⋅det(I−D−1J)
Şimdi tekrar 1. sırada, yani ( d - 1 1 … d - 1 n ) T ( 1 … 1 ) . İkinci belirleyicinin basitçe:D−1J(d−11…d−1n)T(1…1)
f(1)=det(I−D−1J)
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)D−1Jf(x)n−1x∑d−1i
D−1J(d−11…d−1n)T=(∑d−1i)(d−11…d−1n)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)=xn−1(x−∑d−1i)f(1)det(I−D−1J)1−∑d−1i
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=D−J12I−Q−J=12I−D+J−J=12I−D