ฉันจะพยายามคิดคำถามแรกเกี่ยวกับการอดอาหาร3×3ผกผัน พิจารณา
A=⎡⎣⎢abcdefghi⎤⎦⎥
เนื่องจากเมทริกซ์มีขนาดเล็กและทั่วไปมาก (ไม่ต้องมีโครงสร้างใด ๆ ที่รู้จักกันเป็นเลขศูนย์, สเกลสัมพัทธ์ขององค์ประกอบ) ฉันคิดว่ามันคงเป็นไปไม่ได้ที่จะให้อัลกอริธึมสำหรับสเกลตามอำเภอใจ (โดยไม่มี 1/det(A)) ผกผันที่เร็วกว่า 18 flops หลอมรวมเป็น 9 จากองค์ประกอบแต่ละต้อง 2 หลอมรวมรองเท้าและผลิตภัณฑ์ทั้งหมดจะไม่ซ้ำกันไม่ให้ข้อมูลก่อนในรายการ 'sฉัน
นี่หมายถึง adjugate (เปลี่ยนจาก cofactors) ซึ่งเป็นหลัก ผกผันกับ "ขนาดโดยพลการ" (หากมีอยู่ตรงกันข้าม)Aa,…,i
A−1det(A)=adj(A)=⎡⎣⎢ei−fhbi−chce−bfdi−fgai−cgaf−cdge−dhah−bgae−bd⎤⎦⎥
adj(A)
อย่างไรก็ตามการคำนวณบางชนิดที่สามารถนำกลับมาใช้ในการคำนวณของ(A) ถ้าฉันขยายมันในคอลัมน์แรก (มีอีก 5 ตัวเลือก):
ประกาศว่า (* ) ได้รับการคำนวณแล้วในระหว่างการประเมินผลของ(A) ดังนั้นส่วนกลับของดีเทอร์มิแนนต์สามารถคำนวณได้ใน 4 ฟล็อตฟิวชั่นเพิ่มเติม (ถ้าซึ่งกันและกันถือเป็น 1 ฟลอพ)det(A)
det(A)=a(ei−fh)+b(fg−di)+c(dh−ge)=a(ei−fh)∗−b(di−fg)∗−c(ge−dh)∗
adj(A)1/det(A)
ตอนนี้องค์ประกอบ 9 อย่างของควรถูกปรับสัดส่วนโดยการได้รับส่วนกลับของดีเทอร์มิแนนต์เพิ่มอีก 9 flops ที่หลอมรวมแล้วadj(A)
ดังนั้น,
- คำนวณในช่องว่างหลอมรวม 18 ชิ้นadj(A)
- คำนวณใน 3 หลอมรวม flops โดยใช้รายการที่คำนวณแล้วdet(A)adj(A)
- ค้นหา (สมมติว่า 1 flop)1det(A)
- ปรับขนาดแต่ละ 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 และรูปแบบการเข้าถึงหน่วยความจำที่เหมาะสมยังไม่ได้กล่าวถึง