“ symplectic” หมายถึงอะไรในการอ้างอิงถึงผู้ประกอบการเชิงตัวเลขและคำสั่งของ SciPy ใช้พวกเขาอย่างไร


25

ในความคิดเห็นนี้ฉันเขียนว่า:

... ผู้รวมระบบ SciPy ที่เป็นค่าเริ่มต้นซึ่งฉันคิดว่าจะใช้วิธี symplectic เท่านั้น

ที่ฉันอ้างถึง SciPy odeintซึ่งใช้วิธีการ "ไม่ใช่แบบแข็ง (Adams)" หรือ "วิธีแข็ง (BDF)" ตามแหล่งที่มา :

def odeint(func, y0, t, args=(), Dfun=None, col_deriv=0, full_output=0,
           ml=None, mu=None, rtol=None, atol=None, tcrit=None, h0=0.0,
           hmax=0.0, hmin=0.0, ixpr=0, mxstep=0, mxhnil=0, mxordn=12,
           mxords=5, printmessg=0):
    """
    Integrate a system of ordinary differential equations.

    Solve a system of ordinary differential equations using lsoda from the
    FORTRAN library odepack.

    Solves the initial value problem for stiff or non-stiff systems
    of first order ode-s::
        dy/dt = func(y, t0, ...)
    where y can be a vector.
    """

นี่คือตัวอย่างที่ฉันเผยแพร่การโคจรของดาวเทียมรอบโลกเป็นเวลาสามเดือนเพื่อแสดงว่ามัน precesses ตามที่คาดไว้

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

เป็นไปได้หรือไม่ที่จะอธิบายว่าทรัพย์สินคืออะไร (นั่นทำให้ symplectic integrator symplectic) เป็นแบบตรงไปตรงมาและ (เป็นธรรม) เข้าใจง่าย แต่ไม่เข้าใจผิด? ฉันถามจากมุมมองว่าผู้รวมระบบทำงานอย่างไรภายในแทนที่จะทำอย่างไรในการทดสอบ

และความสงสัยของฉันนั้นถูกต้องหรือodeintไม่ที่ใช้ตัวรวม symplectic เท่านั้น?


4
ในฐานะที่เป็นกฎง่ายๆคุณควรหวังว่าผู้ประกอบกล่องดำจะเห็นใจถ้าคุณต้องการแยกสมการตำแหน่งและโมเมนตัม
origimbo

@origimbo ขอบคุณ สิ่งเหล่านี้ทำและดูเหมือนว่าodeintเป็นเครื่องห่อหุ้มงูเหลือมสำหรับซอร์สโค้ดที่ค่อนข้างเก่าสร้างและอ้างอิงได้ดี (คำถามที่มีการแก้ไขอ้างอิง ODEPACK และ LSODA) แม้ว่าฉันจะยอมรับการใช้มันในโหมดกล่องดำอย่างแน่นอน ตัวอย่างที่เชื่อมโยงของฉันแสดงเวกเตอร์สถานะ 6D ประกอบด้วยสามตำแหน่งและสามความเร็ว
uhoh

11
ผู้ประกอบการ ODE ใน ODEPACK และ LSODA ไม่ใช่ผู้รวบรวมที่เห็นอกเห็นใจ
Brian Borchers

2
นี่เป็นตัวอย่างที่ทำงานเปรียบเทียบสองแก้ง่ายมาก: ออยเลอร์และ Symplectic ออยเลอร์: idontgetoutmuch.wordpress.com/2013/08/06/...
idontgetoutmuch

2
หนังสือโดยHairer, Nørsettและ Wannerให้คำอธิบายที่ดีเกี่ยวกับวิธีการเห็นอกเห็นใจ ดูรูปที่ 16.1 โดยเฉพาะอย่างยิ่งและตัวเลขที่นี่
JM

คำตอบ:


47

ให้ฉันเริ่มต้นด้วยการแก้ไข ไม่ไม่มีผู้odeintรวบรวมที่เห็นอกเห็นใจ ไม่การรวม symplectic ไม่ได้หมายถึงการอนุรักษ์พลังงาน

symplectic หมายความว่าอย่างไรและเมื่อใดที่คุณควรใช้

ก่อนอื่นความเห็นใจหมายถึงอะไร Symplectic หมายถึงการแก้ปัญหานั้นมีอยู่ในหลากหลาย symplectic symplectic manifold เป็นชุดโซลูชันซึ่งกำหนดโดยแบบฟอร์ม 2 รายละเอียดของ symplectic manifold อาจฟังดูไร้สาระทางคณิตศาสตร์ดังนั้นส่วนสำคัญของมันคือมีความสัมพันธ์โดยตรงระหว่างตัวแปรสองชุดในนานา เหตุผลที่สิ่งนี้มีความสำคัญสำหรับฟิสิกส์ก็คือสมการของแฮมิลโตเนียนนั้นมีอยู่โดยธรรมชาติว่าการแก้ปัญหานั้นมีอยู่ใน symplectic manifold ในสเปซเฟส สำหรับทางออกของแฮมิลตันแท้ๆเส้นทางของเฟสเฟสนั้นคือพลังงานคงที่

ตัวรวม symplectic เป็นตัวรวมที่มีวิธีการแก้ปัญหาอยู่ในนานา symplectic เนื่องจากข้อผิดพลาด discretization เมื่อมีการแก้ไขระบบ Hamiltonian มันไม่ได้รับวิถีที่ถูกต้องในท่อร่วมไอดี แต่วิถีนั้นเองนั้นจะถูกรบกวนสำหรับคำสั่งจากวิถีที่แท้จริง จากนั้นมีการเลื่อนเชิงเส้นเนื่องจากข้อผิดพลาดเชิงตัวเลขของวิถีนี้เมื่อเวลาผ่านไป ผู้ประกอบระบบปกติมีแนวโน้มที่จะมีกำลังสอง (หรือมากกว่า) และไม่ได้มีการรับรองทั่วโลกที่ดีเกี่ยวกับเส้นทางอวกาศเฟสนี้nO(Δtn)n

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

ป้อนคำอธิบายรูปภาพที่นี่

นี้ได้รับการแก้ไขโดยใช้คำสั่งที่ 6 Integrator symplectic จาก Kahan และหลี่จาก DifferentialEquations.jl คุณจะเห็นได้ว่าพลังงานไม่ได้อนุรักษ์ไว้อย่างแน่นอน แต่ความหลากหลายนั้นขึ้นอยู่กับความหลากหลายของการรบกวนที่เกิดขึ้นจากท่อร่วมที่แท้จริง แต่เนื่องจากวิธีแก้ปัญหาเชิงตัวเลขนั้นอยู่บน symplectic manifold จึงมีแนวโน้มว่าจะเป็นระยะเกือบทุกครั้ง (ด้วยการเลื่อนเชิงเส้นที่คุณสามารถเห็นได้) ทำให้มันทำได้ดีมากสำหรับการรวมระยะยาว หากคุณทำเช่นเดียวกันกับ RK4 คุณจะได้รับความเสียหาย:

ป้อนคำอธิบายรูปภาพที่นี่

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

ไฮไลท์นี้เหตุผลที่แท้จริงที่จะเลือกติด symplectic: ติด symplectic เป็นสิ่งที่ดีในการผนวกรวมเป็นเวลานานในการแก้ไขปัญหาที่มีคุณสมบัติ symplectic (ระบบมิล) งั้นมาดูบางสิ่งกัน โปรดทราบว่าคุณไม่จำเป็นต้องมีผู้รวมระบบแบบ symplectic แม้ในปัญหา symplectic สำหรับกรณีนี้วิธี Runge-Kutta ที่ปรับเปลี่ยนได้ลำดับที่ 5 สามารถทำได้ดี ที่นี่Tsit5:

ป้อนคำอธิบายรูปภาพที่นี่

สังเกตเห็นสองสิ่ง หนึ่งมันได้รับความแม่นยำที่ดีพอที่คุณไม่สามารถเห็นการดริฟท์ที่แท้จริงในพล็อตเฟส อย่างไรก็ตามทางด้านขวาคุณจะเห็นได้ว่ามีการไหลของพลังงานนี้และหากคุณทำการรวมกันนานพอวิธีนี้จะไม่ทำเช่นเดียวกับวิธีการแก้ปัญหาที่มีคุณสมบัติเป็นระยะ แต่นั่นทำให้เกิดคำถามขึ้นว่ามันคุ้มค่าหรือไม่เมื่อเทียบกับการรวมอย่างถูกต้องแม่นยำ? นี่มันค่อนข้างแน่ใจน้อยลง ในDiffEqBenchmarks.jlคุณสามารถค้นหาการวัดประสิทธิภาพเพื่อตรวจสอบคำถามนี้ ตัวอย่างเช่นสมุดบันทึกนี้ดูข้อผิดพลาดด้านพลังงานเทียบกับรันไทม์บนระบบสมการแฮมิลโตเนียนจากโมเดล Boson แบบสี่เท่าและแสดงให้เห็นว่าถ้าคุณต้องการความแม่นยำสูงจริง ๆ แล้วถึงแม้จะใช้เวลานานในการบูรณาการนาน ๆ วิธี RKN) สิ่งนี้สมเหตุสมผลเนื่องจากการตอบสนองต่อคุณสมบัติสัมพัทธภาพผู้ติดตั้งจะให้ประสิทธิภาพและค่อนข้างคงที่ขั้นตอนเวลาที่กำหนด (มีงานวิจัยบางชิ้นที่ทำให้ความคืบหน้าในระยะหลัง

นอกจากนี้สังเกตจากทั้งสองโน๊ตบุ๊คที่คุณสามารถใช้วิธีการมาตรฐานและฉายมันกลับไปที่วิธีการแก้ปัญหาที่หลากหลายในแต่ละขั้นตอน (หรือทุก ๆ สองสามขั้นตอน) นี่คือสิ่งที่ตัวอย่างโดยใช้ DifferentialEquations.jl โทรกลับ ManifoldProjectionกำลังทำ คุณเห็นว่าการรับประกันกฎหมายการอนุรักษ์ได้รับการสนับสนุน แต่มีค่าใช้จ่ายเพิ่มเติมในการแก้ปัญหาระบบโดยปริยายในแต่ละขั้นตอน คุณยังสามารถใช้ตัวแก้ ODE โดยปริยายอย่างเต็มที่หรือเมทริกซ์มวลเอกพจน์เพื่อเพิ่มในสมการการอนุรักษ์ แต่ผลลัพธ์สุดท้ายก็คือวิธีการเหล่านี้มีค่าใช้จ่ายในการคำนวณสูงกว่า

ดังนั้นเพื่อสรุประดับของปัญหาที่คุณต้องการในการเข้าถึงสำหรับผู้ออกแบบและติด symplectic เป็นคนที่มีวิธีการแก้ไขปัญหานานา symplectic (ระบบมิล) ที่คุณไม่ต้องการที่จะลงทุนทรัพยากรคอมพิวเตอร์ที่จะมีความแน่นอนมาก (ความอดทน<1e-12) ทางออกและไม่ต้องการพลังงานที่แน่นอน / ฯลฯ การอนุรักษ์ สิ่งนี้ชี้ให้เห็นว่ามันเป็นเรื่องของคุณสมบัติการรวมในระยะยาวดังนั้นคุณไม่ควรแห่กันไปที่พวกเขาทั้งหมดโดยเจตนาเหมือนที่บางคนในวรรณกรรมแนะนำ แต่มันก็ยังเป็นเครื่องมือสำคัญในหลายสาขาเช่น Astrophysics ที่คุณมีการบูรณาการเป็นเวลานานซึ่งคุณต้องแก้ปัญหาให้เร็วพอโดยไม่ต้องมีความแม่นยำที่ไร้สาระ

ฉันจะหาผู้รวมระบบ symplectic ได้ที่ไหน มีผู้ติดตั้ง symplectic ประเภทใดบ้าง

โดยทั่วไปแล้วจะมีผู้รวมกลุ่ม symplectic สองคลาส มีการรวมกันของ Runge-Kutta symplectic (ซึ่งเป็นสิ่งที่แสดงในตัวอย่างข้างต้น) และมีวิธีการ Runge-Kutta โดยนัยซึ่งมีคุณสมบัติ symplectic ตามที่ @origimbo กล่าวไว้ผู้ประกอบการ Runge-Kutta ที่เป็น symplectic ต้องการให้คุณจัดเตรียมโครงสร้างพาร์ติชันเพื่อให้สามารถจัดการตำแหน่งและชิ้นส่วนโมเมนตัมแยกกันได้ อย่างไรก็ตามการตอบโต้ความคิดเห็นวิธีการ Runge-Kutta โดยปริยายนั้นเป็น symplectic โดยไม่จำเป็นต้องทำสิ่งนี้ แต่ต้องการการแก้ไขระบบที่ไม่ใช่เชิงเส้นแทน สิ่งนี้ไม่ได้เลวร้ายเกินไปเพราะหากระบบไม่แข็งระบบที่ไม่เชิงเส้นนี้สามารถแก้ไขได้ด้วยการทำซ้ำการทำงานหรือการเร่งความเร็วแบบแอนเดอร์สัน แต่วิธีการ RK แบบ symplectic ควรจะยังคงต้องการประสิทธิภาพอยู่ดี

ที่กล่าวว่าodeint ไม่มีวิธีการจากทั้งสองตระกูลเหล่านี้ดังนั้นจึงไม่ใช่ทางเลือกที่ดีถ้าคุณกำลังมองหาผู้รวมกลุ่ม symplectic ใน Fortran เว็บไซต์ของ Hairer มีชุดเล็ก ๆ ที่คุณสามารถใช้ได้ Mathematica มีสร้างขึ้นในไม่กี่ นักแก้ปัญหา GSL ODE มีปริพันธ์จุด R Ga Gaussianซึ่งโดยนัยคือ IIRC นั้นเป็น symplectic แต่นั่นเป็นเพียงเหตุผลเดียวที่ใช้วิธี GSL

แต่ชุดติดตั้ง symplectic ที่ครอบคลุมที่สุดสามารถพบได้ในDifferentialEquations.jl ใน Julia (จำได้ว่านี่ใช้สำหรับโน้ตบุ๊กด้านบน) รายการของวิธีการ symplectic Runge-Kutta ที่มีอยู่พบได้ในหน้านี้และคุณจะสังเกตเห็นว่าวิธีจุดกึ่งกลางโดยนัยนั้นก็เป็นแบบ symplectic ด้วย (วิธี Tragezoid แบบ Runge-Kutta โดยนัยนั้นถือเป็น "เกือบ symplectic" เพราะสามารถย้อนกลับได้) ไม่เพียง แต่จะมีชุดที่ใหญ่ที่สุดของวิธีการ แต่มันก็ยังเป็นโอเพนซอร์ส (คุณสามารถดูรหัสและการทดสอบในภาษาระดับสูง) และมีจำนวนมากของมาตรฐาน สมุดบันทึกเบื้องต้นที่ดีสำหรับใช้ในการแก้ปัญหาทางกายภาพคือสมุดบันทึกการสอนนี้. แต่แน่นอนก็ขอแนะนำให้คุณเริ่มต้นกับแพคเกจผ่านODE แรกกวดวิชา

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


10
ด้วยคำตอบนี้ฉันดูเหมือนจะตีแจ๊คพอตแลกเปลี่ยน! นี่คือคำตอบที่สมบูรณ์แบบสำหรับฉันเนื่องจากฉันเข้าใจบางส่วนในทันทีและส่วนที่ฉันไม่อยากให้ฉันอ่านเพิ่มเติม ฉันขอขอบคุณเวลาที่คุณได้ให้แหล่งข้อมูลคำตอบนี้โดยละเอียดรวมถึงลิงค์ที่เป็นประโยชน์และให้คำแนะนำอื่น ๆ
uhoh

ก่อนที่จะพูดถึงรายละเอียดทางคณิตศาสตร์เราอาจพูดได้ว่าsymplecticหมายถึงการอนุรักษ์ปริมาตรใช่มั้ย
Miguel

2
FTR เหตุผลที่ลำดับที่ 5 ที่ปรับได้ Runge-Kutta ทำงานได้ดีกว่า RK4 ที่นี่ไม่ใช่ว่ามันมีลำดับสูงกว่า แต่เลือกขนาดขั้นตอนที่เหมาะสมกว่า เหตุผลที่ RK4 ทำงานได้ไม่ดีนั้นส่วนใหญ่แล้วขนาดขั้นตอนจะสูงเกินไปที่ perigee; ตัวแก้ปัญหาเดียวกันที่มีขนาดครึ่งหนึ่งของขั้นตอนจะให้ทางออกที่ดีกว่ามาก (เพียงแค่มันจะเสียเวลามากในการแก้ไขวงโคจรรอบ ๆ จุดสุดยอดที่ซึ่งมันไม่จำเป็นเลย)
leftaroundabout

1
นิทรรศการที่ยอดเยี่ยม ตามคำถามด้าน: OP เริ่มต้นด้วยการอ้างอิงถึง Python - มีบทเรียน / แพ็คเกจ Python แนะนำตามบรรทัดของตัวอย่าง Julia ที่เชื่อมโยงหรือไม่
Quetzalcoatl

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

14

เพื่อเติมเต็มคำตอบของ Chris Rackauckas เพื่อบอกถึงเรื่องไร้สาระทางคณิตศาสตร์รวมถึงบางสิ่งที่คุณเกือบจะรู้แน่นอนระบบพลวัตคือHamiltonianถ้ามีคำอธิบายเกี่ยวกับพิกัดและและการทำงานนั้น และ การเคลื่อนไหวนี้รักษาคุณค่าของตามวิถี แต่มันก็มีคุณสมบัติเพิ่มเติมกล่าวคือถ้าเรากำหนดแผนที่ pqH(p,q)

dqdt=+Hp
dpdt=Hq.
H
p(t),q(t)=ϕt(p(t0),q(t0))
จากนั้นการทำแผนที่นี้จะอนุรักษ์ทั้งสองรูปแบบ{Q} สำหรับปัญหาที่และเป็นหนึ่งมิติคุณสามารถคิดได้ว่าเป็นการบอกว่าพื้นที่ภายในเส้นโค้งปิดในพื้นที่เฟสนั้นได้รับการอนุรักษ์ สิ่งนี้ทำให้มั่นใจได้ถึงคุณสมบัติความเสถียรที่ดีทุกประเภทเนื่องจาก "ลูกบอล" ของวิถีต้องอยู่ใกล้กับกันและกันdpdqpq

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


ขอบคุณสำหรับสิ่งนี้! ตอนนี้ฉันจะใช้คำข้างบนเกรดการจ่ายของฉัน n-ball ของวิถีมีความเสี่ยงมากขึ้นเมื่อพวกเขาอยู่ใกล้ bifurcations เช่นในการจำลองร่างกาย 3 cf เลย โดเดลและคณะ 2550, ภายใน J. Bifurcation และ Chaos, v 17, no. 8 (2007) 2625–2677 ฉันจะทำอย่างไร นอกจากนี้ยังieec.cat/hosted/web-libpoint/papers/...
uhoh

2
ถ้าผู้อ่านไม่ได้ตระหนักถึงรายละเอียดทางคณิตศาสตร์การกล่าวถึงความเสถียรนั้นทำให้เข้าใจผิดเนื่องจากการอนุรักษ์ปริมาตรไม่ได้หมายความว่าวิถีแต่ละเส้นจะยังคงอยู่ใกล้
Miguel

1
@Miguel ฉันคิดว่านี่เป็นหนึ่งในสถานการณ์ที่ผู้อ่านที่ไม่ทำตามรายละเอียดทางคณิตศาสตร์ถูกสาปด้วยวิธีใดวิธีหนึ่ง แต่ในแง่ของความแม่นยำความเสถียรและประสิทธิภาพการคำนวณเชิงตัวเลขของตัวเลขปกติ ประโยชน์มีประโยชน์ ฉันยินดีที่จะรับข้อเสนอแนะสำหรับการเขียนใหม่หากคุณสามารถนึกถึงสิ่งที่ดีกว่าซึ่งไม่ถูกต้องโดยเจตนา
origimbo

@origimbo เกี่ยวกับสิ่งนี้ ภาพจิตเป็น 1 ซมแผ่นวุ้นที่มีอนุภาคอาจมีการไหล: ลูกทีมแต่ละคนจะแตกต่างกันอย่างสมบูรณ์ แต่อนุภาคยังคง ocuppy 1cmเพื่อให้ความคิดของความมั่นคงในระยะยาว 222
Miguel

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