Documentación de la página de inicio
Métodos numéricos para resolver ecuaciones diferenciales ordinarias (ODES) en óxido.
Para comenzar a usar la caja en un proyecto, se debe agregar la siguiente dependencia en el archivo de carga del proyecto.
[ dependencies ]
ode_solvers = "0.5.0"
Luego, en el archivo principal, agregue
use ode_solvers :: * ;
Los métodos de integración numéricos implementados en la caja admiten sistemas multidimensionales. Para definir la dimensión del sistema, declare un tipo de alias para el vector de estado. Por ejemplo
type State = Vector3 < f64 > ;
La representación estatal del sistema se basa en la estructura Svector <t, d> definida en la caja nalgebra. Por conveniencia, los solucionadores de ODE vuelven a expulsar seis tipos para trabajar con sistemas de dimensión 1 a 6: vector1 <t>, ..., vector6 <t>. Para dimensiones más altas, el usuario debe importar la caja nalgebra y definir un svector <t, d> donde el segundo parámetro de tipo de svector es una dimensión. Por ejemplo, para un sistema de 9 dimensiones, uno tendría:
type State = SVector < f64 , 9 > ;
Alternativamente, también se puede usar la estructura Dvector <T> de la caja nalgebra como representación de estado. Cuando se usa un dvector <t>, el número de filas en el dvector <t> define la dimensión del sistema.
type State = DVector < f64 > ;
El sistema de ODES de primer orden debe definirse en el método del system
del rasgo del System<T, V>
. Típicamente, este rasgo se define para una estructura que contiene algunos parámetros del modelo. La firma del System<T, V>
rasgo es:
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
}
}
Donde system
debe contener las ODES: el segundo argumento es la variable independiente (generalmente tiempo), el tercero es un vector que contiene la (s) variable (s) dependiente (s), y la cuarta contiene la derivada (s) de y con respecto a x. Se llama al solout
del método después de cada paso de integración exitoso y detiene la integración cada vez que se evalúa como verdadero. La implementación de ese método es opcional. Consulte los ejemplos para obtener detalles de implementación.
Los siguientes métodos explícitos de runge-kutta se implementan en la versión actual de la caja:
Método | Nombre | Orden | Orden de estimación de error | Orden de salida denso |
---|---|---|---|---|
Runge-Kutta 4 | RK4 | 4 | N / A | N / A |
Dormitorio | Dopri5 | 5 | 4 | 4 |
Dormitorio | DOP853 | 8 | (5, 3) | 7 |
Estos métodos se definen en los módulos RK4, DOPRI5 y DOP853. El primer paso es llevar el módulo deseado al alcance:
use ode_solvers :: dopri5 :: * ;
Luego, se crea una estructura utilizando el método new
o from_param
de la estructura correspondiente. Consulte la documentación de la API para obtener una descripción de los argumentos de entrada.
let mut stepper = Dopri5 :: new ( system , x0 , x_end , dx , y0 , rtol , atol ) ;
El sistema está integrado utilizando
let res = stepper . integrate ( ) ;
y los resultados se recuperan con
let x_out = stepper . x_out ( ) ;
let y_out = stepper . y_out ( ) ;
Vea la página de inicio para obtener más detalles.