홈페이지 문서
녹에서 일반적인 미분 방정식 (ODE)을 해결하는 수치 적 방법.
프로젝트에서 상자 사용을 시작하려면 프로젝트의 Cargo.toml 파일에 다음의 종속성을 추가해야합니다.
[ dependencies ]
ode_solvers = "0.5.0"
그런 다음 기본 파일에서 추가하십시오
use ode_solvers :: * ;
상자에서 구현 된 수치 적 통합 방법은 다차원 시스템을 지원합니다. 시스템의 치수를 정의하기 위해 상태 벡터에 대한 유형 별칭을 선언하십시오. 예를 들어
type State = Vector3 < f64 > ;
시스템의 상태 표현은 Nalgebra 상자에 정의 된 svector <t, d> 구조를 기반으로합니다. 편의를 위해 Ode-Solvers는 6 가지 유형을 다시 수출하여 차원 1 ~ 6 시스템과 함께 작동합니다 : vector1 <t>, ..., vector6 <t>. 더 높은 차원의 경우, 사용자는 nalgebra 상자를 가져 와서 svector <t, d>를 정의해야합니다. 여기서 svector의 두 번째 유형 매개 변수는 차원입니다. 예를 들어, 9 차원 시스템의 경우 다음과 같습니다.
type State = SVector < f64 , 9 > ;
대안으로, Nalgebra 상자의 DVector <T> 구조를 국가 표현으로 사용할 수도 있습니다. DVECTOR <T>를 사용할 때 DVECTOR <T>의 행 수는 시스템의 차원을 정의합니다.
type State = DVector < f64 > ;
1 차 ODE 시스템은 System<T, V>
trait의 system
방법에서 정의되어야합니다. 일반적 으로이 특성은 모델의 일부 매개 변수를 포함하는 구조에 대해 정의됩니다. 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를 포함 해야하는 경우 : 두 번째 인수는 독립 변수 (일반적으로 시간)이고, 세 번째 인수는 종속 변수를 포함하는 벡터이고, 네 번째는 x와 관련하여 Y의 유도체 (S)를 포함합니다. solout
방법은 각각의 성공적인 통합 단계 후에 호출되며 True로 평가 될 때마다 통합을 중지합니다. 해당 방법의 구현은 선택 사항입니다. 구현 세부 정보는 예제를 참조하십시오.
다음과 같은 명백한 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 ( ) ;
자세한 내용은 홈페이지를 참조하십시오.