หากไม่มีข้อมูลเกี่ยวกับการสร้างเมทริกซ์สมมาตรจริงที่เป็นบวกแน่นอนนี้ข้อเสนอแนะที่จำเป็นต้องทำมีความ จำกัด อย่างเป็นธรรม12×12
ฉันดาวน์โหลดแพคเกจ Armadillo จาก Sourceforge และดูเอกสารประกอบ พยายามที่จะปรับปรุงประสิทธิภาพการทำงานของคอมพิวเตอร์แยกและที่เป็นอันดับหนึ่งเมทริกซ์ของทุกคนโดยการตั้งค่าเช่น หมายเหตุเอกสารที่ว่านี้เป็นค่าเริ่มต้นสำหรับการฝึกอบรมได้สูงสุดขนาดเพื่อโดยละเลยผมถือว่าเป็นตัวเลือกเริ่มต้นสำหรับที่กรณีdet(Q)det(12I−Q−J)Jdet(Q,slow=false)
4×4slow=true
12×12
สิ่งที่slow=true
น่าจะเป็นไปได้คือการหมุนเป็นบางส่วนหรือทั้งหมดในรูปแบบระดับแถวซึ่งพบได้ง่าย อย่างไรก็ตามคุณรู้ล่วงหน้าว่าเมทริกซ์นั้นเป็นค่าบวกดังนั้นการหมุนไม่จำเป็นสำหรับความเสถียร (อย่างน้อยสันนิษฐานสำหรับการคำนวณจำนวนมากของคุณมันไม่ชัดเจนว่าแพ็คเกจอาร์มาดิลโลเกิดข้อยกเว้นถ้าปิวิตกลายเป็นขนาดเล็กเกินไป คุณลักษณะของแพคเกจพีชคณิตเชิงเส้นเชิงตัวเลขที่สมเหตุสมผลแก้ไข:ฉันพบโค้ดอาร์มาดิลโลที่ใช้ในไฟล์ส่วนหัวโดยใช้เทมเพลต C ++ สำหรับการใช้งานที่สำคัญการตั้งค่าไม่ปรากฏว่าส่งผลต่อQdet
include\armadillo_bits\auxlib_meat.hpp
slow=false
12×12ปัจจัยจะต้องทำเพราะการคำนวณได้รับ "โยนข้ามกำแพง" ถึง LAPACK (หรือ ATLAS) ณ จุดนั้นโดยไม่มีข้อบ่งชี้ว่าไม่จำเป็นต้องหมุนเหวี่ยง; ดูdet_lapack
และเรียกใช้ในไฟล์นั้น
อีกจุดหนึ่งก็คือการปฏิบัติตามคำแนะนำในการสร้างแพ็คเกจอาร์มาดิลโล่ที่เชื่อมโยงกับการเปลี่ยนความเร็วสูงสำหรับ BLAS และ LAPACK หากคุณใช้งานจริง เห็นวินาที 5 ของไฟล์ Armadillo README.TXT สำหรับรายละเอียด [แนะนำให้ใช้ BLAS หรือ LAPACK รุ่น 64 บิตเฉพาะสำหรับความเร็วบนเครื่อง 64 บิตปัจจุบัน]
ลดแถวลงในฟอร์มระดับคือกำจัดแบบเกาส์เป็นหลักและมีความซับซ้อนทางคณิตศาสตร์2) สำหรับทั้งการฝึกอบรมนี้แล้วจำนวนสองเท่าของที่ทำงานหรือ2) ดำเนินการเหล่านี้อาจจะเป็น "คอขวด" ในการประมวลผลของคุณ แต่มีความหวังเล็ก ๆ น้อย ๆ ว่าไม่มีโครงสร้างพิเศษใน (หรือบางความสัมพันธ์ที่รู้จักกันในหมู่กรณีทดสอบล้านล้านช่วยให้ค่าตัดจำหน่าย) การทำงานที่อาจจะลดลงไป2)23n3+O(n2)43n3+O(n2)QO(n2)
สำหรับการเปรียบเทียบการขยายตัวโดยปัจจัยร่วมของเมทริกซ์ทั่วไปเกี่ยวข้องกับการดำเนินการคูณ (และเพิ่ม / ลบจำนวนมาก) ดังนั้นสำหรับการเปรียบเทียบ (เทียบกับ ) สนับสนุนการกำจัดปัจจัยร่วมอย่างชัดเจนn×nn!n=1212!=47900160023n3=1152
อีกวิธีหนึ่งที่ต้องการงานจะลดเป็นรูปสามเหลี่ยมด้วยการเปลี่ยน Householder ซึ่งทำให้เป็นรูปสามเหลี่ยม คอมพิวเตอร์และสามารถหลังจากนั้นจะทำในการดำเนินงาน [ผลกระทบของการอัปเดตอันดับหนึ่งในดีเทอร์มิแนนต์ที่สองสามารถแสดงเป็นปัจจัยสเกลาร์ที่ได้รับจากการแก้ระบบหนึ่งระบบสามทาง]43n3+O(n2)Q12I−Qdet(Q)det(12I−Q−J)O(n)−J
การใช้การคำนวณแบบอิสระอาจคุ้มค่ากับการตรวจสอบผลลัพธ์ของการโทรที่ประสบความสำเร็จ (หรือล้มเหลว) ไปยังdet
ฟังก์ชันของ Armadillo
กรณีพิเศษ: ตามคำแนะนำของความคิดเห็นของ Jernej สมมติว่าโดยที่เหมือนเดิมคือเมทริกซ์ (อันดับ 1) ของทุกคนและคือ เมทริกซ์ทแยงมุมแบบไม่มีขอบ (บวก) อันที่จริงสำหรับการประยุกต์ใช้ที่เสนอในทฤษฎีกราฟสิ่งเหล่านี้จะเป็นเมทริกซ์จำนวนเต็ม ดังนั้นสูตรที่ชัดเจนสำหรับคือ:Q=D−JJD=diag(d1,…,dn)det(Q)
det(Q)=(∏i=1ndi)(1−∑i=1nd−1i)
ภาพร่างของการพิสูจน์กำบังโอกาสที่จะแสดงให้เห็นถึงการบังคับใช้ที่กว้างขึ้นเช่นเมื่อใดก็ตามที่มีดีเทอร์มิแนนต์ที่รู้จักและระบบได้รับการแก้ไขอย่างรวดเร็ว เริ่มต้นด้วยการแยกตัวประกอบ:DDv=(1…1)T
det(D−J)=det(D)⋅det(I−D−1J)
ตอนนี้เป็นอีกครั้งที่อันดับ 1 คือ1) โปรดทราบว่าปัจจัยที่สองคือ:D−1J(d−11…d−1n)T(1…1)
f(1)=det(I−D−1J)
ที่เป็นพหุนามลักษณะของ J ในฐานะที่เป็นอันดับ 1 เมทริกซ์จะต้องมี (อย่างน้อย) ปัจจัยของเพื่อพิจารณาว่าเป็น nullspace ค่าลักษณะเฉพาะ "ที่หายไป" คือซึ่งอาจเห็นได้จากการคำนวณ:f(x)D−1Jf(x)n−1x∑d−1i
D−1J(d−11…d−1n)T=(∑d−1i)(d−11…d−1n)T
มันตามมาว่าพหุนามลักษณะ , และดังที่แสดงไว้ข้างต้นสำหรับ ,1}f(x)=xn−1(x−∑d−1i)f(1)det(I−D−1J)1−∑d−1i
โปรดทราบว่าถ้าดังนั้นเมทริกซ์ทแยงมุมที่มีดีเทอร์มิแนนต์เป็นผลคูณของรายการในแนวทแยงQ=D−J12I−Q−J=12I−D+J−J=12I−D