การแก้ระบบด้วยการอัพเดทแนวทแยงอันดับเล็ก ๆ


9

สมมติว่าฉันมีระบบ linear ขนาดใหญ่แบบดั้งเดิม: Ax0=b0. ตอนนี้ฉันไม่มีA1 เนื่องจาก A ใหญ่เกินไปที่จะแยกตัวประกอบหรือแยกย่อยใด ๆ ของ Aแต่สมมติว่าฉันมีทางออก x0 พบกับการแก้ซ้ำ ๆ

ตอนนี้ฉันต้องการใช้การอัปเดตอันดับเล็กน้อยกับเส้นทแยงมุมของ A (เปลี่ยนรายการเส้นทแยงมุมเล็กน้อย): (A+D)x1=b0 ที่ไหน Dเป็นเมทริกซ์แนวทแยงที่มีค่า 0 ส่วนใหญ่เป็นเส้นทแยงมุมและค่าที่ไม่เป็นศูนย์ ถ้าฉันมีA1ฉันจะสามารถใช้ประโยชน์จากสูตร Woodbury เพื่อใช้การอัปเดตกับสิ่งที่ตรงกันข้าม อย่างไรก็ตามฉันไม่มีสิ่งนี้ มีอะไรบ้างที่ฉันทำได้เพียงแค่แก้ไขปัญหาระบบทั้งหมดซ้ำแล้วซ้ำอีก? มีวิธีใดบ้างที่ฉันจะได้รับสิ่งที่จำเป็นก่อนM ซึ่งง่ายต่อการกลับด้าน \ ง่ายเช่นนั้น MA1A0ดังนั้นฉันจะต้องทำทั้งหมดถ้ามี x0 ถูกนำไปใช้ M1 และวิธีการวนซ้ำจะมาบรรจบกันในการทำซ้ำสองสามครั้ง?


คุณเริ่มต้นด้วยปัจจัยพื้นฐานที่ดีสำหรับ Aและต้องการทราบวิธีอัปเดตหรือไม่ การอัปเดตคืออันดับใด (อันดับ1000 การอัพเดตคือ "เล็ก" เปรียบเทียบกับขนาดของเมทริกซ์ 109แต่ไม่เล็กในแง่ของการทำซ้ำนับ).
เจดบราวน์

A มีขนาดประมาณ 106 ถึง 107และการอัปเดตคือองค์ประกอบ <1,000 (น่าจะเป็น <100) ฉันใช้เครื่องปรับสภาพอากาศในแนวทแยงมุมสำหรับ A ซึ่งทำงานได้ดีจริงๆดังนั้นการอัปเดตที่ไม่สำคัญ แต่ฉันสงสัยว่ามีอะไรดีกว่าที่ฉันสามารถทำได้แทนที่จะแก้ไขระบบใหม่ตั้งแต่เริ่มต้น
Costis

2
การแก้ปัญหาของระบบเดียวไม่ได้บอกอะไรคุณมากนัก หากคุณแก้ระบบเดียวกันหลาย ๆ ครั้งแผนที่ผกผันของเวกเตอร์เหล่านั้น (และ / หรือช่องว่าง Krylov ที่เกี่ยวข้อง) ให้ข้อมูลบางอย่างที่สามารถใช้เพื่อเร่งการลู่เข้า คุณกำลังแก้ไขระบบกี่กรณีในแต่ละกรณี?
Jed Brown

ขณะนี้ฉันกำลังแก้ไขเพียงหนึ่ง RHS (b เวกเตอร์) แต่ละอัน A เมทริกซ์ก่อนการแก้ไข A.
Costis

คำตอบ:


4
  1. บันทึกในคอลัมน์สองเมทริกซ์ B และ C เวกเตอร์ทั้งหมด bj ที่คุณใช้เมทริกซ์ในการทำซ้ำก่อนหน้านี้และผลลัพธ์ cj=Abj.

  2. สำหรับแต่ละระบบใหม่ (A+D)x=b (หรือ Ax=bซึ่งเป็นกรณีพิเศษ D=0) ประมาณแก้ระบบเชิงเส้น overdetermined (C+DB)ybเช่นโดยการเลือกชุดย่อยของแถว (อาจเป็นทั้งหมด) และใช้วิธีกำลังสองน้อยที่สุดที่หนาแน่น โปรดทราบว่าเฉพาะส่วนที่เลือกของC+DBจะต้องมีการประกอบ; ดังนั้นนี่เป็นการดำเนินการที่รวดเร็ว!

  3. ใส่ x0=By. นี่คือการประมาณเริ่มต้นที่ดีด้วยการเริ่มต้นการทำซ้ำสำหรับการแก้ปัญหา(A+D)x=b. ในกรณีที่ต้องดำเนินการระบบเพิ่มเติมให้ใช้เมทริกซ์ผลิตภัณฑ์เวกเตอร์ในการวนซ้ำใหม่นี้เพื่อขยายเมทริกซ์B และ C บนระบบย่อยที่ได้

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

ควรเลือกแถวในลักษณะที่สอดคล้องกับ discretization หยาบของปัญหาทั้งหมด การเพิ่มจำนวนแถวมากกว่าห้าเท่าของจำนวนทั้งหมดของเมทริกซ์เวกเตอร์ที่คาดหวังน่าจะเพียงพอ

แก้ไข: เหตุใดจึงใช้งานได้ โดยการก่อสร้างการฝึกอบรมB และ C มีความเกี่ยวข้องโดย C=AB. หากพื้นที่ย่อยถูกขยายโดยคอลัมน์ของB มีเวกเตอร์โซลูชันที่แน่นอน x (เป็นสถานการณ์ที่หายาก แต่ง่าย) จากนั้น x มีแบบฟอร์ม x=By สำหรับบางคน y. แทนสิ่งนี้ลงในสมการที่กำหนดx ให้สมการ (C+DB)y=b. ดังนั้นในกรณีนี้กระบวนการข้างต้นจึงเป็นจุดเริ่มต้นx0=By=xซึ่งเป็นทางออกที่แน่นอน

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

แก้ไข 2: เกี่ยวกับพื้นที่ย่อยที่สร้างขึ้น: หากมีการแก้ปัญหาแต่ละระบบด้วยวิธี Krylov เวกเตอร์ที่ใช้ในการรับจุดเริ่มต้นสำหรับระบบที่สองครอบคลุมพื้นที่ย่อย Krylov ของด้านขวามือแรก ดังนั้นหนึ่งจะได้รับการประมาณที่ดีเมื่อใดก็ตามที่พื้นที่ย่อย Krylov นี้มีเวกเตอร์ใกล้กับวิธีแก้ปัญหาของระบบที่สองของคุณ โดยทั่วไปเวกเตอร์เคยเป็นจุดเริ่มต้นสำหรับ(k+1)ระบบ st ขยายพื้นที่ที่มีพื้นที่ย่อย Krylov ของแรก k ด้านขวามือ


ขอบคุณศาสตราจารย์ Neumaier ฉันจะลองทำดู คุณอาจจะให้คำอธิบายสั้น ๆ เกี่ยวกับวิธีการทำงานของฉันได้ไหม
Costis

นอกจากนี้ถ้าฉันต้องการแก้ระบบเดียวกันสำหรับเวกเตอร์ RHS ที่แตกต่างกัน? กล่าวคือAx0=b0, Ax1=b1, Ax2=b2ฯลฯ มีข้อมูลใดบ้างที่ฉันสามารถใช้จากตัวแก้ก่อนหน้าเพื่อเร่งความเร็วตัวต่อไป?
Costis

@Costis: การแก้ไขด้วยเมทริกซ์เดียวกันเป็นเพียงกรณีพิเศษ D=0ของปัญหาทั่วไป สำหรับคำถามแรกของคุณดูการแก้ไข
Arnold Neumaier

@Costis: ฉันเพิ่มรายละเอียดอีกเล็กน้อยไปยังขั้นตอนที่ 2 - ถ้าคุณเขียนใบสมัครโปรดส่งมาพิมพ์ล่วงหน้า
Arnold Neumaier

ขอบคุณสำหรับคำอธิบาย! ทำไมฉันไม่สามารถแก้ระบบที่ overdetermined ได้(C+DB)ybโดยใช้วิธีการแยกตามตัวประกอบของ QR และใช้แถวทั้งหมดแทนที่จะเป็นชุดย่อย? ฉันเดาว่าเมื่อจำนวนคอลัมน์ของ C และ B เพิ่มขึ้นฉันอาจต้องกำจัดแถวบางส่วนออกเพื่อให้การทำงานเร็วขึ้น แน่นอนว่าฉันจะเขียนคำอธิบายของระบบและส่งอีเมลถึงคุณ จริง ๆ แล้วฉันคิดว่าเป็นไปได้ที่จะเกิดโครงร่างเฉพาะแอปพลิเคชันที่อาจทำงานได้ดีกว่ากรณีทั่วไป ขอบคุณ!
Costis
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.