ฉันควรทำตามแนวทางใดเมื่อเลือกตัวแก้ระบบเชิงเส้นหร็อมแหร็ม?


49

ระบบเชิงเส้นแบบกระจัดกระจายมีความถี่เพิ่มขึ้นในแอปพลิเคชัน หนึ่งมีงานประจำมากมายให้เลือกสำหรับการแก้ปัญหาระบบเหล่านี้ ในระดับสูงสุดมีสันปันน้ำระหว่างทางโดยตรง (เช่นการกำจัดแบบเกาส์แบบเบาบางหรือการสลายตัวแบบโคลสลอสด้วยอัลกอริธึมการสั่งแบบพิเศษและวิธีการแบบหลายหน้า) และการวนซ้ำ (เช่น GMRES, (bi-)

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

คำตอบ:


33

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


2
"โยนทุกอย่างที่ทำได้" เป็นคำแนะนำที่ฉันคุ้นเคย :) กระดาษแผ่นที่สามที่คุณลิงค์ไปนั้นเป็นสิ่งที่ฉันไม่เคยเห็นมาก่อน ขอบคุณสำหรับสิ่งนั้น!
JM

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

5
การประเมินของ Aron นั้นดี แต่ขึ้นอยู่กับการเติมอย่างมากเนื่องจากวิธีการกระจัดกระจายโดยตรงมักจะทำให้หน่วยความจำหมดก่อนที่จะหมดความอดทน
Matt Knepley

18

ตัวเลือกระหว่างวิธีโดยตรงและวนซ้ำขึ้นอยู่กับเป้าหมายและปัญหาที่เกิดขึ้น

สำหรับวิธีการโดยตรงเราสามารถทราบ:

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

สำหรับวิธีการวนซ้ำเราสามารถทราบ:

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

แนวทางสำหรับเมื่อใช้วิธีการโดยตรงหรือทำซ้ำ?

  • วิธีการวนซ้ำเมื่อเมทริกซ์สัมประสิทธิ์เบาบางและวิธีการโดยตรงไม่สามารถใช้ประโยชน์จาก sparsity ได้อย่างมีประสิทธิภาพ (หลีกเลี่ยงการสร้างการเติม)
  • วิธีการโดยตรงสำหรับหลาย ๆ ด้านขวา
  • วิธีการวนซ้ำสามารถมีประสิทธิภาพมากขึ้นถ้าความแม่นยำนั้นไม่ต้องกังวล
  • วิธีการวนซ้ำสำหรับระบบสมการไม่เชิงเส้น

8
ฉันคิดว่ามันเป็นสิ่งสำคัญที่จะต้องทราบว่าวิธีการโดยตรงนั้นไม่ได้ดีกว่าสำหรับหลาย ๆ มือขวาเสมอไป บางทีพวกเขาอาจจะดีกว่าสำหรับทางด้านขวา แต่ถ้าวิธีวนซ้ำเป็นในขณะที่วิธีโดยตรงคือก็ยังคงมีประโยชน์ที่จะใช้ตัวแก้ซ้ำสำหรับด้านขวามือ O ( n ) O ( n 2 ) O ( 1 )O(n)O(n)O(n2)O(1)
Jack Poulson

8

ฉันเห็นด้วยอย่างสมบูรณ์กับคำตอบที่ได้รับไปแล้ว ฉันต้องการเพิ่มว่าวิธีการวนซ้ำทั้งหมดต้องใช้การเดาเริ่มต้นบางอย่าง คุณภาพของการเดาเริ่มต้นมักจะส่งผลต่ออัตราการรวมกันของวิธีการที่คุณเลือก วิธีการเช่น Jacobi, Gauss Seidel และต่อเนื่องมากกว่าการผ่อนคลายทั้งหมดทำงานเพื่อ "ลดความผิดพลาด" ให้มากที่สุดเท่าที่จะเป็นไปได้ในแต่ละขั้นตอนข้อผิดพลาด ( ดูรายละเอียดในเอกสารนี้). สองสามขั้นตอนแรกจะลดข้อผิดพลาดความถี่สูงได้อย่างรวดเร็ว แต่ข้อผิดพลาดความถี่ต่ำนั้นต้องใช้การวนซ้ำอีกหลายครั้งเพื่อทำให้เรียบขึ้น นี่คือสิ่งที่ทำให้การบรรจบกันช้าสำหรับวิธีการเหล่านี้ ในกรณีเช่นนี้เราสามารถเร่งความเร็วการบรรจบกันโดยการแก้ไขข้อผิดพลาดความถี่ต่ำ (เช่นการแก้ปัญหาเดียวกันบน coarser mesh) ก่อนจากนั้นจึงแก้ไขข้อผิดพลาดความถี่ที่สูงขึ้น (เช่นบนตาข่ายปลีกย่อย) หากเราใช้แนวคิดนี้ซ้ำโดยการหารและพิชิตเราจะได้สิ่งที่เรียกว่าวิธีการหลายกริด แม้ว่าระบบเชิงเส้นจะไม่สมมาตรมีการใช้งานทางเลือกของวิธีการหลายตารางสำหรับระบบเมทริกซ์กระจัดกระจาย nonsingular ใด ๆ (เช่นวิธีการหลายพีชคณิตพีชคณิตตาราง) ซึ่งสามารถเร่งการบรรจบกันของตัวแก้ปัญหา อย่างไรก็ตามความสามารถในการปรับขนาดของพวกเขาในระบบคู่ขนานเป็นเรื่องของการวิจัยจำนวนมาก.


5
คำตอบนี้ดูเหมือนจะให้ความรู้สึกว่าประสิทธิภาพของ multigrid นั้นมาจากการคาดเดาเริ่มต้นที่ดี ในความเป็นจริงการคาดเดาเริ่มต้นเป็นข้อกังวลเล็กน้อยสำหรับปัญหาเชิงเส้นและเป็นเพียงข้อกังวลสำหรับ Multigrid แบบเต็มเท่านั้น Multigrid ทำงานได้เนื่องจากการแยกสเปกตรัม โปรดทราบว่าการทำให้ multigrid ทำงานได้ดีสำหรับปัญหาที่หนักหน่วงเป็นความท้าทายที่สำคัญ Multigrid ใช้งานได้ดีในแบบคู่ขนานมันเป็นส่วนประกอบสำคัญในรางวัลของ Gordon Bell และแพ็คเกจโอเพ่นซอร์สสองสามตัวที่ทำงานด้วยประสิทธิภาพสูงบนเครื่องจักรที่ใหญ่ที่สุดในปัจจุบัน สำหรับการใช้งาน GPU ดูที่ CUSP library
Jed Brown

เวลาส่วนใหญ่การคาดเดาเริ่มต้นแบบสุ่มนั้นดีพอ ในการแยกค่าลักษณะเฉพาะโดยใช้อัลกอริทึม Lanczos เวกเตอร์เริ่มต้น / รีสตาร์ทแบบสุ่มจะช่วยได้ การเริ่มใหม่จะเกิดขึ้นตลอดเวลาในอัลกอริธึม Lanczos
AnilJ

3

มีคำถามสำคัญที่ขาดหายไปในคำถามของคุณ: เมทริกซ์มาจากไหน โครงสร้างของปัญหาที่คุณพยายามแก้ไขมีศักยภาพที่ดีในการแนะนำวิธีการแก้ปัญหา

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

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