ホームページのドキュメント
錆の通常の微分方程式(ODE)を解くための数値的方法。
プロジェクトでクレートの使用を開始するには、プロジェクトの貨物ファイルに次の依存関係を追加する必要があります。
[ 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>を定義する必要があります。たとえば、9次元システムの場合、次のようになります。
type State = SVector < f64 , 9 > ;
代わりに、状態表現として、ナルゲブラクレートのdvector <t>構造を使用することもできます。 DVECTOR <T>を使用する場合、DVECTOR <T>の行数はシステムの寸法を定義します。
type State = DVector < f64 > ;
一次ODEのシステムはSystem<T, V>
特性の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を含める必要がある場合:2番目の引数は独立変数(通常は時間)、3番目の引数は従属変数を含むベクトル、4番目の引数はxに対してyの微分を含む。メソッド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 ( ) ;
詳細については、ホームページをご覧ください。