การทดสอบว่าเมทริกซ์ 12x12 สองตัวมีค่าเดียวกัน


11

12×12Q

det(Q)=det(12IQJ)(1)
J

ฉันกำลังทำสิ่งนี้กับห้องสมุดตัวนิ่มแต่มันกลับช้าไปหน่อย สิ่งที่ฉันต้องทำคือทำล้านล้านเมทริกซ์และปรากฎว่าการคำนวณสองปัจจัยคือคอขวดของโปรแกรมของฉัน ดังนั้นฉันมีสองคำถาม

  1. มีเคล็ดลับใดบ้างที่ฉันสามารถใช้เพื่อคำนวณดีเทอร์แนนต์ได้เร็วขึ้นเมื่อฉันรู้ขนาดของมัน? อาจเป็นการขยายตัวที่ยุ่งเหยิงสำหรับเมทริกซ์12×12ที่สามารถทำงานได้ในกรณีนี้?

  2. มีวิธีอื่นที่มีประสิทธิภาพในการทดสอบความเท่าเทียมกันหรือไม่(1)

แก้ไข เพื่อตอบความคิดเห็น ฉันจำเป็นต้องคำนวณกราฟที่ไม่เกี่ยวข้องกับตัวเองที่เชื่อมต่อทั้งหมดGของคำสั่ง13เช่นGและG¯มีจำนวนของต้นไม้ทอด แรงจูงใจสำหรับสิ่งนี้สามารถพบได้ในโพสต์mathoverflowนี้ สำหรับเครื่องฉันใช้งานเครื่อง 8 คอร์ 3.4GHh พร้อมกัน

แก้ไข ฉันสามารถลดเวลาทำงานที่คาดไว้ได้ถึง 50% โดยการทำโปรแกรม C เพื่อคำนวณปัจจัยเฉพาะของ12×12เมทริกซ์ ข้อเสนอแนะยังคงยินดีต้อนรับ


6
ช้าแค่ไหนช้าเกินไป? ใช้เวลานานแค่ไหนกับฮาร์ดแวร์อะไร? ล้านล้านของเหล่านี้เป็นอิสระเพื่อให้คุณสามารถคำนวณดีเทอร์มิแนนต์เหล่านี้หลายตัวพร้อมกัน ถ้าเป็นเช่นนั้นคุณสามารถใช้เครื่องจักรขนาดใหญ่ได้อย่างไร สิ่งที่นำไปสู่ปัญหานี้? คุณแน่ใจหรือว่าต้องการคำนวณปัจจัย Q
Bill Barth

3
บ่อยแค่ไหน (สำหรับส่วนของกรณีใด) ปัจจัยที่เหมือนกัน / แตกต่างกันอย่างไร หากพวกเขาแตกต่างกันส่วนใหญ่อาจมีการทดสอบที่ถูกกว่าเพื่อตรวจสอบว่าพวกเขาอาจจะแตกต่างกันและคุณจะตรวจสอบว่าพวกเขาจะเหมือนกันเฉพาะในกรณีที่การทดสอบครั้งแรกล้มเหลว อีกวิธีหนึ่งหากพวกเขาเกือบตลอดเวลา
Wolfgang Bangerth

1
ดังที่ได้ถามไปแล้ว: คุณสามารถให้รายละเอียดว่ามาจากไหน? อาจมีวิธีการที่ดีกว่าการคำนวณปัจจัยแบบสุ่มสี่สุ่มห้า Q
JM

4
ความคิดที่ว่าเงื่อนไขนี้จะต้องมีการทดสอบ "สำหรับการฝึกอบรม 1 ล้านล้าน" แนะนำ 1) ว่าเป็นที่รู้จักกันว่า apriori มีโครงสร้างพิเศษบางอย่าง อาจเป็นการระบุลักษณะการฝึกอบรมทั้งหมดด้วยคุณสมบัตินี้ (ด้วยสูตรที่ตรวจสอบได้อย่างมีประสิทธิภาพ) QQQ
hardmath

1
@hardmath ใช่เป็นเมทริกซ์จำนวนเต็มที่มีรายการแนวทแยงมุมตั้งแต่ถึงและเป็นองค์ประกอบแนวทแยง1 12 - 1Q1121
Jernej

คำตอบ:


8

เมื่อคุณกำลังอยู่แล้วโดยใช้ C ++ และการฝึกอบรมของคุณสมมาตรบวกแน่นอนผมจะดำเนินการ unpivotedตัวประกอบของและยัง12I-QJที่นี่ฉันสันนิษฐานว่าเป็นบวกแน่นอนมิฉะนั้นจะต้องมีการหมุนเพื่อความมั่นคงของตัวเลข (อาจเป็นไปได้ว่าแม้ว่ามันจะไม่แน่นอนแน่นอนไม่จำเป็นต้องหมุน แต่คุณต้องลอง) Q 12 I - Q - J 12 I - Q - J L D L TLDLTQ12IQJ12IQJLDLT

นี่เร็วกว่าการแยกตัวประกอบ LU และเร็วกว่า Cholesky เพราะหลีกเลี่ยงการรากที่สอง ดีเทอร์มิแนนต์เป็นผลคูณขององค์ประกอบของเมทริกซ์แนวทแยง รหัสที่จะดำเนินการแยกตัวประกอบ LDL จึงเป็นเรื่องง่ายๆที่คุณสามารถเขียนมันในเวลาน้อยกว่า 50 สายของซีหน้าวิกิพีเดียที่มันอธิบายขั้นตอนวิธีและฉันมีบางอย่างง่าย templated รหัสที่จะทำ Cholesky ที่นี่ คุณสามารถทำให้มันง่ายขึ้นอย่างมากและแก้ไขมันเพื่อหลีกเลี่ยงสแควร์รูทที่จะใช้การแยกตัวประกอบแบบL D L TDLDLT

เนื่องจากคุณสามารถควบคุมรูปแบบการจัดเก็บคุณสามารถเพิ่มประสิทธิภาพขั้นตอนการจัดเก็บเมทริกซ์เพียงครึ่งเดียวและแพ็คมันในอาร์เรย์เชิงเส้นเพื่อเพิ่มตำแหน่งหน่วยความจำให้สูงสุด ฉันจะเขียนจุดผลิตภัณฑ์แบบกำหนดเองอย่างง่ายและรูทีนการอัพเดทอันดับ 1 เนื่องจากขนาดของปัญหามีขนาดเล็กคุณควรให้คอมไพเลอร์อินไลน์รูทีนเพื่อลดค่าใช้จ่ายในการโทร เนื่องจากมันเป็นวงขนาดคงที่คอมไพเลอร์ควรจะสามารถอินไลน์โดยอัตโนมัติและปล่อยสิ่งต่าง ๆ ตามความเหมาะสม

ฉันจะหลีกเลี่ยงการพยายามเล่นกลเพื่อใช้ประโยชน์จากข้อเท็จจริงที่ว่ามีอยู่ในนิพจน์ เป็นไปได้ว่าสำหรับปัญหาที่มีขนาดเล็กเช่นนี้เทคนิคเหล่านี้จะช้ากว่าการคำนวณปัจจัยแยกสองตัว แน่นอนวิธีเดียวที่จะตรวจสอบการอ้างสิทธิ์เหล่านี้คือลองใช้Q12IQJQ


1
ฉันสองข้อเสนอแนะของการดำเนินการ , aka Cholesky ปราศจากรูตเนื่องจากอาร์มาดิลโล่ดูเหมือนจะไม่มีวิธีการใช้ประโยชน์จากการปกครองในเชิงบวก / เชิงเส้นทแยงมุม LDLT
hardmath

5

หากไม่มีข้อมูลเกี่ยวกับการสร้างเมทริกซ์สมมาตรจริงที่เป็นบวกแน่นอนนี้ข้อเสนอแนะที่จำเป็นต้องทำมีความ จำกัด อย่างเป็นธรรม12×12

ฉันดาวน์โหลดแพคเกจ Armadillo จาก Sourceforge และดูเอกสารประกอบ พยายามที่จะปรับปรุงประสิทธิภาพการทำงานของคอมพิวเตอร์แยกและที่เป็นอันดับหนึ่งเมทริกซ์ของทุกคนโดยการตั้งค่าเช่น หมายเหตุเอกสารที่ว่านี้เป็นค่าเริ่มต้นสำหรับการฝึกอบรมได้สูงสุดขนาดเพื่อโดยละเลยผมถือว่าเป็นตัวเลือกเริ่มต้นสำหรับที่กรณีdet(Q)det(12IQJ)Jdet(Q,slow=false)4×4slow=true12×12

สิ่งที่slow=true น่าจะเป็นไปได้คือการหมุนเป็นบางส่วนหรือทั้งหมดในรูปแบบระดับแถวซึ่งพบได้ง่าย อย่างไรก็ตามคุณรู้ล่วงหน้าว่าเมทริกซ์นั้นเป็นค่าบวกดังนั้นการหมุนไม่จำเป็นสำหรับความเสถียร (อย่างน้อยสันนิษฐานสำหรับการคำนวณจำนวนมากของคุณมันไม่ชัดเจนว่าแพ็คเกจอาร์มาดิลโลเกิดข้อยกเว้นถ้าปิวิตกลายเป็นขนาดเล็กเกินไป คุณลักษณะของแพคเกจพีชคณิตเชิงเส้นเชิงตัวเลขที่สมเหตุสมผลแก้ไข:ฉันพบโค้ดอาร์มาดิลโลที่ใช้ในไฟล์ส่วนหัวโดยใช้เทมเพลต C ++ สำหรับการใช้งานที่สำคัญการตั้งค่าไม่ปรากฏว่าส่งผลต่อQdetinclude\armadillo_bits\auxlib_meat.hppslow=false12×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)Q12IQdet(Q)det(12IQJ)O(n)J

การใช้การคำนวณแบบอิสระอาจคุ้มค่ากับการตรวจสอบผลลัพธ์ของการโทรที่ประสบความสำเร็จ (หรือล้มเหลว) ไปยังdetฟังก์ชันของ Armadillo

กรณีพิเศษ: ตามคำแนะนำของความคิดเห็นของ Jernej สมมติว่าโดยที่เหมือนเดิมคือเมทริกซ์ (อันดับ 1) ของทุกคนและคือ เมทริกซ์ทแยงมุมแบบไม่มีขอบ (บวก) อันที่จริงสำหรับการประยุกต์ใช้ที่เสนอในทฤษฎีกราฟสิ่งเหล่านี้จะเป็นเมทริกซ์จำนวนเต็ม ดังนั้นสูตรที่ชัดเจนสำหรับคือ:Q=DJJD=diag(d1,,dn)det(Q)

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

ภาพร่างของการพิสูจน์กำบังโอกาสที่จะแสดงให้เห็นถึงการบังคับใช้ที่กว้างขึ้นเช่นเมื่อใดก็ตามที่มีดีเทอร์มิแนนต์ที่รู้จักและระบบได้รับการแก้ไขอย่างรวดเร็ว เริ่มต้นด้วยการแยกตัวประกอบ:DDv=(11)T

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

ตอนนี้เป็นอีกครั้งที่อันดับ 1 คือ1) โปรดทราบว่าปัจจัยที่สองคือ:D1J(d11dn1)T(11)

f(1)=det(ID1J)

ที่เป็นพหุนามลักษณะของ J ในฐานะที่เป็นอันดับ 1 เมทริกซ์จะต้องมี (อย่างน้อย) ปัจจัยของเพื่อพิจารณาว่าเป็น nullspace ค่าลักษณะเฉพาะ "ที่หายไป" คือซึ่งอาจเห็นได้จากการคำนวณ:f(x)D1Jf(x)n1xdi1

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

มันตามมาว่าพหุนามลักษณะ , และดังที่แสดงไว้ข้างต้นสำหรับ ,1}f(x)=xn1(xdi1)f(1)det(ID1J)1di1

โปรดทราบว่าถ้าดังนั้นเมทริกซ์ทแยงมุมที่มีดีเทอร์มิแนนต์เป็นผลคูณของรายการในแนวทแยงQ=DJ12IQJ=12ID+JJ=12ID


หืมมม ..ในความเป็นจริงที่เป็นเมทริกซ์ถ้อยคำของดังนั้นผมจึงคิดว่าผลนี้อาจไม่ถูกต้อง โดยเฉพาะอย่างยิ่งมันจะบอกเป็นนัยว่าจำนวนของต้นไม้ที่ทอดของกราฟถูกกำหนดโดยลำดับการศึกษาระดับปริญญาของมันซึ่งไม่ได้ถือ QDAAGG
Jernej

รายการนอกแนวทแยงมุมของโดยทั่วไปแล้วจะมี 0 เช่นเดียวกับ -1 สลายตัวแนะนำโดยวิคเตอร์จะใช้ประโยชน์จากความสมมาตรและลดระยะชั้นนำในการดำเนินงานนับจากเพื่อ 3 มีวิธีการจำนวนเต็มอย่างแน่นอน แต่อาจไม่จำเป็นสำหรับเมทริกซ์ขนาดและรายการที่เหมาะสม ถ้าฉันเข้าใจการก่อสร้างเป็นบวกแน่นอนด้วยเหตุผลเดียวกันคือ QLDLT23n313n312IQJQ
hardmath

@Jernej: หากคุณเชื่อว่าสิ่งที่ฉันระบุไม่ถูกต้องฉันได้สร้างห้องแชทตามคำถามนี้ซึ่งสามารถสนทนาได้โดยไม่ต้องแสดงความคิดเห็นที่ไม่จำเป็นที่นี่
hardmath

1

หากคุณมีวิธีการจัดโครงสร้างกราฟที่คุณต้องการคำนวณดีเทอร์มินัลคุณอาจพบการอัปเดตระดับต่ำซึ่งโอนคุณจากกราฟหนึ่งไปยังอีกกราฟหนึ่ง

ถ้าเป็นเช่นนั้นคุณสามารถใช้เมทริกซ์ดีเทอร์มิแนนต์ lemmaเพื่อคำนวณดีเทอร์มีแนนต์ของกราฟที่ตามมาที่จะนับโดยใช้ความรู้เกี่ยวกับดีเทอร์มิแนนต์ของกราฟปัจจุบัน

นั่นคือสำหรับเมทริกซ์และเวกเตอร์ : นี่สามารถสรุปได้ถ้า U และ V เป็นเมทริกซ์และคือ : Au,v

det(A+uvT)=(1+vTA1u)det(A)
n×mAn×n
det(A+UVT)=det(Im+VTA1U)det(A)

ในการคำนวณค่าผกผันอย่างมีประสิทธิภาพคุณสามารถใช้สูตร Sherman-Morrisonเพื่อให้ได้ค่าผกผันของเมทริกซ์ที่ตามมาจากปัจจุบัน:

(A+uvT)1=A1A1uvTA11+vTA1u

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.