国内の数学プログラムSMath Studioに追加を作成すると、ネットワーク上で、自分のプログラムで使用できるライブラリがいくつか見つかりました。 それらの簡単な概要を提供します。
固定ピッチの標準RK45はほとんどの場合に役立ちますが、これでは不十分なタスクがあります。 リジッドシステムを解決するために、特別なソルバーが考案されました。これを実用的な観点から検討します。
以下の関数のほとんどは、特に明記しない限り、単一の呼び出し形式に縮小できます(Mathcadと同様)。
ode_solver( init, x1, x2, intvls, D(t, x) )
ここで:
- initは初期条件のベクトルであり、
- (x1、x2)は統合セグメントです。
- intvls-セグメント内の間隔の数、
- D(t、x)はODEシステムです。
1. Intel ODE Solversライブラリ
次の関数が含まれています:rkm9st()、mk52lfn()、mk52lfa()、rkm9mkn()、rkm9mka()。
- rkm9st()-明示的方法を使用して非剛性および中剛性ODEシステムを解決するための特殊なルーチン。4次のMersonの方法と、安定性制御を含む最大9段階の1次の多段階方法に基づいています。
- mk52lfn()-L-stable(5,2)に基づく暗黙的な方法を使用してスティッフなODEシステムを解くための特別なルーチン(5,2)-数値のヤコビ行列を使用する方法。
- mk52lfa()-L-安定(5,2)-ヤコビ行列の数値計算または分析計算に基づく暗黙的な方法を使用してスティッフODEシステムを解決するための特別なルーチン。 ユーザーは、この計算のためのルーチンを提供する必要があります。
- rkm9mkn()-変数または事前に未知の剛性を持つODEシステムを解くための特別なルーチン。 すべてのステップで明示的または暗黙的なスキームを自動的に選択し、必要に応じて数値ヤコビ行列を計算します。
- rkm9mka()-変数または先験的に未知の剛性を持つODEシステムを解くための特別なルーチン。 すべてのステップで明示的または暗黙的なスキームを自動的に選択します。 ユーザーは、ヤコビ行列の数値計算または分析計算のルーチンを提供する必要があります。
ライブラリは、すべての依存関係とともにCで記述されています。 32ビットおよび64ビットバージョンのライブラリが利用可能です(libiode_ia32.libおよびlibiode_intel64.lib)。
intel_ode.h
/******************************************************************************* ! INTEL CONFIDENTIAL ! Copyright(C) 2007-2008 Intel Corporation. All Rights Reserved. ! The source code contained or described herein and all documents related to ! the source code ("Material") are owned by Intel Corporation or its suppliers ! or licensors. Title to the Material remains with Intel Corporation or its ! suppliers and licensors. The Material contains trade secrets and proprietary ! and confidential information of Intel or its suppliers and licensors. The ! Material is protected by worldwide copyright and trade secret laws and ! treaty provisions. No part of the Material may be used, copied, reproduced, ! modified, published, uploaded, posted, transmitted, distributed or disclosed ! in any way without Intel's prior express written permission. ! No license under any patent, copyright, trade secret or other intellectual ! property right is granted to or conferred upon you by disclosure or delivery ! of the Materials, either expressly, by implication, inducement, estoppel or ! otherwise. Any license under such intellectual property rights must be ! express and approved by Intel in writing. ! !****************************************************************************** ! ! Header file for Intel(R) ODE Solvers ! !*******************************************************************************/ #ifndef _INTEL_ODE_H_ #define _INTEL_ODE_H_ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ void dodesol(int*,int*,double*,double*,double*,void*,void*,\ double*,double*,double*,double*,double*,int*,int*); void dodesol_rkm9st(int*,int*,double*,double*,double*,void*,\ double*,double*,double*,double*,double*,int*); void dodesol_mk52lfn(int*,int*,double*,double*,double*,void*,\ double*,double*,double*,double*,double*,int*,int*); void dodesol_mk52lfa(int*,int*,double*,double*,double*,void*,void*,\ double*,double*,double*,double*,double*,int*,int*); void dodesol_rkm9mkn(int*,int*,double*,double*,double*,void*,\ double*,double*,double*,double*,double*,int*,int*); void dodesol_rkm9mka(int*,int*,double*,double*,double*,void*,void*,\ double*,double*,double*,double*,double*,int*,int*); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* _INTEL_ODE_H_ */
ODE Solversアドオンは、c#コードからこのライブラリを操作する方法を示しています。
参照:
1. インテル®常微分方程式ソルバーライブラリ 。
2. ODESolversアドオンのソース。
2. GNU科学ライブラリ(GSL)
次の関数が含まれています:rk2()、rk4()、rkf45()、rkck()、rk8pd()、rk1imp()、rk2imp()、rk4imp()、bsimp()、msadams()、msbdf()
それらのいくつかは、仕事のために追加のパラメーターを必要とします(ヤコビアン)。 私が何とか一般的な見方をすることができたもの:
非剛性システムのソルバー:
- rk2()-明示的な埋め込みRunge-Kutta(2、3)メソッド。
- rk4()-明示的な4次(古典的)ルンゲクッタ。 エラー推定は、ステップダブリング法によって実行されます。
- rkf45()-明示的な埋め込みRunge-Kutta-Fehlberg(4、5)メソッド。
- rkck()-明示的な埋め込みRunge-Kutta Cash-Karp(4、5)メソッド。
- rk8pd()-明示的な埋め込みRunge-Kutta Prince-Dormand(8、9)メソッド。
残り:
- rk1imp()-暗黙的なガウス1次ルンゲクッタ。 暗黙オイラー法または逆オイラー法とも呼ばれます。 エラー推定は、ステップダブリング法によって実行されます。 このアルゴリズムにはヤコビアンが必要です。
- rk2imp()-暗黙のガウス2次Runge-Kutta。 暗黙の中間点ルールとも呼ばれます。 エラー推定は、ステップダブリング法によって実行されます。 このステッパーにはヤコビアンが必要です。
- rk4imp()-暗黙的なガウス4次Runge-Kutta。 エラー推定は、ステップダブリング法によって実行されます。 このアルゴリズムにはヤコビアンが必要です。
- bsimp()-BaderおよびDeuflhardの暗黙のBulirsch-Stoerメソッド。 この方法は、一般にスティッフな問題に適しています。 このステッパーにはヤコビアンが必要です。
- msadams()-Nordsieck形式の可変係数線形マルチステップアダムス法。 このステッパーは、P(EC)^ m関数反復モードで明示的なAdams-Bashforth(予測)および暗黙的なAdams-Moulton(修正)メソッドを使用します。 メソッドの順序は1〜12の間で動的に変化します。
- msbdf()-Nordsieck形式の可変係数線形多段階逆微分公式(BDF)メソッド。 このステッパーは、明示的なBDF式を予測子として使用し、暗黙的なBDF式を修正子として使用します。 修正ニュートン反復法を使用して、非線形方程式系を解きます。 メソッドの順序は1〜5の間で動的に変化します。このメソッドは一般にスティッフな問題に適しています。 このステッパーにはヤコビアンが必要です。
ユニバーサルインターフェイスは 、特定のタイプのソルバーがステップ関数を定義する関数を操作するために使用されます。 GNUScientificLibraryアドオンは 、c#コードからこのライブラリを操作する方法を示しています。
Windowsでライブラリを構築するのはそれほど簡単ではありません。 現在利用できないサイトからの指示を使用しました。 ただし、アドオンリポジトリには、GSL 1.16の32ビットバージョンと64ビットバージョンの
参照:
1. GSL。 常微分方程式 。
2. GNUScientificLibraryアドオンのソース。
3. Matlab C ++ Math Library 2.1(Win32)
はい、この古いバージョンのランタイムライブラリを計算に使用できます。 さらに、相対パスによって確立できます。 元の配布キットの内容(拡張形式で最大28 MB)をプログラムの隣に置くだけです。 確かに、関数を呼び出すときは、「bin \ win32」の場所を直接示すSetCurrentDirectory()を使用する必要があります。 私は私のサプリメントでこれを行います。
次の関数が含まれます:ode23()、ode45()、ode113()、ode15s()、ode23s()。
- ode23()-硬くない微分方程式を解きます。 低次メソッド、
- ode45()-硬直でない微分方程式を解きます。 中次法、
- ode113()-硬直でない微分方程式を解きます。 可変順序法、
- ode15s()-硬い微分方程式とDAEを解きます。 可変順序法、
- ode23s()-硬い微分方程式を解きます。 低次メソッド。
MatlabCppMathLibraryアドオンは 、c#コードからこのライブラリを操作する方法を示しています。
参照:
1. 常微分方程式 。
2. MATLAB C ++数学ライブラリ。 ユーザーガイド。 バージョン2.1 (pdf)。
3. MATLAB C ++数学ライブラリ。 参照。 バージョン2 (pdf)。
4. MatlabCppMathLibraryアドオンのソース。
4. Octave C ++数学ライブラリ(Win32)
Matlab C ++ Math Libraryとほぼ同じですが、独自のゴキブリがあります。 残念ながら、私はこのライブラリでの作業を部分的にしか克服していません。 OctaveCppMathLibraryアドオンは 、c#コードからこのライブラリを操作する方法を示しています。
参照:
1. 常微分方程式 。
2. OctaveCppMathLibraryアドオンのソース。
5. DotNumerics
次の関数が含まれます:AdamsMoulton()、ExplicitRK45()、ImplicitRK5()、GearsBDF()。 このライブラリは、Fortranから.Netに移植されています。 私は彼女が一番好きだった。 それは十分に速く動作します。
非剛性システムのソルバー:
- AdamsMoulton()-Adams-Moulton法を使用して、非剛性常微分方程式の初期値問題を解きます。
- ExplicitRK45()-次数(4)の明示的なルンゲクッタ法を使用して、非剛性常微分方程式の初期値問題を解きます5。
スティッフシステムのソルバー:
- ImplicitRK5()-5次の陰的ルンゲクッタ法を使用して、硬い常微分方程式の初期値問題を解きます。
- GearsBDF()-GearのBDFメソッドを使用して、硬い常微分方程式の初期値問題を解きます。
さまざまな関数呼び出し形式には多くのオーバーロードがあります。 DotNumericsアドオンは 、このライブラリを操作する方法を示します。
参照:
1. DotNumerics 。
2. DotNumericsアドオンのソース。
GearsBDF()関数を使用してODEを解くとき、SMath Studioで振幅検出器モデルはどのように見えますか:
SMathスタジオ
更新(2014年7月12日)。
6.ブースト:: odeint
次のアルゴリズムが含まれています。
- 明示的オイラー
- 変更された中間点
- ルンゲクッタ4
- キャッシュカープ
- ドーマンドプリンス5
- フェルバーグ78
- アダムズ・バシュフォース
- アダムズ・モールトン
- アダムズ・バシュフォース・モールトン
- 制御されたルンゲクッタ
- 密な出力ルンゲクッタ
- Bulirsch-stoer
- Bulirsch-Stoer高密度出力
- 暗黙のオイラー
- ローゼンブロック4
- 制御されたRosenbrock 4
- 密な出力Rosenbrock 4
- シンプレクティックオイラー
- シンプレクティックRKNマクラクラン
- シンプレクティックRKNマクラクラン
まだ試していません。使用例を示すことはできません。
参照:
1. Boost.Numeric.Odeint 。
2. ステッパーの概要 。
7. SADEL(代数および微分方程式ソルバーライブラリのセット)
まだ試していません。使用例を示すことはできません。
参照:
1. SADELライブラリについて 。
2. 常微分方程式の硬いシステムの最新ソルバーとSADELライブラリのCソルバーの比較 。
8.ソルバーリモノバA. G.
まだ試していません。使用例を示すことはできません。
参照:
1. 論文。 複雑な係数を備えた2段式Rosenbrockスキームの開発と、周期的ナノ構造の形成のモデリング問題への応用、2010年 。