FAS-multigrid ช้ากว่าการแก้ไขข้อบกพร่องเชิงเส้นหรือไม่


9

ฉันใช้ตัวแก้ไขมัลติ - กริด V-Cycle โดยใช้ทั้งการแก้ไขข้อบกพร่องเชิงเส้น (LDC) และโครงร่างการประมาณแบบเต็ม (FAS)

ปัญหาของฉันคือต่อไปนี้: การใช้ LDC ที่เหลือจะลดลงโดยปัจจัย ~ 0.03 ต่อรอบ การปรับใช้ FAS จะรวมเข้ากับปัจจัยเชิงเส้นด้วยเช่นกัน แต่ปัจจัยเพียง 0.58 เท่านั้น ดังนั้น FAS ต้องการประมาณ 20 เท่าของจำนวนรอบ

ส่วนใหญ่ของรหัสที่ใช้ร่วมกันความแตกต่างเพียงอย่างเดียวคือการคำนวณขึ้น / ลง, LDC ใช้

ลง:ยูH=0,H=ผมชั่วโมงH(ชั่วโมง-Lชั่วโมงยูชั่วโมง)

ขึ้น:ยูชั่วโมง=ยูชั่วโมง+ผมHชั่วโมงยูH

และ FAS ใช้

ลง:ยูH=ผมชั่วโมงHยูชั่วโมง,H=ผมชั่วโมงHชั่วโมง+LHผมชั่วโมงHยูชั่วโมง-ผมชั่วโมงHLชั่วโมงยูชั่วโมง

ขึ้น:ยูชั่วโมง=ยูชั่วโมง+ผมHชั่วโมง(ยูH-ผมชั่วโมงHยูชั่วโมง)

การตั้งค่าการทดสอบของฉันมาจาก "A Multigrid Tutorial, Second Edition" ของ Brigg 64 มีวิธีวิเคราะห์

ยู(x,Y)=(x2-x4)(Y4-Y2)กับx,y[0,1]2

และสมการก็คือใช้ทั่วไปเชิงเส้น 5 จุดลายฉลุเป็น Laplace-Operator Lเดาแรกคือ 0Lv=Δu=:bLv=0

การเปลี่ยนการตั้งค่าการทดสอบเช่นเป็นเกร็ดเล็กเกร็ดน้อยโดยใช้การคาดเดาเริ่มต้นของส่งผลให้ปัจจัยการลู่เข้าเกือบเหมือนกันu(x,y)=0v=1

เนื่องจากรหัสดาวน์ / อัพแตกต่างกันเท่านั้นผลลัพธ์ของ LDC ก็สอดคล้องกับหนังสือและ FAS อย่างน้อยก็ดูเหมือนว่าจะใช้ได้เช่นกันฉันจึงไม่คิดเลยว่าทำไมมันจึงช้ากว่ามากในการตั้งค่าแบบเชิงเส้นเดียวกัน

มีพฤติกรรมแปลก ๆ หนึ่งทั้งใน LDC และ FAS ที่ฉันไม่สามารถอธิบายได้เลยว่าจะเกิดขึ้นถ้าเดาเริ่มต้นที่ไม่ดี (เช่นแต่ยังอยู่ในการทดลอง multigrid ของฉันเต็มไปที่การแก้ไขไปยังตารางปรับใหม่เพิ่มที่เหลือจากถึง ): ถ้าฉันเพิ่มจำนวนการผ่อนคลายการแก้ไขภายหลังเป็นจำนวนที่สูงมากซึ่งวิธีแก้ปัญหาจะแก้ไขความแม่นยำของเครื่องจักรบนกริดหยาบมันจะสูญเสียตัวเลขเกือบทั้งหมดเมื่อขึ้นหนึ่งก้าว ไปที่กริดถัดไป=01015101

เนื่องจากรูปภาพพูดมากกว่าคำพูด:

// first cycle, levels 0-4
// DOWN
VCycle top 4, start               res_norm 3.676520e+02 // initial residual
VCycle top 4, cycle 0, current 4, res_norm 3.676520e+02
VCycle top 4, cycle 0, current 4, res_norm 1.520312e+02 // relaxed (2 iterations)
VCycle tau_norm 2.148001e+01 (DEBUG calculation)
VCycle top 4, cycle 0, current 3, res_norm 1.049619e+02 // restricted
VCycle top 4, cycle 0, current 3, res_norm 5.050392e+01 // relaxed (2 iterations)
VCycle top 4, cycle 0, current 2, res_norm 3.518764e+01 // restricted
VCycle top 4, cycle 0, current 2, res_norm 1.759372e+01 // relaxed (2 iterations)
VCycle top 4, cycle 0, current 1, res_norm 1.234398e+01 // restricted
VCycle top 4, cycle 0, current 1, res_norm 4.728777e+00 // relaxed (2 iterations)
VCycle top 4, cycle 0, current 0, res_norm 3.343750e+00 // restricted
// coarsest grid
VCycle top 4, cycle 0, current 0, res_norm 0.000000e+00 // solved
// UP
VCycle top 4, cycle 0, current 1, res_norm 3.738426e+00 // prolonged
VCycle top 4, cycle 0, current 1, res_norm 0.000000e+00 // relaxed (many iterations)
VCycle top 4, cycle 0, current 2, res_norm 1.509429e+01 // prolonged (loosing digits)
VCycle top 4, cycle 0, current 2, res_norm 2.512148e-15 // relaxed (many iterations)
VCycle top 4, cycle 0, current 3, res_norm 4.695979e+01 // prolonged (loosing digits)
VCycle top 4, cycle 0, current 3, res_norm 0.000000e+00 // relaxed (many iterations)
VCycle top 4, cycle 0, current 4, res_norm 1.469312e+02 // prolonged (loosing digits)
VCycle top 4, cycle 0, current 4, res_norm 9.172812e-24 // relaxed (many iterations)

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

คำตอบ:


7

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

  • คุณกำลังใช้รูปแบบการแก้ไขเชิงเส้นกับปัญหาเชิงเส้นดังนั้นจึงไม่น่าตกใจว่ามันทำได้ดีมาก

  • พิจารณาเงื่อนไขขอบเขตของคุณ: ตรวจสอบให้แน่ใจว่าคุณทำอย่างถูกต้องแล้วและโปรดทราบว่า BC ที่ซับซ้อนอาจดูแตกต่างอย่างสิ้นเชิงในตารางที่หยาบทำให้การแก้ไขไม่มีประโยชน์

  • ตรวจสอบการรักษาคำที่มาของคุณอีกครั้ง ฉันจำได้ว่ากำลังทำอะไรบางอย่างในระยะยืดออกที่เกี่ยวข้องกับคำนั้นเมื่อฉันเขียนมันเพื่อปัวซอง

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

  • นอกจากนี้ลองใช้ปัจจัยการผ่อนคลายสำหรับทั้งผู้ จำกัด และผู้ดำเนินการต่อกล่าวคือ 0.75

ถ้าช่วยได้นี่เป็นสิ่งที่ประวัติ FAS ที่เหลือของฉันดูเหมือนจะเป็นปัญหาปัวซองโดยใช้กริดเดี่ยวผ่านวงจร 7V เต็ม ฉันเชื่อว่าปัจจัยการผ่อนคลายคือ 0.75 และฉันใช้รูปแบบ RK แบบ 3 ขั้นตอนเรียบขึ้นด้วยการทำซ้ำเพียงครั้งเดียวในแต่ละระดับกริด

ประวัติความเป็นมา


ขอบคุณสำหรับการตอบกลับของคุณตัวเรือนแบบเส้นตรงและ BC แบบง่าย (เส้นขอบสี่เหลี่ยม = 0) เป็นเพียงขั้นตอนแรกเท่านั้นการทดสอบตัวจริงจะเสร็จสิ้นหลังจากการตั้งค่า "ง่าย" ฉันไม่แน่ใจว่าฉันเข้าใจสิ่งที่คุณหมายถึงด้วยปัจจัยการผ่อนคลายสำหรับการ จำกัด และการยืดออก ขณะนี้ฉันใช้การแก้ไขแบบสองทิศทางสำหรับการยืดและการแบ่งครึ่งน้ำหนักสำหรับข้อ จำกัด
Silpion

โดยการผ่อนคลายฉันหมายถึงการยืดเวลาของคุณเปลี่ยนเป็น: ยูชั่วโมง=ยูชั่วโมง+αผมHชั่วโมง(ยูH-ผมชั่วโมงHยูชั่วโมง) ที่ไหน 0<α<1เป็นปัจจัยการผ่อนคลาย โดยทั่วไปแล้ววิธีการแก้ปัญหาที่ซับซ้อนมากขึ้นปัจจัยที่ต่ำกว่านี้ต้องไป ในการแก้ปัญหาที่มีความไม่ต่อเนื่องหลายครั้งบางครั้งฉันต้องผลักมันลงไปประมาณ 0.6 แต่โดยทั่วไปแล้ว 0.75-0.85 งาน
Aurelius

ดีแล้วที่รู้. ในการตั้งค่าของฉันนี่จะทำให้อัตราส่วนคอนเวอร์เจนซ์ช้าลงเท่านั้น(1-α)แต่ฉันจะจำไว้เมื่อทดสอบข้อมูลที่ซับซ้อนมากขึ้น
Silpion

@Aurelius คุณพูดถึงว่าการบรรจบกันบนกริดหยาบไม่จำเป็น ฉันเห็นด้วยกับเหตุผลของคุณ แต่หลักฐานการลู่เข้าในวรรณคดี (สำหรับกรณีเชิงเส้น) ถือว่าสมมติว่าการแก้ปัญหากริดหยาบนั้นแน่นอน ฉันไม่ทราบถึงการอ้างอิงใด ๆ (สำหรับกรณีเชิงเส้นหรือไม่เชิงเส้น) ซึ่งมีการระบุว่าการแก้กริดแบบหยาบไม่ควรเป็นจริงและสงสัยว่าคุณสามารถอ้างอิงการอ้างอิงนี้ได้หรือไม่ ฉันสนใจที่จะเห็นสิ่งนี้ด้วยตัวเอง
Keeran Brabazon

@KeeranBrabazon ฉันไม่มีการอ้างอิงสำหรับสิ่งนี้เช่นกันและฉันก็ไม่คุ้นเคยกับรายละเอียดของบทพิสูจน์การลู่เข้าสำหรับ multigrid ฉันขอแนะนำให้มองหาวรรณคดีตอนต้นที่แนะนำปัจจัยการผ่อนคลายนั้น ปัจจัยดังกล่าวเป็นเรื่องปกติสำหรับการใช้งานแบบ multigrid ที่ทันสมัยทั้งหมดที่ฉันเคยเห็นและมันเป็นความจริงโดยสัญชาตญาณว่ามันจะไม่จำเป็นถ้าการแก้ปัญหาแน่นอนแน่นอนเป็นสิ่งจำเป็น / เป็นที่ต้องการ สำหรับการพิสูจน์ที่เข้าใจง่ายฉันแค่จินตนาการว่าเงื่อนไขขอบเขตมีลักษณะอย่างไรสำหรับตารางที่หยาบกว่าและดีที่สุด มันง่ายที่จะจินตนาการว่าพวกเขาสร้างโซลูชันที่แตกต่างกันมาก
Aurelius

6

หากคุณกำลังใช้การแยกส่วนที่เป็นกึ่งกลางจุดสุดยอดข้อ จำกัด ของรัฐควรเป็นการฉีดมากกว่าข้อ จำกัด ที่เหลือแบบเต็มน้ำหนักที่ปรากฏว่าคุณใช้ นั่นคือแทนที่ผมชั่วโมงH กับ ผม^ชั่วโมงHเมื่อ จำกัด สถานะ การใช้การ จำกัด น้ำหนักแบบเต็มสำหรับสถานะสร้างนามแฝงของส่วนประกอบความถี่สูงของรัฐซึ่งหลังจากนำไปใช้ยูชั่วโมงยูชั่วโมง(ยูH-ผมชั่วโมงHยูชั่วโมง)ส่งผลให้เกิดเสียงรบกวนใหม่ในระดับเดียวกับก่อนการแก้ไขแบบหยาบ (เงื่อนไขขอบเขตมักเป็นสาเหตุของผลกระทบนี้โดยเฉพาะ) ใช้การฉีดผม^ชั่วโมงHยูชั่วโมงและปัญหานี้ควรหายไป

การ จำกัด สถานะของรัฐต้องการเพียงลำดับรองระดับสูงเท่านั้น (การสงวนความถี่ที่ต่ำอย่างแม่นยำ) แต่ลำดับหลัก (นามแฝงของความถี่สูง) นั้นไม่สำคัญ การฉีดมีคำสั่งหลัก 0 และคำสั่งรองแบบไม่มีที่สิ้นสุด ในขณะเดียวกันข้อ จำกัด ที่เหลือต้องการทั้งคำสั่งหลักและรองให้เป็นค่าบวก (อย่างน้อย) ดูในส่วนของ 4.3 Achi แบรนด์ของ multigrid คู่มือ

เมื่อออกแบบวิธีการของ MG คุณควรมองหาข้อผิดพลาดแทนที่จะใช้วิธีตกค้างและเพื่อให้แน่ใจว่าคุณมีน้ำหนักมาตรฐานอย่างเหมาะสม


จุดที่ดีและฉันไม่ได้พูดถึงบางสิ่งตามสายเหล่านั้น สิ่งสำคัญอย่างหนึ่งของการใช้ Multigrid ในทางปฏิบัติคือทางเลือกที่ราบรื่นยิ่งขึ้น: คุณต้องการสิ่งที่ช่วยลดข้อผิดพลาดความถี่สูงให้เร็วที่สุดเท่าที่จะเป็นไปได้ซึ่งแก้ไขปัญหาที่คุณอธิบาย
Aurelius

@Aurelius จากบันทึกที่จัดไว้ให้คุณจะเห็นว่าเรียบเนียนไม่ใช่ปัญหา จำได้ว่า Silpion ใช้เรียบเนียนเหมือนกันกับ MG การแก้ไขข้อบกพร่องซึ่งเข้ากันอย่างเหมาะสม
Jed Brown

ขอบคุณสำหรับลิงค์ไปยังคู่มือ Multigrid ของ Brandt ฉันจะอ่านอย่างละเอียดหลังจากจบ Multigrid Tutorial ของ Brigg ฉันแก้ไขปัญหาได้แล้ว (ดูคำตอบอื่น ๆ ) แต่ขณะนี้ฉันกำลังใช้น้ำหนักแบบเต็มสำหรับข้อ จำกัด ทั้งรัฐและส่วนที่เหลือ การใช้การฉีดดูเหมือนจะไม่ทำงานในการตั้งค่าของฉันอัตราส่วนที่เหลือก็เปลี่ยนเป็น>0.8และทั้งที่เหลือและข้อผิดพลาด L2- บรรทัดฐานหยุดลดลงในไม่ช้า คุณมีความคิดใด ๆ ว่าทำไมการฉีดจึงล้มเหลว
Silpion

1

ฉันแก้ไขปัญหาได้แล้ว ฉันเก็บไว้ยูโอล.dH=ผมชั่วโมงHยูชั่วโมง เมื่อลงระหว่างรอบ V และนำกลับมาใช้ใหม่ในภายหลัง

ยูชั่วโมงยูชั่วโมง+ผมHชั่วโมง(ยูH-ผมชั่วโมงHยูชั่วโมง)=ยูชั่วโมง+ผมHชั่วโมง(ยูH-ยูโอล.dH).

ปัญหาคือก่อนที่จะลงอีกครั้งจาก H ถึง 2H, ยูโอล.dHได้รับการผ่อนคลายในสถานที่ จัดเก็บสำเนาก่อนที่ขั้นตอนการผ่อนคลายช่วย ตั้งแต่ยูโอล.dH จำเป็นต้องใช้ใน FAS เท่านั้นมันไม่ได้แสดงในการคำนวณเชิงเส้น

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