มีชุดโอเพ่นซอร์สของตัวแก้ ODE สำหรับ C ที่ใช้ชนิด C99 ดั้งเดิมหรือไม่


12

ฉันใช้GSLเป็นพื้นฐานของการจำลองหลายอย่าง แต่มันค่อนข้างเกินความจริงสำหรับวัตถุประสงค์ของฉันและมันกำหนดประเภทที่ซับซ้อนของตัวเองด้วยเหตุผลดั้งเดิม แทนที่จะเขียนรหัสตัวแก้ Runge-Kutta ODE ของตัวเองซึ่งอาจจะไม่ได้ผลมากนักมีนักแก้ปัญหาโอเพนซอร์ซโอเพนซอร์สที่ใช้ C99 complex ประเภทดั้งเดิมหรือไม่?


ฉันไม่รู้ว่าคุณต้องการใช้ที่ใด แต่โดยทั่วไป RK นั้นค่อนข้างยากที่จะนำไปใช้ในวิธีที่ไม่มีประสิทธิภาพ ... คุณสร้างมาตรฐานที่แสดงว่าคุณมีปัญหานี้หรือไม่?
mbq

2
ไม่มี. ฉันไม่ได้เขียนของตัวเองเพราะฉันไม่ต้องการบูรณาการล้อ ถ้าฉันต้องทำฉันจะได้ แต่หาเวลาที่จะใช้จ่ายในสิ่งที่ไม่ขาดไม่ได้อยู่ในการ์ดสำหรับฉันตอนนี้ หากคำตอบเกิดขึ้นนั่นคือสิ่งที่ฉันกำลังมองหาฉันจะไม่สามารถใช้งานได้จริงถ้าสองสามเดือน นอกจากนี้ RK อาจไม่ใช่สิ่งที่ฉันต้องการเสมอไปสิ่งที่ฉันรู้ขั้นตอนวิธี
qubyte

อนึ่งฉันกำลังจำลองระบบควอนตัมขนาดเล็กเป็นส่วนใหญ่ ไม่เพียง แต่
qubyte

ฉันจะให้คำแนะนำกับการใช้ตัวแปรขนาด RK ด้วยตนเอง (ยกเว้นเพื่อการศึกษา) มีฮิวริสติกจำนวนมากที่เกี่ยวข้องในการค้นหาขนาดขั้นตอนที่เหมาะสมที่สุด
Jitse Niesen

ดังที่ฉันได้กล่าวไปแล้วสิ่งที่ฉันเขียนอย่างรวดเร็วจะผิดหรือช้า มันยากที่จะใช้ RK กับอินพุต / เอาต์พุตที่ซับซ้อนหรือไม่? ฉันรู้ว่าคุณสามารถแยกมันออกเป็นสองส่วนจริง ๆ แต่มันน่ารำคาญมาก!
qubyte

คำตอบ:


10

คุณอาจพิจารณาว่าเป็น "overkill" แต่แพ็คเกจการรวมเวลาของPETScสามารถใช้กับ C99 ที่ซับซ้อน (กำหนดค่า--with-scalar-type=complex) วิธีการที่รองรับ ได้แก่

การใช้งานเหล่านี้เหมาะสมที่สุดสำหรับปัญหาที่มีมิติสูงเช่นสมการเชิงอนุพันธ์ย่อยบางส่วนที่ไม่ได้ใช้งาน (วิธีการของเส้น)


มันใหญ่ไปหน่อย แต่ฉันก็ไม่รู้ +1 เลย นึกคิดสิ่งที่ฉันใช้จะไม่ใหญ่กว่า GSL ฉันจะดูคู่มือและดูว่าฉันคิดอย่างไร
qubyte

เพียงเพื่อให้ชัดเจนคุณเชื่อมโยงกับห้องสมุดเหล่านี้ในเวลารวบรวม นั่นถูกต้องใช่ไหม?
qubyte

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

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

ใช่คุณรวบรวม PETSc อย่างอิสระจากแอปพลิเคชันของคุณ มันไม่ได้เป็นแค่ส่วนหัวเท่านั้นเช่น Boost
Jed Brown

1

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


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