BDF vs เวลา Runge Kutta โดยนัย


16

มีเหตุผลใดบ้างที่เหตุใดจึงควรเลือกลำดับสูง Runge Kutta (IMRK) ในช่วงเวลา BDF? BDF ดูเหมือนง่ายกว่าสำหรับฉันเนื่องจาก stage IMRK ต้องการเชิงเส้นเชิงเส้นต่อเวลา ความมั่นคงสำหรับ BDF และ IMRK ดูเหมือนจะเป็นจุดที่สงสัย ฉันไม่พบทรัพยากรใด ๆ ในการเปรียบเทียบ / การเปรียบเทียบเวลาโดยนัยQQ

ถ้าช่วยได้เป้าหมายสุดท้ายคือให้ฉันเลือก stepper เวลาโดยปริยายที่สูงสำหรับ PDE การแพร่กระจายแบบการพาความร้อน

คำตอบ:


34

ใช่มีทรัพยากรไม่มากนักด้วยเหตุผลบางประการ เป็นเวลานานมาก goto มาตรฐานคือ "ใช้วิธี BDF" มนต์นี้ตั้งอยู่ในหินด้วยเหตุผลทางประวัติศาสตร์ไม่กี่: สำหรับรหัสของ Gear หนึ่งเป็นตัวแก้ปัญหาที่มีอยู่อย่างกว้างขวางครั้งแรกและอีกชุด MATLAB ไม่ได้ / ไม่รวมวิธี RK โดยปริยาย อย่างไรก็ตามฮิวริสติกนี้ไม่ถูกต้องเสมอไปและฉันอยากบอกว่าจากการทดสอบมันผิดปกติ ให้ฉันอธิบายอย่างละเอียด

วิธีการ BDF มีค่าใช้จ่ายคงที่สูง

การปรับเวลาและคำสั่งการปรับตัวในวิธีการ BDF แบบปรับได้นั้นมีค่าใช้จ่ายสูงมาก ต้องคำนวณค่าสัมประสิทธิ์ใหม่หรือค่าต่างๆต้องถูกนำมาสอดแทรกในเวลาที่ต่างกัน มีงานจำนวนมากที่ทำให้รหัส BDF ปัจจุบันทำได้ดีขึ้นที่นี่ (มี "แบบฟอร์ม" ที่รู้จักกันดีสองรูปแบบสำหรับการติดตั้งที่พยายามจัดการกับปัญหานี้แตกต่างกัน) แต่จริงๆแล้วมันเป็นปัญหาวิศวกรรมซอฟต์แวร์ที่ยากมาก ด้วยเหตุนี้จริง ๆ แล้วรหัส BDF ส่วนใหญ่ล้วนสืบเชื้อสายมาจากรหัสดั้งเดิมของ Gear: Gear, vode, lsoda, CVODE ของ Sundial หรือแม้แต่นักแก้ปัญหา DAE DASKR และ DASSL ก็เป็นผู้สืบทอดจากรหัสเดียวกัน

สิ่งนี้หมายความว่าถ้าคุณมีปัญหา "เล็กเกินไป" ค่าใช้จ่ายคงที่ที่สูงนั้นสำคัญมากและวิธีการ RK โดยนัยจะทำได้ดีกว่า

ระเบียบวิธี BDF ระดับสูงนั้นไม่เสถียรสำหรับค่าลักษณะเฉพาะที่ซับซ้อน

วิธีการ BDF ช่วยให้คุณสามารถควบคุมการสั่งซื้อสูงสุดและทำให้มันอนุรักษ์มากขึ้นด้วยเหตุผล: วิธีการ BDF ลำดับที่สูงขึ้นไม่สามารถจัดการค่าลักษณะที่ซับซ้อน "ขนาดกลาง" ได้เป็นอย่างดี ดังนั้นในกรณีเหล่านี้เพื่อให้มีเสถียรภาพพวกเขาจะต้องวางคำสั่งของพวกเขา นี่คือเหตุผลที่วิธีการลำดับที่ 6 ของ BDF ในขณะที่ความเสถียรทางเทคนิคมักจะถูกละเว้นเพราะแม้แต่ลำดับที่ 5 ก็มีปัญหาอยู่ที่นี่ (และลำดับที่ 6 นั้นมีความเสถียรน้อยกว่า) เฉพาะลำดับที่ 2 สูงสุดเท่านั้นคือ A-เสถียรดังนั้นจึงสามารถย้อนกลับไปที่นั่นได้เสมอ แต่จากนั้นการก้าวจะเกิดข้อผิดพลาด

ดังนั้นเมื่อใช้รหัส BDF ในปัญหาที่ไม่สำคัญคุณจะไม่ได้รับคำสั่งซื้อครั้งที่ 5 ตลอดเวลา ความผันผวนทำให้คำสั่งที่จะลดลง

วิธีการ BDF มีค่าใช้จ่ายเริ่มต้นสูง

ผมττ

วิธีการ BDF ซึ่งเป็นวิธีการแบบหลายขั้นตอน

radau

มีเกณฑ์มาตรฐานใดบ้าง

หนังสือของ Hairer และ DiffEqBenchmarks (อธิบายด้านล่าง) น่าจะดีที่สุดในแง่ของไดอะแกรมความแม่นยำในการใช้งานที่ใช้งานได้ง่าย Hairer's Solving สามัญดิฟเฟอเรนเชียลสมการ IIมีไดอะแกรมความแม่นยำในการทำงานจำนวนมากในหน้า 154 และ 155 ผลลัพธ์ของปัญหาที่เขาเลือกตรงกับสิ่งที่ฉันระบุไว้ข้างต้นด้วยเหตุผลที่ฉันระบุไว้ข้างต้น: RK โดยนัยจะมีประสิทธิภาพมากขึ้น "ใหญ่พอ" อีกสิ่งที่น่าสนใจที่จะทราบก็คือการสั่งซื้อสูงวิธี Rosenbrock ออกมาเป็นที่มีประสิทธิภาพที่สุดในหลายของการทดสอบของเขา (ชอบRodas) ในระบอบการปกครองที่เป็นข้อผิดพลาดที่สูงขึ้นและ RK นัยradau5มีประสิทธิภาพมากที่สุดในข้อผิดพลาดที่ต่ำกว่า แต่ปัญหาการทดสอบของเขาส่วนใหญ่ไม่ได้แยกจาก PDE ขนาดใหญ่ดังนั้นให้พิจารณาประเด็นข้างต้น

คุณทดสอบ / เกณฑ์มาตรฐานอย่างไร

ฉันต้องการทดสอบสิ่งนี้กับDifferentialEquations.jlใน Julia (ข้อจำกัดความรับผิดชอบ: ฉันเป็นหนึ่งในนักพัฒนาซอฟต์แวร์) นี่คือจูเลีย ภาษาการเขียนโปรแกรมควรได้รับการบันทึกที่นี่จริงๆ โปรดจำไว้ว่าในขณะที่ค่าใช้จ่ายของการเรียกใช้ฟังก์ชันเพิ่มขึ้นวิธีการ BDF จะดีขึ้น ใน R / MATLAB / Python ฟังก์ชั่นของผู้ใช้เป็นรหัส R / MATLAB / Python เพียงตัวเดียวที่นักแก้ปัญหาที่ดีที่สุดต้องใช้จริง: ถ้าคุณใช้ SciPy หรือ Sundials wrappers มันเป็นรหัส C / Fortran ทั้งหมดยกเว้นฟังก์ชันที่คุณผ่าน . ซึ่งหมายความว่าในภาษาแบบไดนามิก (ซึ่งไม่ใช่ Julia) วิธี BDF ทำได้ดีกว่าปกติเนื่องจากการเรียกฟังก์ชันนั้นไม่ได้เพิ่มประสิทธิภาพมาก (นี่อาจเป็นเหตุผลว่าทำไม Shampine รวมอยู่ode15sในชุด MATLAB แต่ไม่มีวิธี RK โดยปริยาย) .

ODEProblem

@time sol = solve(prob,CVODE_BDF())
@time sol = solve(prob,radau())

ที่แรกใช้ Sundials ' CVODE(วิธี BDF) และครั้งที่สองใช้ Hairer's radau(implicit RK)

สำหรับการใด ๆODEProblemคุณสามารถใช้เครื่องมือการเปรียบเทียบเพื่อดูว่าขั้นตอนวิธีการที่แตกต่างกันขนาดความคลาดเคลื่อนการปรับตัวที่แตกต่างกัน ผลบางอย่างที่โพสต์ที่ DiffEqBenchmarks.jl ตัวอย่างเช่นในปัญหา ROBER (ระบบ 3 ODE แข็ง) คุณจะเห็นว่า Sundials จริงไม่เสถียรและ diverges ด้วยความอดทนสูงพอ (ในขณะที่วิธีอื่นมาบรรจบกันดี) แสดงหมายเหตุข้างต้นเกี่ยวกับปัญหาความมั่นคง สำหรับปัญหาของ Van Der Polคุณสามารถเห็นได้ว่ามันเป็นการล้างมากกว่า ฉันมีมากกว่าที่ฉันไม่ได้โพสต์ไว้ แต่อาจจะไม่ได้จนกว่าจะเสร็จสิ้นขั้นตอนการสั่งซื้อ Rosenbrock ที่สูงขึ้น (Rodas เป็นรุ่น Fortran ของเหล่านั้น)

(หมายเหตุ: มาตรฐานแข็งเหล่านั้นจำเป็นต้องอัปเดตสำหรับหนึ่งข้อความต้องมีการปรับปรุงเนื่องจากด้วยเหตุผลบางอย่างของวิธีการ ODE.jl แตกต่าง ...

วิธีการแก้ไขและ RKC

นอกจากนี้ยังมีวิธีการอนุมานเช่นseulexที่ทำสำหรับปัญหาแข็ง สิ่งเหล่านี้คือ "ลำดับการปรับที่ไม่มีที่สิ้นสุด" แต่นั่นหมายความว่าพวกมันจะไม่ดีเมื่อคุณกำลังมองหาข้อผิดพลาดที่ต่ำมาก (เช่นการหาวิธีการแก้ปัญหาแข็งที่ต่ำกว่า1e-10หรือมากกว่านั้นในกรณีนี้คุณอาจใช้วิธีการที่ชัดเจน) . อย่างไรก็ตามในกรณีส่วนใหญ่พวกเขาไม่ได้มีประสิทธิภาพและควรหลีกเลี่ยง

Runge-Kutta Chebyschev เป็นวิธีการที่ชัดเจนซึ่งยังทำงานกับปัญหาแข็งทื่อที่คุณควรพิจารณา ฉันยังไม่ได้ห่อมันไว้ใน DifferentialEquations.jl ดังนั้นฉันจึงไม่มีหลักฐานที่ชัดเจนว่ามันเป็นอย่างไร

วิธีอื่นที่ควรพิจารณา: วิธีพิเศษสำหรับ PDE แบบแข็ง

ควรสังเกตว่าวิธีการสั่งซื้อ Rosenbrock ที่มีคุณภาพสูงนั้นทำได้ดีกว่ามาก ๆ หลายครั้งสำหรับปัญหาที่เกิดขึ้นเมื่อคุณสามารถคำนวณยาโคเบียนได้ง่าย อย่างไรก็ตามสำหรับ PDE บางตัวฉันเชื่อว่าปัญหาการแพร่กระจายของการแพร่กระจายอยู่ในหมวดหมู่นี้ Rosenbrock อาจสูญเสียคำสั่งที่แม่นยำ นอกจากนี้พวกเขาต้องการยาโคบที่แม่นยำเพื่อรักษาความถูกต้อง ในจูเลียสิ่งนี้เป็นเรื่องง่ายเพราะนักแก้ปัญหามาพร้อมกับสัญลักษณ์และระบบตอบโต้อัตโนมัติซึ่งสามารถแก้ไขได้กับ epsilon ของเครื่อง อย่างไรก็ตามสิ่งต่าง ๆ เช่น MATLABode23sสามารถมีปัญหาได้เนื่องจากการใช้งานเหล่านี้ใช้ความแตกต่างแน่นอน สำหรับ BDF และวิธี RK โดยปริยายข้อผิดพลาดใน Jacobian นำไปสู่การบรรจบกันช้าลงในขณะที่ Rosenbrock เนื่องจากสิ่งเหล่านี้ไม่ใช่สมการโดยปริยาย

วิธีอื่นในการดูคือวิธี RK แบบเอ็กซ์โปเนนเชียล, ความแตกต่างของเวลาแบบเอ็กซ์โพเนนเชียล (ETD), ปัจจัยการรวมโดยนัย (IIF) และวิธีการแบบ Rosenbrock แบบเอ็กซ์โปเนนเชียล สามข้อแรกใช้ประโยชน์จากความจริงที่ว่าในการแยกส่วน PDE จำนวนมาก

ยูเสื้อ=Aยู+(ยู)

AAยูอีAA

AJยู+ก.(ยู)J=Jยู+ก.

วิธีการอื่น ๆ : การสร้างสรรค์ล่าสุด

วิธีการที่มีนัยโดยนัยอย่างชัดเจนจะทำได้ดีสำหรับสมการที่แข็ง หาก PDE ไม่ใหญ่พอคุณจะไม่สามารถ "ขนานในอวกาศ" ได้อย่างมีประสิทธิภาพเพียงพอที่จะใช้ประโยชน์จาก HPC แต่คุณสามารถสร้าง discretizations แบบขนานในเวลาซึ่งมีนัยโดยสมบูรณ์และดีสำหรับสมการที่แข็งทื่อ แต่ขนานไปกับการใช้ฮาร์ดแวร์อย่างเต็มรูปแบบ XBraidเป็นนักแก้ปัญหาที่ใช้เทคนิคเช่นนี้และวิธีการหลักคือ PFFAST และวิธีการเปรียบเทียบ DifferentialEquations.jl กำลังพัฒนาวิธีโครงข่ายประสาทเทียมซึ่งทำงานคล้ายกัน

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

บทสรุป: ใช้การพิจารณาแบบไม่ระบุชื่อด้วยเม็ดเกลือ

เป็นเวลานานมากในประวัติศาสตร์ diffeq ตัวเลขมีความคิดว่าวิธีการอนุมานเป็นวิธีที่ดีที่สุดเพราะพวกเขาสามารถทำได้ตามลำดับทางเทคนิค ซึ่งหมายความว่าสำหรับตัวเล็กพอสมควรΔเสื้อ

วิธีการ BDF นั้นเป็นวิธีที่ดีที่สุด แต่ส่วนใหญ่คุณอาจไม่ได้ทำงานในระบอบการปกครองนั้น แต่ถ้าการแยกเชิงพื้นที่มีคะแนนมากพอวิธี BDF สามารถทำให้ขนานในอวกาศได้อย่างมีประสิทธิภาพ (โดยการแก้ปัญหาแบบเส้นตรงขนาน) และจะมีการเรียกใช้ฟังก์ชันน้อยที่สุดและจะทำให้ดีที่สุด แต่ถ้า discretization PDE ของคุณไม่ใหญ่พอลองดูวิธี RK, Rosenbrock, exponential RK โดยปริยายเป็นต้น การใช้ชุดซอฟต์แวร์เช่น DifferentialEquations.jl ซึ่งทำให้ง่ายต่อการสลับระหว่างวิธีการต่าง ๆ จะมีประโยชน์มากสำหรับคุณที่จะเข้าใจว่าวิธีใดดีที่สุดสำหรับโดเมนปัญหาของคุณเนื่องจากในหลายกรณีไม่สามารถทราบล่วงหน้าได้

[หากคุณมีปัญหาตัวอย่างใด ๆ ที่คุณต้องการเพิ่มไปยังชุดทดสอบโปรดอย่าลังเลที่จะรับบางสิ่งในนั้น ฉันต้องการเก็บทรัพยากรที่ครอบคลุมมากในเรื่องนี้ ฉันหวังว่าจะมีมาตรฐานทั้งหมดของ Hairer ในรูปแบบสมุดบันทึกที่รันได้ "เร็ว ๆ นี้" และต้องการปัญหาอื่น ๆ ซึ่งเป็นตัวแทนของสาขาวิทยาศาสตร์ ความช่วยเหลือใด ๆ ที่ชื่นชม!]


3
นี่เป็นคำตอบที่ละเอียดมากฉันมีคำแนะนำใหม่ ๆ ฉันขอขอบคุณเวลาของคุณ
user107904

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