วิธีการของนิวตันอาจไม่มาบรรจบกันด้วยเหตุผลหลายประการนี่คือบางส่วนที่พบบ่อยที่สุด
- Jacobian ผิด (หรือถูกต้องตามลำดับ แต่ไม่ขนาน)
- ระบบเชิงเส้นไม่ได้รับการแก้ไขหรือแก้ไขไม่ถูกต้องเพียงพอ
- ระบบจาโคเบียนมีความแปลกประหลาดที่ตัวแก้เชิงเส้นไม่ได้จัดการ
- มีข้อบกพร่องในรูทีนการประเมินฟังก์ชัน
- ฟังก์ชันไม่ต่อเนื่องหรือไม่มีอนุพันธ์อันดับหนึ่งอย่างต่อเนื่อง (เช่นการเปลี่ยนเฟสหรือตัว จำกัด TVD)
- สมการนี้อาจไม่มีวิธีแก้ปัญหา (เช่นวงจร จำกัด แทนสถานะคงที่) หรืออาจมี "เนินเขา" ระหว่างการคาดเดาเริ่มต้นและสถานะคงที่ (เช่นสารตั้งต้นจะต้องจุดติดไฟและเผาไหม้ก่อนที่จะถึงสภาวะคงตัว ส่วนที่เหลือของรัฐจะใหญ่ขึ้นในระหว่างการเผาไหม้)
นี่คือวิธีที่จะช่วยในการแก้ปัญหาการขาดคอนเวอร์เจนซ์ของนิวตัน
-snes_monitor -ksp_monitor_true_residual -snes_converged_reason -ksp_converged_reason
ทำงานด้วยตัวเลือก หากการแก้ปัญหาเชิงเส้นไม่ได้มาบรรจบกันตรวจสอบว่ายาโคเบียนถูกต้องจากนั้นดูคำถามนี้ หากสิ่งที่เหลืออยู่ก่อนเงื่อนไขมาบรรจบกัน แต่สิ่งตกค้างที่แท้จริงไม่ได้เกิดขึ้น หากการแก้ปัญหาเชิงเส้นมาบรรจบกัน แต่การค้นหาสายล้มเหลว Jacobian อาจไม่ถูกต้อง
- เรียกใช้ด้วย
-pc_type lu or -pc_type svd
เพื่อดูว่าปัญหาเป็นตัวแก้ปัญหาเชิงเส้นที่ไม่ดีหรือไม่
- เรียกใช้ด้วย
-mat_view
หรือ-mat_view_draw
เพื่อดูว่ายาโคเบียนดูสมเหตุสมผลหรือไม่
- วิ่งด้วย
-snes_type test -snes_test_display
เพื่อดูว่าคนที่คุณกำลังใช้นั้นผิดหรือเปล่า เปรียบเทียบเอาต์พุตเมื่อคุณเพิ่ม-mat_fd_type ds
เพื่อดูว่าผลลัพธ์มีความอ่อนไหวต่อตัวเลือกของพารามิเตอร์ที่แตกต่างกันหรือไม่
- วิ่งด้วย
-snes_mf_operator -pc_type lu
เพื่อดูว่าคนที่คุณกำลังใช้นั้นผิดหรือเปล่า -snes_mf_operator -pc_type ksp -ksp_ksp_rtol 1e-12
หากปัญหาที่มีขนาดใหญ่เกินไปสำหรับโดยตรงแก้ลอง เปรียบเทียบเอาต์พุตเมื่อคุณเพิ่ม-mat_mffd_type ds
เพื่อดูว่าผลลัพธ์นั้นอ่อนไหวต่อการเลือกพารามิเตอร์ที่แตกต่างกันหรือไม่
- เรียกใช้ตัวประมวลผลเดียวเพื่อดูว่าปัญหานั้นเป็นแบบคู่ขนานเท่านั้นหรือไม่
- เรียกใช้ด้วย
-snes_ls_monitor
เพื่อดูว่าการค้นหาสายล้มเหลวหรือไม่ (โดยปกติจะเป็นสัญญาณของจาโคเบียนที่ไม่ดี)
- ทำงานด้วย
-info
เพื่อรับข้อมูลรายละเอียดเพิ่มเติมเกี่ยวกับกระบวนการแก้ปัญหา
นี่คือวิธีที่จะช่วยกระบวนการของ Newton หากทุกอย่างข้างต้นเช็คเอาท์
- ทำงานด้วยการจัดลำดับของกริด (
-snes_grid_sequence
คือทั้งหมดที่คุณต้องการหากทำงานกับกDM
) เพื่อสร้างการคาดเดาเริ่มต้นที่ดีขึ้นบนตาข่ายที่ละเอียด
- ทำงานด้วยความแม่นยำของรูปสี่เหลี่ยม (
./configure --with-precision=__float128 --download-f2cblaslapack
ด้วย PETSc 3.2 ขึ้นไปต้องการคอมไพเลอร์ GNU เวอร์ชัน 4.6 หรือใหม่กว่า)
- เปลี่ยนหน่วย (การไม่เป็นมิติ) การปรับสภาพขอบเขตหรือสูตรเพื่อให้จาโคเบียนมีสภาพดีขึ้น
- ระงับคุณสมบัติในฟังก์ชั่นที่ไม่มีอนุพันธ์แรกอย่างต่อเนื่อง (มักเกิดขึ้นเมื่อมี
if
คำสั่งในการประเมินผลที่เหลือเช่นเปลี่ยนเฟสหรือ จำกัด TVD) ใช้ตัวแก้ไขความไม่เท่าเทียมกันแบบผันแปร ( SNESVINEWTONRSLS ) หากความไม่ต่อเนื่องนั้นมีความสำคัญขั้นพื้นฐาน
- ลองใช้วิธีภูมิภาคที่เชื่อถือได้ (
-ts_type tr
อาจต้องปรับพารามิเตอร์)
- เรียกใช้ด้วยพารามิเตอร์การดำเนินการต่อจากจุดที่คุณทราบวิธีแก้ไขปัญหาดูTSPSEUDOสำหรับการแก้ปัญหาสถานะคงที่ มีแพ็คเกจตัวแก้ homotopy เช่น PHCpack ที่สามารถแก้ปัญหาที่เป็นไปได้ทั้งหมด (และบอกคุณว่าพบทั้งหมด) แต่สิ่งเหล่านี้ไม่สามารถปรับขนาดได้และไม่สามารถแก้ปัญหาใด ๆ ได้ยกเว้นปัญหาเล็กน้อย