เอกสารหน้าแรก
วิธีการเชิงตัวเลขเพื่อแก้สมการเชิงอนุพันธ์สามัญ (ODEs) ในสนิม
ในการเริ่มต้นใช้ลังในโครงการจะต้องเพิ่มการพึ่งพาต่อไปนี้ในไฟล์ cargo.toml ของโครงการ:
[ dependencies ]
ode_solvers = "0.5.0"
จากนั้นในไฟล์หลักเพิ่ม
use ode_solvers :: * ;
วิธีการรวมเชิงตัวเลขที่ใช้ในการรองรับ Crate สนับสนุนระบบหลายมิติ เพื่อกำหนดมิติของระบบประกาศนามแฝงประเภทสำหรับเวกเตอร์สถานะ เช่น
type State = Vector3 < f64 > ;
การแสดงสถานะของระบบขึ้นอยู่กับโครงสร้าง SVECTOR <T, D> ที่กำหนดไว้ในลัง Nalgebra เพื่อความสะดวก Ode-Solvers ส่งออกหกประเภทเพื่อทำงานกับระบบมิติ 1 ถึง 6: Vector1 <T>, ... , Vector6 <T> สำหรับมิติที่สูงขึ้นผู้ใช้ควรนำเข้าลัง Nalgebra และกำหนด sVector <t, d> โดยที่พารามิเตอร์ประเภทที่สองของ SVector เป็นมิติ ตัวอย่างเช่นสำหรับระบบ 9 มิติหนึ่งจะมี:
type State = SVector < f64 , 9 > ;
ทางเลือกหนึ่งยังสามารถใช้โครงสร้าง dVector <t> จากลัง Nalgebra เป็นตัวแทนของรัฐ เมื่อใช้ dVector <t> จำนวนแถวใน dVector <t> กำหนดมิติของระบบ
type State = DVector < f64 > ;
ระบบของ ODE คำสั่งซื้อครั้งแรกจะต้องกำหนดในวิธี system
ของ System<T, V>
ลักษณะ โดยทั่วไปลักษณะนี้จะถูกกำหนดไว้สำหรับโครงสร้างที่มีพารามิเตอร์บางอย่างของโมเดล ลายเซ็นของ System<T, V>
ลักษณะคือ:
pub trait System < T , V > {
fn system ( & self , x : T , y : & V , dy : & mut V ) ;
fn solout ( & self , _x : T , _y : & V , _dy : & V ) -> bool {
false
}
}
ในกรณีที่ system
จะต้องมี ODEs: อาร์กิวเมนต์ที่สองคือตัวแปรอิสระ (โดยปกติเวลา) อันที่สามคือเวกเตอร์ที่มีตัวแปรตาม (S) และอันที่สี่มีอนุพันธ์ของ y ที่เกี่ยวข้องกับ x วิธี solout
ของวิธีการถูกเรียกหลังจากแต่ละขั้นตอนการรวมที่ประสบความสำเร็จและหยุดการรวมเมื่อใดก็ตามที่ได้รับการประเมินว่าเป็นจริง การใช้วิธีนั้นเป็นทางเลือก ดูตัวอย่างสำหรับรายละเอียดการใช้งาน
วิธีการ Runge-Kutta ที่ชัดเจนต่อไปนี้ถูกนำไปใช้ในเวอร์ชันปัจจุบันของลัง:
วิธี | ชื่อ | คำสั่ง | คำสั่งประเมินข้อผิดพลาด | คำสั่งส่งออกหนาแน่น |
---|---|---|---|---|
Runge-Kutta 4 | RK4 | 4 | N/A | N/A |
เจ้าชาย | DOPRI5 | 5 | 4 | 4 |
เจ้าชาย | DOP853 | 8 | (5, 3) | 7 |
วิธีการเหล่านี้ถูกกำหนดไว้ในโมดูล RK4, DOPRI5 และ DOP853 ขั้นตอนแรกคือการนำโมดูลที่ต้องการเข้าสู่ขอบเขต:
use ode_solvers :: dopri5 :: * ;
จากนั้นโครงสร้างจะถูกสร้างขึ้นโดยใช้วิธี new
หรือวิธี from_param
ของโครงสร้างที่สอดคล้องกัน อ้างถึงเอกสาร API สำหรับคำอธิบายของอาร์กิวเมนต์อินพุต
let mut stepper = Dopri5 :: new ( system , x0 , x_end , dx , y0 , rtol , atol ) ;
ระบบถูกรวมเข้าด้วยกันโดยใช้
let res = stepper . integrate ( ) ;
และผลลัพธ์จะถูกค้นพบด้วย
let x_out = stepper . x_out ( ) ;
let y_out = stepper . y_out ( ) ;
ดูหน้าแรกสำหรับรายละเอียดเพิ่มเติม