ที่น่าสนใจว่าคำถามนี้มาเมื่อวานนี้ตั้งแต่ฉันเพิ่งเสร็จสิ้นการดำเนินการเมื่อวานนี้ที่ทำ
พื้นหลังของฉัน
เพียงเพื่อเริ่มต้นให้ฉันรู้ว่าในขณะที่พื้นหลังการศึกษาของฉันมาจากการคำนวณทางวิทยาศาสตร์งานทั้งหมดที่ฉันได้ทำมาตั้งแต่เรียนจบรวมถึงปริญญาเอกปัจจุบันของฉัน งานได้รับในแม่เหล็กไฟฟ้าคอมพิวเตอร์ ดังนั้นฉันเดาว่าภูมิหลังของเราค่อนข้างคล้ายกันเนื่องจากคุณดูเหมือนจะมองฟิสิกส์ (ตามโปรไฟล์ของคุณ)
FGMRES
ก่อนอื่นสิ่งที่คุณกำลังมองหาในขณะที่ Guido Kanschat ได้กล่าวถึงแล้วในความคิดเห็นที่เรียกว่ายืดหยุ่น GMRES หรือ FGMRES การอ้างอิงรวมถึง pseudocode นั้นอยู่ใน [1] ในขณะที่บางครั้งฉันพบว่าเอกสาร SIAM ที่อ่านยากตัวเลข [1] (และงานอื่น ๆ ของ Saad ส่วนใหญ่รวมถึง [B1] ที่ยอดเยี่ยมซึ่งเห็นได้ชัดว่าถูกกฎหมายให้บริการออนไลน์ฟรี) นั้นแตกต่างกัน กระดาษเป็นเรื่องที่น่าอ่านอ่านอย่างชัดเจนและมีตัวอย่างที่ดีและคำแนะนำสำหรับการใช้งาน
FGMRES นั้นใช้งานง่ายโดยเฉพาะอย่างยิ่งถ้าคุณมี GMRES ที่ถูกต้องตามเงื่อนไขการทำงานอยู่แล้ว จดคำสำคัญที่นี่ - หากคุณมี GMRES ที่กำหนดเงื่อนไขไว้ล่วงหน้าเช่นคุณใช้เพื่อแก้ MAx = Mb คุณต้องทำการแก้ไขเล็กน้อย เปรียบเทียบ [B1, อัลกอริทึม 9.4 บนหน้า 282] ถึง [B1, อัลกอริทึม 9.5, pg 284] คุณสามารถค้นหา FGMRES ได้ใน [B1, อัลกอริทึม 9.6, pg 287] แต่ฉันอยากจะแนะนำให้คุณอ่าน [1] เพราะมันสั้นเขียนได้ดีและยังมีรายละเอียดที่น่าสนใจมากมาย
มันทำอะไร
FGMRES ช่วยให้คุณสามารถเปลี่ยนเงื่อนไขสำหรับการวนซ้ำทุกครั้งหากคุณต้องการ หนึ่งในแอพพลิเคชั่นสำหรับสิ่งนี้คือคุณสามารถใช้ตัวควบคุมล่วงหน้าที่ทำงานได้ดีเมื่อคุณอยู่ห่างไกลจากโซลูชัน [2] ซึ่งฉันไม่ได้อ่านอย่างละเอียดดูเหมือนจะพูดถึงบางสิ่งที่คล้ายกับสิ่งนี้
อย่างไรก็ตามแอปพลิเคชั่นที่น่าสนใจที่สุดในกรณีของฉันคือคุณสามารถใช้ GMRES (เงื่อนไข) เป็นเงื่อนไขเบื้องต้นสำหรับ FGMRES ของคุณ นี่คือเหตุผลที่อยู่เบื้องหลังชื่อทั่วไปของ FGMRES "GMRES ด้านใน" ที่นี่ "outer" หมายถึงตัวแก้ FGMRES ซึ่ง (ในฐานะที่มีเงื่อนไขก่อนหน้า) ใช้ตัวแก้ปัญหา "inner"
ในทางปฏิบัติแล้วสิ่งนี้ดีอย่างไร?
ในกรณีของฉันมันใช้งานได้ดีอย่างแน่นอน ในวงด้านในฉัน "แก้ปัญหา" การกำหนดปัญหาที่ซับซ้อนน้อยลงของปัญหาของฉัน ด้วยตัวของมันเองวิธีนี้ไม่ถูกต้องสำหรับการใช้งานของเรามากเกินไป หมายเหตุ "" รอบ "แก้ปัญหา" - ไม่จำเป็นต้องเรียกใช้ตัวแก้ปัญหาด้านในเพื่อรวมกันเนื่องจากคุณเพียงมองหาการประมาณคร่าวๆ ในกรณีของฉันฉันไปจากการใช้ 151 รอบแต่ละการคิดต้นทุน 64 วินาทีเป็น 72 การวนซ้ำแต่ละการคิดต้นทุน 79 วินาที (ฉันใช้การวนซ้ำ 5 ครั้งใน GMRES ชั้นใน) นั่นคือประหยัดทั้งชั่วโมงโดยไม่สูญเสียความแม่นยำและการเขียนโค้ดเพียงเล็กน้อยเนื่องจากเรามี GMRES ที่ใช้งานได้ซึ่งเราเพิ่งทำซ้ำ
สำหรับแอปพลิเคชันบางอย่างของสิ่งนี้แสดงให้เห็นถึงประสิทธิภาพที่เป็นไปได้ดู [3] (ซึ่งจริงๆแล้วใช้ FGMRES สามระดับดังนั้น FGMRES โดยที่ FGMRES เป็นด้านในโดยมี GMRES เป็นด้านใน) และ [4] ซึ่งอาจเกินไป แอปพลิเคชั่นเฉพาะสำหรับการใช้งานของคุณ แต่มีหลายกรณีทดสอบที่น่าสนใจ
อ้างอิง
[1] Y. Saad“ อัลกอริทึม GMRES จากภายในสู่ภายนอกที่ยืดหยุ่น” SIAM J. Sci Comp., vol. 14 หมายเลข 2, pp. 461–469, มี.ค. 1993. http://www-users.cs.umn.edu/~saad/PDF/umsi-91-279.pdf
[2] D.-Z Ding, R.-S. Chen และ Z. Fan, "SSOR กำหนดเงื่อนไข GMRES แบบยืดหยุ่นจากภายในสำหรับการวิเคราะห์ MLFMM ของการกระเจิงของวัตถุเปิด" ความคืบหน้าในการวิจัยเกี่ยวกับแม่เหล็กไฟฟ้า 89, pp. 339–357, 2009. http://www.jpier.org/PIER/pier89/22.08112601.pdf
[3] TF Eibert,“ ผลการกระเจิงบางอย่างคำนวณโดยเทคนิคผิว - อินทิกรัล - สมการและไฮบริด - องค์ประกอบ - ขอบเขต - อินทิกรัล - เทคนิค, เร่งความเร็วด้วยวิธี multipole รวดเร็วหลายระดับ” IEEE Antennas และ Propagation Magazine, Vol. 49, ไม่มี 2, pp. 61–69, 2007
[4] Ö. Ergül, T. Malas, และ L. Gürel,“ การแก้ปัญหาของคลื่นแม่เหล็กไฟฟ้าขนาดใหญ่โดยใช้แผนการวนรอบนอก - ข้างนอกที่มีอัลกอริธึมแบบ Multipole แบบหลายชั้นปกติและโดยประมาณ,” ความคืบหน้าในการวิจัยเกี่ยวกับแม่เหล็กไฟฟ้า 106, pp. 203–223, 2010 http://www.jpier.org/PIER/pier106/13.10061711.pdf
[B1] วายซาด, วิธีการทำซ้ำสำหรับระบบเชิงเส้นแบบกระจาย SIAM, 2003 http://www-users.cs.umn.edu/~saad/IterMethBook_2ndEd.pdf