وثائق الصفحة الرئيسية
الطرق العددية لحل المعادلات التفاضلية العادية (ODES) في الصدأ.
للبدء في استخدام الصندوق في المشروع ، يجب إضافة التبعية التالية في ملف Cargo.toml للمشروع:
[ dependencies ]
ode_solvers = "0.5.0"
ثم ، في الملف الرئيسي ، أضف
use ode_solvers :: * ;
أساليب التكامل العددية التي تم تنفيذها في قفص أنظمة متعددة الأبعاد. من أجل تحديد بعد النظام ، أعلن عن نوع الاسم المستعار لمتجه الحالة. على سبيل المثال
type State = Vector3 < f64 > ;
يعتمد تمثيل الحالة للنظام على بنية SVECTOR <T ، D> المحددة في قفص Nalgebra. للراحة ، تعيد Solvers Ode تصدير ستة أنواع للعمل مع أنظمة البعد من 1 إلى 6: Vector1 <T> ، ... ، Vector6 <T>. بالنسبة للأبعاد الأعلى ، يجب على المستخدم استيراد قفص Nalgebra وتحديد SVECTOR <T ، D> حيث تكون المعلمة النوع الثاني لـ SVECTOR هي بُعد. على سبيل المثال ، بالنسبة لنظام 9 أبعاد ، يمكن للمرء أن يلي:
type State = SVector < f64 , 9 > ;
بديل ، يمكن للمرء أيضًا استخدام هيكل <T> من قفص Nalgebra كتمثيل الحالة. عند استخدام DVECTOR <T> ، يحدد عدد الصفوف الموجودة في DVECTOR <T> بُعد النظام.
type State = DVector < f64 > ;
يجب تحديد نظام ODEs من الدرجة الأولى في طريقة 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 | ن/أ | ن/أ |
دوماند-برنس | 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 ( ) ;
انظر الصفحة الرئيسية لمزيد من التفاصيل.