ตัวแก้เชิงเส้นเบาบางสำหรับหลาย ๆ มือขวา


12

ฉันจำเป็นต้องแก้ปัญหาระบบเชิงเส้นแบบกระจัดกระจาย (300x300 ถึง 1,000x1000) ที่มีด้านขวามือจำนวนมาก (300 ถึง 1,000) นอกเหนือจากปัญหาแรกนี้ฉันยังต้องการที่จะแก้ปัญหาระบบที่แตกต่างกัน แต่ด้วยองค์ประกอบที่ไม่เป็นศูนย์เหมือนกัน (ค่าที่แตกต่างกัน) ซึ่งเป็นระบบที่ห่างเหินจำนวนมากที่มีรูปแบบการกระจายอย่างต่อเนื่อง เมทริกซ์ของฉันไม่มีกำหนด

ประสิทธิภาพของการแยกตัวประกอบและการกำหนดค่าเริ่มต้นไม่สำคัญ แต่ประสิทธิภาพของขั้นตอนการแก้คือ ขณะนี้ฉันกำลังพิจารณา PaStiX หรือ Umfpack และฉันอาจจะเล่นกับ Petsc (ซึ่งรองรับทั้งนักแก้ปัญหา) มีห้องสมุดที่สามารถใช้ประโยชน์จากความต้องการเฉพาะของฉัน (vectorization, multi-threading) หรือฉันควรพึ่งพานักแก้ปัญหาทั่วไปและ อาจแก้ไขได้เล็กน้อยตามความต้องการของฉัน

เกิดอะไรขึ้นถ้าเมทริกซ์กระจัดกระจายมีขนาดใหญ่ขึ้นถึง ?106×106

คำตอบ:


10

การอภิปรายโดยไม่คำนึงถึงว่าจะใช้นักแก้ปัญหาโดยตรงหรือวนซ้ำฉันแค่ต้องการเพิ่มจุดสองจุด:

  1. มีวิธี Krylov สำหรับระบบที่มีด้านขวาหลายด้าน (เรียกว่าวิธีบล็อก Krylov ) ในฐานะที่เป็นโบนัสเพิ่มเติมเหล่านี้มักจะมีการลู่เข้าได้เร็วกว่าวิธี Krylov มาตรฐานเนื่องจากพื้นที่ Krylov สร้างขึ้นจากชุดเวกเตอร์ขนาดใหญ่ ดูDianne พีโอเลียรี่, บล็อก Conjugate ไล่โทนสีขั้นตอนวิธีการและวิธีการที่เกี่ยวข้อง พีชคณิตเชิงเส้นและการประยุกต์ 29 (1980) หน้า 239-322 และMartin H. Gutknecht, วิธีการเว้นช่องว่าง Krylov สำหรับระบบเชิงเส้นที่มีด้านขวาหลายด้าน: บทนำ (2007)

  2. หากคุณมีเมทริกซ์ต่างกันที่มีรูปแบบ sparsity เดียวกันคุณสามารถคำนวณค่าการแยกตัวประกอบสัญลักษณ์สำหรับเมทริกซ์แรกซึ่งสามารถนำมาใช้ซ้ำในการคำนวณการแยกตัวประกอบเชิงตัวเลขสำหรับเมทริกซ์นี้และเมทริกซ์ที่ตามมา (ใน UMFPACK คุณสามารถทำได้โดยใช้umfpack di symbolicและส่งผ่านผลลัพธ์ไปที่umfpack_di_numeric)


9

O(N)


4
O(N2)O(N4/3)O(N4/3)N

3
O(N)O(N4/3)

2
105n<300k

3

คุณยังไม่ชัดเจนในคำแถลงปัญหาเมื่อพูดถึง "องค์ประกอบที่ไม่เป็นศูนย์เดียวกัน (แค่ค่าต่างกัน)" คุณกำลังบอกว่าเมทริกซ์มีรูปแบบการกระจายอย่างคงที่ แต่ค่าจริงเปลี่ยนไปหรือไม่? หรือคุณกำลังบอกว่าเมทริกซ์นั้นคงที่หรือไม่?

PA=LUO(n2)

สำหรับด้านขวามือหลายข้างและระบบสมการขนาดนี้โดยทั่วไปวิธีการทำซ้ำจะไม่คุ้มค่าในขณะที่

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

ฉันขอแนะนำให้ใช้ Umfpack สำหรับงานนี้ - PaStix และ PetSc เป็น overkill


ขอบคุณสำหรับคำตอบ. เพื่อชี้แจง: ฉันขอเมทริกซ์เดี่ยวที่มีด้านขวามือจำนวนมากก่อนจากนั้นปัญหาอื่นคือชุดของเมทริกซ์ที่มีพ่อแม่ที่เหมือนกัน แต่การเปลี่ยนแปลงค่าแต่ละคนจะต้องได้รับการแก้ไขหลาย rhs คำถามย่อย: จะเกิดอะไรขึ้นถ้าเมทริกซ์กระจัดกระจายคือ 10 ^ 5x10 ^ 5 ถึง 10 ^ 6x10 ^ 6
nat chouf

2
105

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

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