อัลกอริธึมที่เร็วที่สุดสำหรับการคำนวณเมทริกซ์ผกผันคืออะไรและดีเทอร์มิแนนต์ของเมทริกซ์สมมาตรเชิงบวกแน่นอน


10

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

  1. ความแม่นยำและความเร็วสูงเป็นสิ่งจำเป็นอย่างยิ่ง (มีการฝึกอบรมหลายล้านครั้ง)
  2. ตัวกำหนดมีความจำเป็นในการคำนวณแต่ละครั้งจะต้องมีเพียงหนึ่งองค์ประกอบของเมทริกซ์ที่หลากหลายเท่านั้น ขอบคุณ!

คุณต้องสลับเมทริกซ์นี้เป็นล้าน ๆ ครั้งหรือไม่? มิฉะนั้นความเร็วจะไม่เป็นปัญหา
Wolfgang Bangerth

ฉันแก้ไขชื่อและคำถามของคุณเพื่อความชัดเจน หากฉันทำผิดพลาดโปรดแจ้งให้เราทราบ
Geoff Oxberry

@ Wolfgang Bangerth ใช่ควรพิจารณาความเร็วด้วย
คำสั่งซื้อ

1
คุณรู้หรือไม่ว่าองค์ประกอบของเมทริกซ์ผกผันนั้นต้องการอะไร? หรือมันอาจเป็นรายการแบบสุ่ม?
Memming

2
@Orders ความคิดเห็นและการแก้ไขของคุณดูเหมือนขัดแย้ง: คุณต้องการองค์ประกอบหนึ่งของการผกผันหรือทั้งหมดหรือไม่
Federico Poloni

คำตอบ:


12

สำหรับปัญหาที่ฉันสนใจมิติของเมทริกซ์คือ 30 หรือน้อยกว่า

ในฐานะที่เป็น WolfgangBangerth หมายเหตุเว้นแต่ว่าคุณจะมีเมทริกซ์เหล่านี้จำนวนมาก (ล้านล้านล้านดอลลาร์) ประสิทธิภาพของเมทริกซ์ผกผันโดยทั่วไปจะไม่เป็นปัญหา

เมื่อพิจารณาเมทริกซ์สมมาตรเชิงบวกที่แน่นอนอัลกอริธึมที่เร็วที่สุดสำหรับการคำนวณเมทริกซ์ผกผันและดีเทอร์มิแนนต์คืออะไร

หากความเร็วเป็นปัญหาคุณควรตอบคำถามต่อไปนี้:

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

การตอบสนองมาตรฐานต่อปัญหาของคุณในการแปลงเมทริกซ์แน่นอนที่เป็นบวกและมีขนาดเล็กและการคำนวณดีเทอร์มิแนนต์คือการสลายตัวของ Cholesky ถ้าA=LLTจากนั้น det(A)=i=1nlii2และ2}det(A1)=i=1nlii2

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


เพียงแค่ทราบคร่าวๆ: ถ้า , การคำนวณองค์ประกอบหนึ่งหนึ่งควรคำนวณเฉพาะ TH คอลัมน์Bเมื่อ factorisation Cholesky คำนวณนี้จะกระทำโดยการไปข้างหน้าและย้อนกลับไปทดแทนส่วนที่เกี่ยวกับเวกเตอร์ RHS ของศูนย์ทั้งหมดและมีเพียงหนึ่งเดียวในแถวที่ jเนื่องจากการคำนวณสามารถถูกอินเตอร์ทันทีที่ถูกคำนวณดังนั้นกรณีที่ดีที่สุดสำหรับกรณีที่แย่ที่สุดสำหรับซึ่งต้องคำนวณเต็มด้านหลังและ ไปข้างหน้าแทน B=A1bijjBjbijbnn=lnn2b11
Stefano M

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