เร็วและเสถียร (ซ้าย)


10

ฉันต้องคำนวณจำนวนมาก 3×3 เมทริกซ์ผกผัน (สำหรับการสลายตัวแบบวนซ้ำของนิวตันโดยมีจำนวนผู้ป่วยที่เสื่อมสภาพน้อยมาก (<0.1%)

การผกผันอย่างชัดเจน (ผ่านผู้เยาว์เมทริกซ์หารด้วยดีเทอร์แนนต์) ดูเหมือนว่าจะทำงานได้และประมาณ ~ 32 ~ 40 หลอมรวม flops (ขึ้นอยู่กับว่าฉันคำนวณคำนวณส่วนกลับกันอย่างไร) การไม่คำนึงถึงปัจจัยระดับสเกลเป็นเพียง 18 ฟิวชั่นฟิกซ์ (แต่ละองค์ประกอบ 9 รายการมีรูปแบบ ab-cd, 2 หลอมรวมฟลอป)

คำถาม:

  • มีวิธีคำนวณค่าผกผันของ 3×3 ใช้น้อยกว่า 18 (กับขนาดโดยพลการ) หรือ 32 (ด้วยขนาดที่เหมาะสมพิจารณา 1 ซึ่งกันและกัน) flops ผสม?
  • มีวิธีการประหยัดหรือไม่ (ใช้ ~ 50 f-flops) เพื่อคำนวณค่าอินเวอร์สซ้ายหลังที่เสถียรของ a 3×3 เมทริกซ์?

ฉันกำลังใช้โฟลทแม่นยำ (เกม iOS) เสถียรภาพด้านหลังเป็นแนวคิดใหม่ที่น่าสนใจสำหรับฉันและฉันต้องการทดสอบ นี่คือบทความที่กระตุ้นความคิด


สิ่งที่เกี่ยวกับการใช้ทฤษฎีบท Cayley-Hamilton สำหรับผกผัน?
nicoguaro

1
หากนี่เป็นปัญหาคอขวดสำหรับคุณอัลกอริธึมอื่นสำหรับการสลายตัวของขั้วอาจจะเร็วกว่าในกรณีนี้หรือไม่? ผ่าน SVD เช่น หรือเร่งวิธีของนิวตันเช่นเดียวกับใน 3.3 ของeprints.ma.man.ac.uk/694/01/covered/MIMS_ep2007_9.pdf ?
คิริลล์

คำตอบ:


5

ฉันจะพยายามคิดคำถามแรกเกี่ยวกับการอดอาหาร3×3ผกผัน พิจารณา

A=[adgbehcfi]

เนื่องจากเมทริกซ์มีขนาดเล็กและทั่วไปมาก (ไม่ต้องมีโครงสร้างใด ๆ ที่รู้จักกันเป็นเลขศูนย์, สเกลสัมพัทธ์ขององค์ประกอบ) ฉันคิดว่ามันคงเป็นไปไม่ได้ที่จะให้อัลกอริธึมสำหรับสเกลตามอำเภอใจ (โดยไม่มี 1/det(A)) ผกผันที่เร็วกว่า 18 flops หลอมรวมเป็น 9 จากองค์ประกอบแต่ละต้อง 2 หลอมรวมรองเท้าและผลิตภัณฑ์ทั้งหมดจะไม่ซ้ำกันไม่ให้ข้อมูลก่อนในรายการ 'sฉัน นี่หมายถึง adjugate (เปลี่ยนจาก cofactors) ซึ่งเป็นหลัก ผกผันกับ "ขนาดโดยพลการ" (หากมีอยู่ตรงกันข้าม)Aa,,i

A1det(A)=adj(A)=[eifhdifggedhbichaicgahbgcebfafcdaebd]
adj(A)

อย่างไรก็ตามการคำนวณบางชนิดที่สามารถนำกลับมาใช้ในการคำนวณของ(A) ถ้าฉันขยายมันในคอลัมน์แรก (มีอีก 5 ตัวเลือก): ประกาศว่า (* ) ได้รับการคำนวณแล้วในระหว่างการประเมินผลของ(A) ดังนั้นส่วนกลับของดีเทอร์มิแนนต์สามารถคำนวณได้ใน 4 ฟล็อตฟิวชั่นเพิ่มเติม (ถ้าซึ่งกันและกันถือเป็น 1 ฟลอพ)det(A)

det(A)=a(eifh)+b(fgdi)+c(dhge)=a(eifh)b(difg)c(gedh)
adj(A)1/det(A)

ตอนนี้องค์ประกอบ 9 อย่างของควรถูกปรับสัดส่วนโดยการได้รับส่วนกลับของดีเทอร์มิแนนต์เพิ่มอีก 9 flops ที่หลอมรวมแล้วadj(A)

ดังนั้น,

  1. คำนวณในช่องว่างหลอมรวม 18 ชิ้นadj(A)
  2. คำนวณใน 3 หลอมรวม flops โดยใช้รายการที่คำนวณแล้วdet(A)adj(A)
  3. ค้นหา (สมมติว่า 1 flop)1det(A)
  4. ปรับขนาดแต่ละ elelemt ของที่คำนวณแล้วโดยในอีก 9 flops ผสมadj(A)1det(A)

ส่งผลให้ใน + 3 18 + 1 + 9 = 31 flops คุณไม่ได้อธิบายวิธีการคำนวณดีเทอร์มิแนนต์ของคุณ แต่ฉันเดาว่าสามารถบันทึกฟลอพเพิ่มเติมได้อีก 1 อัน หรือสามารถใช้ในการตรวจสอบในขั้นตอนที่ 3 โดยที่คือความอดทนสำหรับกรณีเลว (ไม่กลับด้าน) ทำให้เกิดflops 32 อัน (สมมติว่าเป็น 1 flop)|det(A)|>ϵϵif

ฉันไม่คิดว่าจะมีวิธีที่เร็วกว่าในการคำนวณค่าผกผันของเมทริกซ์ทั่วไปเนื่องจากการคำนวณที่เหลือทั้งหมดไม่ซ้ำกัน การใช้ Cayley-Hamilton ไม่ควรช่วยจากมุมมองความเร็วเช่นโดยทั่วไปจะต้องคำนวณสำหรับเมทริกซ์นอกเหนือจากการดำเนินการอื่น ๆ3×3A23×3

หมายเหตุ:

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