Tanpa beberapa informasi tentang konstruksi matriks simetrik nyata pasti positif ini, saran-saran yang akan dibuat adalah kebutuhan yang cukup terbatas.12×12
Saya mengunduh paket Armadillo dari Sourceforge dan melihat dokumentasi. Cobalah untuk meningkatkan kinerja komputasi secara terpisah dan , di mana adalah matriks peringkat satu dari semua yang ada, dengan menetapkan misalnya . Dokumentasi mencatat bahwa ini adalah default untuk matriks hingga ukuran , jadi karena kelalaian saya menganggap opsi adalah default untuk kasus .det(Q)det(12I−Q−J)Jdet(Q,slow=false)
4×4slow=true
12×12
Apa yang slow=true
mungkin dilakukan adalah berputar sebagian atau penuh dalam mendapatkan bentuk eselon baris, dari mana determinan mudah ditemukan. Namun Anda tahu sebelumnya bahwa matriks adalah positif pasti, jadi pivot tidak diperlukan untuk stabilitas (setidaknya secara dugaan untuk sebagian besar perhitungan Anda. Tidak jelas apakah paket Armadillo melempar pengecualian jika pivot menjadi terlalu kecil, tetapi ini harus menjadi fitur paket aljabar linear numerik yang masuk akal. EDIT: Saya menemukan kode Armadillo yang mengimplementasikan dalam file header , menggunakan template C ++ untuk fungsionalitas substansial. Pengaturan ini tampaknya tidak mempengaruhi bagaimanaQdet
include\armadillo_bits\auxlib_meat.hpp
slow=false
12×12penentu akan dilakukan karena perhitungan akan "dilempar ke atas tembok" ke LAPACK (atau ATLAS) pada saat itu tanpa indikasi bahwa pivot tidak diperlukan; lihat det_lapack
dan doanya dalam file itu.
Poin lainnya adalah mengikuti rekomendasi mereka untuk membangun paket Armadillo yang menghubungkan ke penggantian kecepatan tinggi untuk BLAS dan LAPACK, jika Anda memang menggunakannya; lihat Sec. 5 file Armadillo README.TXT untuk detailnya. [Penggunaan BLAS atau LAPACK versi 64-bit khusus juga disarankan untuk kecepatan pada mesin 64-bit saat ini.]
Reduksi baris ke bentuk eselon pada dasarnya adalah eliminasi Gaussian, dan memiliki kompleksitas aritmatika . Untuk kedua matriks ini, berarti dua kali lipat yang berfungsi, atau . Operasi-operasi ini mungkin menjadi "penghambat" dalam pemrosesan Anda, tetapi ada sedikit harapan bahwa tanpa struktur khusus di (atau beberapa hubungan yang diketahui di antara triliun kasus uji yang memungkinkan amortisasi) pekerjaan dapat dikurangi menjadi .23n3+O(n2)43n3+O(n2)QO(n2)
Sebagai perbandingan, ekspansi oleh kofaktor umum matriks melibatkanoperasi perkalian (dan kira-kira sebanyak penambahan / pengurangan), jadi untuk perbandingan ( vs ) jelas mendukung penghapusan lebih dari kofaktor.n×nn!n=1212!=47900160023n3=1152
Pendekatan lain yang membutuhkan bekerja akan mengurangi ke bentuk tridiagonal dengan transformasi Householder, yang juga menempatkan ke dalam bentuk tridiagonal. Komputasi dan selanjutnya dapat dilakukan dalam operasi . [Efek dari pembaruan peringkat satu dalam penentu kedua dapat dinyatakan sebagai faktor skalar yang diberikan dengan menyelesaikan satu sistem tridiagonal.]43n3+O(n2)Q12I−Qdet(Q)det(12I−Q−J)O(n)−J
Menerapkan perhitungan independen semacam itu mungkin bermanfaat sebagai pemeriksaan atas hasil panggilan yang berhasil (atau gagal) ke det
fungsi Armadillo .
Kasus Khusus: Seperti yang disarankan oleh Komentar Jernej, anggaplah bahwa mana seperti sebelumnya adalah matriks (peringkat 1) dari semua yang ada dan adalah matriks diagonal nonsingular (positif). Memang untuk aplikasi yang diusulkan dalam teori grafik ini akan menjadi matriks bilangan bulat. Maka rumus eksplisit untuk adalah:Q=D−JJD=diag(d1,…,dn)det(Q)
det(Q)=(∏i=1ndi)(1−∑i=1nd−1i)
Sebuah sketsa pembuktiannya memberikan peluang untuk menggambarkan penerapan yang lebih luas, yaitu setiap kali memiliki determinan yang diketahui dan sistem dengan cepat diselesaikan. Mulailah dengan memperhitungkan:DDv=(1…1)T
det(D−J)=det(D)⋅det(I−D−1J)
Sekarang kembali menjadi peringkat 1, yaitu . Perhatikan bahwa penentu kedua sederhana:D−1J(d−11…d−1n)T(1…1)
f(1)=det(I−D−1J)
di mana adalah polinomial karakteristik dari . Sebagai matriks peringkat 1, harus memiliki (setidaknya) faktor untuk memperhitungkan ruang nolnya. Nilai eigen "hilang" adalah , seperti yang dapat dilihat dari perhitungan:f(x)D−1Jf(x)n−1x∑d−1i
D−1J(d−11…d−1n)T=(∑d−1i)(d−11…d−1n)T
Karena itu karakteristik polinomial , dan adalah seperti yang ditunjukkan di atas untuk , .f(x)=xn−1(x−∑d−1i)f(1)det(I−D−1J)1−∑d−1i
Perhatikan juga bahwa jika , maka , sebuah matriks diagonal yang determinannya hanyalah produk dari entri diagonalnya.Q=D−J12I−Q−J=12I−D+J−J=12I−D