การตั้งค่าเกณฑ์มาตรฐาน
ในซอฟต์แวร์ Julia DifferentialEquations.jlเราใช้วิธีการสั่งซื้อที่สูงขึ้นมากมายรวมถึงวิธีการ Feagin คุณสามารถดูได้ในรายการวิธีการของเราแล้วมีคนอื่น ๆ อีกมากมายที่คุณสามารถใช้เป็นอาหารเสริมได้ เนื่องจากวิธีการเหล่านี้ทั้งหมดถูกรวบรวมเข้าด้วยกันคุณจึงสามารถสร้างมาตรฐานระหว่างกันได้อย่างง่ายดาย คุณสามารถดูการวัดประสิทธิภาพที่ฉันออนไลน์ได้ที่นี่และดูว่าเป็นเรื่องง่ายมากในการเปรียบเทียบอัลกอริทึมที่แตกต่างกัน ดังนั้นหากคุณต้องการใช้เวลาสองสามนาทีในการรันการวัดประสิทธิภาพ นี่คือบทสรุปของสิ่งที่เกิดขึ้น
ก่อนอื่นสิ่งสำคัญคือให้สังเกตว่าถ้าคุณดูแต่ละมาตรฐานคุณจะเห็นว่าDP5
(Dormand-Prince Order 5) และDP8
วิธีการของเราเร็วกว่ารหัส Hairer Fortran ( dopri5
และdop853
) ดังนั้นการปรับใช้เหล่านี้จึงได้รับการปรับให้เหมาะสมที่สุด . เหล่านี้แสดงให้เห็นว่าตามที่ระบุไว้ในหัวข้ออื่นการใช้งานมากเกินไปของวิธีการ Dormand-Prince เป็นเพราะวิธีการเขียนแล้วไม่ได้เพราะพวกเขายังคงดีที่สุด ดังนั้นการเปรียบเทียบจริงระหว่างการปรับใช้ที่เหมาะสมที่สุดคือระหว่างวิธี Tsitorous, วิธี Verner และวิธี Feagin จาก DifferentialEquations.jl
ผลลัพธ์
โดยทั่วไปวิธีการสั่งซื้อที่สูงกว่า 7 มีค่าใช้จ่ายในการคำนวณเพิ่มเติมซึ่งมักจะไม่เกินดุลตามคำสั่งได้รับความอดทนเลือก เหตุผลข้อหนึ่งก็คือตัวเลือกสัมประสิทธิ์สำหรับวิธีการเรียงลำดับที่ต่ำกว่านั้นได้รับการปรับให้เหมาะสมมากขึ้น (พวกเขามี "สัมประสิทธิ์ข้อผิดพลาดการตัดทอนหลักเล็ก ๆ " ซึ่งมีความสำคัญมากกว่าเมื่อคุณไม่เล็ก คุณจะเห็นว่าในหลาย ๆ ปัญหาเช่นที่นี่วิธีการ Verner Efficient 6 และ 7 ทำได้ดีมาก แต่วิธีเช่น Verner Efficient 8 นั้นมีความชันต่ำกว่า นี่เป็นเพราะ "การได้รับ" ของคำสั่งที่สูงกว่ากำลังทบต้นที่ความคลาดเคลื่อนต่ำดังนั้นจึงมีความอดทนเสมอซึ่งวิธีการสั่งซื้อที่สูงกว่าจะมีประสิทธิภาพมากขึ้น
อย่างไรก็ตามคำถามคือว่าต่ำแค่ไหน? ในการใช้งานที่ได้รับการปรับปรุงให้ดีที่สุดนั้นมีข้อดีสองประการ เหตุผลแรกเป็นเพราะวิธีการสั่งซื้อลดลงใช้สิ่งที่เรียกว่า FSAL (ครั้งแรกเหมือนครั้งสุดท้าย) คุณสมบัตินี้หมายความว่าวิธีการสั่งซื้อที่ต่ำกว่าจะนำการประเมินฟังก์ชั่นกลับมาใช้ใหม่จากขั้นตอนก่อนหน้าในขั้นตอนถัดไป หากสิ่งนี้ถูกใช้อย่างถูกต้องแล้วสิ่งที่ต้องการวิธีการลำดับที่ 5 (Tsitorous หรือ Dormand-Prince) กำลังทำการประเมินผลการทำงาน 5 ครั้งแทนที่จะเป็น 6 อย่างที่ tableaus แนะนำ นี่เป็นความจริงสำหรับวิธีการของเวอร์เนอร์ 6
เหตุผลอื่นเกิดจากการแก้ไข เหตุผลหนึ่งที่ใช้วิธีการสั่งซื้อที่สูงมากคือการทำตามขั้นตอนน้อยลงและเพียงแค่แทรกค่ากลาง อย่างไรก็ตามเพื่อให้ได้ค่ากลางฟังก์ชั่นการแก้ไขอาจต้องการการประเมินฟังก์ชั่นมากกว่าที่ใช้สำหรับการทำตามขั้นตอน ถ้าคุณดูวิธีการของเวอร์เนอร์ต้องใช้การประเมินฟังก์ชั่นพิเศษ 8 รายการสำหรับวิธีการสั่งซื้อ 8 เพื่อรับหน่วยคำสั่งซื้อ interpolant 8 หลายครั้งที่วิธีการเรียงลำดับต่ำมีการใส่ "ฟรี" เช่นวิธีการเรียงลำดับที่ 5 ส่วนใหญ่มีการแก้ไขลำดับที่ 4 ฟรี (ไม่มีการประเมินฟังก์ชั่นพิเศษ) ดังนั้นนี่หมายความว่าหากคุณต้องการค่ากลาง (ซึ่งคุณจะต้องมีพล็อตที่ดีถ้าคุณใช้วิธีการสั่งซื้อสูง) มีค่าใช้จ่ายแอบแฝงเพิ่มเติม ปัจจัยในความจริงที่ว่าค่าการประมาณค่าเหล่านี้มีความสำคัญต่อการจัดการเหตุการณ์และการแก้สมการส่วนต่างล่าช้าและคุณเห็นว่าทำไมค่าใช้จ่ายการแก้ไขพิเศษมา
ดังนั้นวิธีการของ Feagin ล่ะ?
ดังนั้นคุณจะเห็นว่าวิธีการ Feagin หายไปอย่างน่าสงสัยจากมาตรฐาน การทดสอบคอนเวอร์เจนซ์นั้นใช้งานได้กับจำนวนความแม่นยำตามอำเภอใจ ฯลฯ แต่เพื่อให้พวกเขาทำได้ดีคุณต้องขอความอดทนที่ต่ำอย่างน่าหัวเราะ ยกตัวอย่างเช่นผมพบว่าในมาตรฐานที่ไม่ได้เผยแพร่ที่Feagin14
มีประสิทธิภาพเหนือกว่าVern9
(ลำดับที่ 9 Verner ที่มีประสิทธิภาพวิธี) 1e-30
ที่คลาดเคลื่อนชอบ สำหรับแอปพลิเคชันที่มีการเปลี่ยนแปลงแบบอลหม่าน (เช่นใน Pleides หรือปัญหาทางฟิสิกส์ดาราศาสตร์ 3 ตัว) คุณอาจต้องการความแม่นยำในระดับนี้เนื่องจากการพึ่งพาอาศัยแบบละเอียดอ่อน (ข้อผิดพลาดในระบบวุ่นวายเกิดขึ้นอย่างรวดเร็ว) อย่างไรก็ตามคนส่วนใหญ่อาจคำนวณด้วยตัวเลขทศนิยมที่มีความแม่นยำสองเท่าและฉันไม่พบเกณฑ์มาตรฐานที่พวกเขามีประสิทธิภาพสูงกว่าในขอบเขตความอดทนนี้
นอกจากนี้ยังไม่มีหน่วยสอดประสานที่จะไปพร้อมกับวิธีการ Feagin ดังนั้นสิ่งที่ฉันทำก็แค่ใส่การแก้ไขลำดับที่สามของ Hermite ลงไปเพื่อให้มีวิธีหนึ่งที่มีอยู่ (และมันก็ทำงานได้ดีอย่างน่าประหลาดใจ) อย่างไรก็ตามหากไม่มีฟังก์ชั่นการแก้ไขแบบมาตรฐานคุณสามารถใช้วิธีการแบบเวียนแบบซ้ำ (ใช้การแก้ไขแบบนี้เพื่อรับจุดกึ่งกลางจากนั้นทำการแก้ไขแบบลำดับที่ 5 ฯลฯ ) เพื่อรับการแก้ไขแบบลำดับขั้นสูง แต่ค่าใช้จ่ายสูงมาก การแก้ไขไม่จำเป็นต้องมีข้อผิดพลาดการตัดทอนหลักการต่ำ (ดังนั้นจึงเป็นเรื่องที่ดีเมื่อdt
มีขนาดเล็กมากซึ่งตรงข้ามกับกรณีที่เราต้องการ!) Vern9
ดังนั้นถ้าคุณเคยต้องมีการแก้ไขที่ดีจริงๆเพื่อให้ตรงกับความถูกต้องของคุณคุณจะต้องไม่น้อยกว่ากลับไปยังสิ่งที่ต้องการ
หมายเหตุเกี่ยวกับการคาดการณ์
โปรดทราบว่าวิธีการประมาณค่าเป็นเพียงอัลกอริธึมสำหรับการสร้างระเบียบวิธี Runge-Kutta โดยพลการ อย่างไรก็ตามสำหรับการสั่งซื้อของพวกเขาพวกเขาทำตามขั้นตอนมากกว่าที่จำเป็นและมีค่าสัมประสิทธิ์ข้อผิดพลาดในการตัดทอนสูงดังนั้นพวกเขาจึงไม่ได้มีประสิทธิภาพเท่ากับวิธี RK ที่ได้รับการปรับปรุงให้ดีที่สุดตามลำดับที่กำหนด แต่จากการวิเคราะห์ก่อนหน้านี้ซึ่งหมายความว่ามีโดเมนของความอดทนต่ำมากซึ่งวิธีการเหล่านี้จะทำได้ดีกว่าวิธี RK "รู้" แต่ในทุกมาตรฐานที่ฉันวิ่งดูเหมือนว่าฉันจะไม่ได้รับที่ต่ำ
หมายเหตุเกี่ยวกับความเสถียร
ตัวเลือกไม่มีส่วนเกี่ยวข้องกับปัญหาความมั่นคง ในความเป็นจริงถ้าคุณผ่านไปยัง DifferentialEquations.jl tableaus (คุณสามารถทำได้เฉพาะplot(tab)
กับส่วนเสถียรภาพ) คุณจะเห็นว่าวิธีการส่วนใหญ่มีขอบเขตความมั่นคงที่คล้ายกันอย่างน่าสงสัย นี่คือทางเลือกจริง ๆ โดยปกติเมื่อได้รับวิธีการผู้เขียนมักจะทำต่อไปนี้:
- ค้นหาสัมประสิทธิ์ข้อผิดพลาดการตัดทอนต่ำสุด (นั่นคือสัมประสิทธิ์สำหรับเงื่อนไขการสั่งซื้อต่อไป)
- ขึ้นอยู่กับข้อ จำกัด ในการสั่งซื้อ
- และทำให้พื้นที่ความเสถียรใกล้เคียงกับวิธีการสั่งซื้อดอร์มัน - ปรินซ์ 5
ทำไมสภาพสุดท้าย? ก็เพราะวิธีการนั้นมีแนวโน้มที่จะมีความเสถียรเสมอเมื่อวิธีการเลือกตัวเลือกขั้นตอนแบบปรับได้ถูกควบคุมโดย PI ดังนั้นจึงเป็นบาร์ที่ดีสำหรับภูมิภาคที่มีเสถียรภาพ "ดีพอ" ดังนั้นจึงไม่มีเหตุบังเอิญที่บริเวณเสถียรภาพทั้งหมดมีแนวโน้มที่จะคล้ายกัน
ข้อสรุป
มีการแลกเปลี่ยนในทุก ๆ ทางเลือกของวิธีการ ลำดับ RK ที่สูงที่สุดนั้นไม่ได้มีประสิทธิภาพที่ความคลาดเคลื่อนที่ต่ำกว่าทั้งคู่เพราะมันยากที่จะปรับค่าสัมประสิทธิ์ให้เหมาะสมที่สุดและเนื่องจากจำนวนของการประเมินฟังก์ชั่นสารประกอบ (และเติบโตเร็วยิ่งขึ้นเมื่อมีการแก้ไข) อย่างไรก็ตามหากค่าความคลาดเคลื่อนต่ำพอที่พวกเขาจะชนะ แต่ความคลาดเคลื่อนที่จำเป็นอาจต่ำกว่าแอปพลิเคชัน "มาตรฐาน" (เช่นสามารถใช้ได้กับระบบที่สับสนเท่านั้น)