Документация домашней страницы
Численные методы для решения обычных дифференциальных уравнений (ODE) в ржавчине.
Чтобы начать использование ящика в проекте, в файле Project's Cargo.toml должна быть добавлена следующая зависимость:
[ dependencies ]
ode_solvers = "0.5.0"
Затем в основном файле добавьте
use ode_solvers :: * ;
Методы численной интеграции, реализованные в многомерных системах. Чтобы определить измерение системы, объявьте псевдоним типа для вектора состояния. Например
type State = Vector3 < f64 > ;
Представление состояния системы основано на структуре Swector <T, D>, определенной в ящике Nalgebra. Для удобства, Ode-Solvers реэкспортирует шесть типов для работы с системами измерения с 1 по 6: vector1 <t>, ..., Vector6 <t>. Для более высоких измерений пользователь должен импортировать ящик Nalgebra и определить Swector <T, d>, где параметр второго типа Swector является измерением. Например, для 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
должна содержать ODE: второй аргумент - это независимая переменная (обычно время), третьим является вектор, содержащий зависимую переменную (ы), а четвертая содержит производную (ы) y по отношению к x. solout
метода вызывается после каждого успешного этапа интеграции и останавливает интеграцию всякий раз, когда он оценивается как истинная. Реализация этого метода является необязательной. Смотрите примеры для деталей реализации.
Следующие явные методы 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 ( ) ;
Смотрите домашнюю страницу для более подробной информации.