タグ付けされた質問 「ode」

常微分方程式(ODE)には、1つの独立変数の関数と、その変数に関する1つ以上の導関数が含まれています。このタグは、ODEによる現象のモデリング、ODEの解決、およびその他の関連する側面に関する質問を対象としています。

17
Python用の高品質な非線形プログラミングソルバーはありますか?
解決すべきいくつかの挑戦的な非凸のグローバル最適化問題があります。現在、MATLABのOptimization Toolbox(特にfmincon()algorithm ='sqp'を使用)を使用していますが、これは非常に効果的です。ただし、私のコードのほとんどはPythonで作成されているため、Pythonでも最適化を行いたいと考えています。競合できるPythonバインディングを備えたNLPソルバーはありfmincon()ますか?ちがいない 非線形等式および不等式の制約を処理できる ユーザーがヤコビアンを提供する必要はありません。 グローバルな最適化を保証していなくても構いません(保証fmincon()しません)。私は、困難な問題や、それよりもわずかに遅い場合でも、ローカル最適にロバストに収束するものを探していfmincon()ます。 OpenOptで利用できるソルバーをいくつか試しましたが、MATLABのソルバーより劣っていfmincon/sqpます。 強調するために、私はすでに扱いやすい定式化と優れたソルバーを持っています。私の目標は、ワークフローをより合理化するために、単に言語を変更することです。 Geoffは、問題のいくつかの特性が関連している可能性があると指摘しています。彼らです: 10-400の決定変数 4〜100の多項式等式制約(1〜8の範囲の多項式次数) 決定変数の数の約2倍に等しい合理的な不等式制約の数 目的関数は決定変数の1つです 不等式制約のヤコビアンと同様に、等式制約のヤコビアンは密です。

3
並列ODEメソッドの最新技術とは何ですか?
現在、ODE統合のための並列メソッドを検討しています。さまざまなアプローチを説明する新しい文献や古い文献がたくさんありますが、最近の調査や一般的なトピックを説明する概要記事は見つかりませんでした。 Burrageによる本[1]がありますが、それはほぼ20年前であり、したがって、パラリアルアルゴリズムのようなより現代的なアイデアの多くをカバーしていません。 [1] K.バラージ、常微分方程式の並列法および逐次法、クラレンドンプレス、オックスフォード、1995

3
数値ODEソルバーの実装をどのようにテストしますか?
数値ODEソルバーのソフトウェアライブラリで作業を開始しようとしていますが、ソルバー実装のテストを定式化する方法に苦労しています。私の野望は、最終的に、ライブラリには、非スティッフな問題とスティッフな問題の両方のソルバーと、少なくとも1つの暗黙的なソルバー(多かれ少なかれMatlab のodeルーチンの機能と同等)が含まれるため、テスト方法論はさまざまな問題の種類と異なるソルバーの基準。 私の問題は、このテストをどこから始めるべきかわからないことです。アルゴリズムの出力をテストするいくつかの異なる方法を考えることができます。 分析的な解決策がある問題をテストし、返されたすべてのデータポイントについて数値的解決策が許容範囲内にあることを確認します。これには、さまざまなソルバーで使用したいすべての特性(剛性、暗黙的問題など)を示す多くの分析問題についての知識が必要です。 このメソッドは、ソルバーメソッドの結果をテストします。したがって、ソルバーが実際に機能するという保証はなく、特定のテスト問題に対して機能するというだけです。したがって、ソルバーが機能することを自信を持って確認するには、多数のテスト問題が必要だと思います。 私が実装する予定のアルゴリズムを使用して、いくつかのタイムステップでソリューションを手動で計算し、ソルバーで同じことを行い、結果が同じであることを確認します。これには、問題の真の解決策に関する知識は必要ありませんが、かなりの実地作業が必要です。 一方、この方法はアルゴリズムのみをテストします。これは私には問題ありません。4 次のルンゲクッタが機能することを他の誰かが証明した場合、私は必死に感じる必要はありません。ただし、テストデータを生成するための適切な方法がわからないため、テストケースの作成が非常に面倒になるのではないかと心配しています(手作業を除き、手間がかかります...)。 私の現在の知識では、上記の両方の方法には重大な制限があります。最初の方法のテスト問題の良いセットがわからず、2番目の方法のテストデータを生成する良い方法もわかりません。 数値ODEソルバーを検証する他の方法はありますか?検証する必要のある実装に関する他の基準はありますか?そこからODEソルバをテストする上の任意の良い(無料)リソースがある1は? 編集: この質問は非常に幅広いので、少し明確にしたいと思います。作成するテストスイートは、主に2つの目的を満たします。 ソルバーが解決しようとしている問題に対して、ソルバーが期待どおりに機能することを確認します。言い換えれば、非スティッフな問題のソルバーは、スティッフな問題にバナナを使用することができますが、非スティッフな問題ではうまく機能するはずです。また、ライブラリに他のソルバーがより高い精度を提供している場合、非常に正確な結果を適用する必要はないかもしれません-「十分に正確」です。したがって、私の質問の一部は、どのソルバーにどのテストを使用する必要があるかです。または、少なくとも、どのように判断するのか。 ライブラリのインストール時の健全性テスト。これらのテストは、複雑である必要はありません(する必要はありません)。5秒未満で実行できる非常に基本的なものですが、何かがおかしい場合はユーザーに警告します。したがって、非常に単純なテストを構築する方法も必要ですが、それでもライブラリの状態について何かを教えてくれます。 1はい、私は私の目をグーグルでてきたが、私は何を見つけるのほとんどはの顕著な例外を除いて、非常に些細な例で講義ノートであるCWI ODEテスト・バーリからセットならば、私は知らない、またはどのように、私はテストしたいものよりもはるかに洗練されたソルバーを扱うため、私の目的に使用できます...
26 ode 


2
数値積分器に関して「シンプレクティック」とは何を意味し、SciPyのodeintはそれらを使用しますか?
このコメントで私は書いた: ...デフォルトのSciPyインテグレータ。シンプレクティック法のみを使用していると仮定しています。 odeintここでは、「非スティッフ(Adams)メソッド」または「スティッフ(BDF)メソッド」のいずれかを使用するSciPyを参照しています。ソースによると: def odeint(func, y0, t, args=(), Dfun=None, col_deriv=0, full_output=0, ml=None, mu=None, rtol=None, atol=None, tcrit=None, h0=0.0, hmax=0.0, hmin=0.0, ixpr=0, mxstep=0, mxhnil=0, mxordn=12, mxords=5, printmessg=0): """ Integrate a system of ordinary differential equations. Solve a system of ordinary differential equations using lsoda from the FORTRAN library odepack. Solves the initial …

4
高次のルンゲ・クッタ法が頻繁に使用されないのはなぜですか?
高次(つまり4を超える)Runge–Kuttaメソッドが(少なくとも私の知る限り)議論されたり、雇用されたりすることがほとんどない理由について、私は興味がありました。ステップあたりの計算時間が長くなることは理解していますが(たとえば、12次の埋め込みステップを含むRK14)、高次のルンゲクッタ法を使用することには他の欠点(安定性の問題など)がありますか?極端な時間スケールで高度に振動する解を含む方程式に適用される場合、そのような高次の方法は通常好まれませんか?
17 ode  runge-kutta 

4
硬いODEシステムの定義
ODEシステムy′=f(x,y)y′=f(バツ、y)y'=f(x,y)、 IVPを考えますy(x0)= y0y(バツ0)=y0y(x_0)=y_0。最も一般的にこの問題を考えたときに硬いヤコビ行列∂f∂y(x0、y0)∂f∂y(バツ0、y0)\frac{\partial f}{\partial y}(x_0,y_0)有し、両方の非常に小さな負の実数部分(Iのみ安定したケースを考える)と非常に大きな負の実部と固有値と固有値を。 一方、ただ1つの方程式の場合には、例えばProthero -ロビンソン方程式のためのy′= λy+g′+λgy′=λy+g′+λgy'=\lambda y + g'+\lambda g、それが硬いときに呼び出されるλ≪−1λ≪−1\lambda\ll -1。 したがって、2つの質問があります。 ODEシステムの剛性の定義に小さな固有値が含まれているのはなぜですか?非常に大きな負の実数部のみが存在することで、システムが硬くなるのに十分であると思います。これにより、明示的な方法に小さなタイムステップを使用できるようになるためです。 λmax/λminλmax/λmin\lambda_{\max}/\lambda_{\min} OK、質問を修正しましょう。2つの2次元線形ODEシステムを考えます。1つ目は固有値{-1000000、-0.00000001}で、2つ目は{-1000000、-999999}です。私にとっては、どちらも硬いです。しかし、剛性比の定義を考慮すると、2番目のシステムはそうではありません。主な質問:剛性比はなぜ考慮されるのですか? そして、質問の2番目の部分は依然として重要です。言い換えれば、大きな負の固有値と穏やかな剛性比(たとえば、100以下)を備えた「自然な」大規模ODEシステムを探しています。
17 ode  stiffness 

5
なぜODEの数値解は不安定な平衡から遠ざかるのですか?
二重振り子のようなシステムの動作をシミュレートしたいと思います。このシステムは2自由度のロボットマニピュレーターであり、作動しないため、重力の影響を受ける二重振り子のように動作します。二重振り子との唯一の主な違いは、2つの振り子が、質量中心に質量と慣性の特性を持つ2つの剛体で構成されていることです。 基本的ode45に、次のタイプのODEのシステムを解決するためにMatlabでプログラミングしました。 ⎡⎣⎢⎢⎢10000M110M1200100M120M22⎤⎦⎥⎥⎥⎡⎣⎢⎢⎢x˙1x˙2x˙3x˙4⎤⎦⎥⎥⎥=⎡⎣⎢⎢⎢x2−V1−G1x4−V2−G2⎤⎦⎥⎥⎥[10000M110M1200100M120M22][x˙1x˙2x˙3x˙4]=[x2−V1−G1x4−V2−G2] \left[ \begin{array}{cccc} 1 & 0 & 0 & 0\\ 0 & M_{11} & 0 & M_{12}\\ 0 & 0 & 1 & 0\\ 0 & M_{12} & 0 & M_{22} \end{array} \right] \left[ \begin{array}{c} \dot{x}_1\\ \dot{x}_2\\ \dot{x}_3\\ \dot{x}_4 \end{array} \right]= \left[ \begin{array}{c} x_2\\ -V_1-G_1\\ x_4\\ -V_2-G_2 \end{array} …

3
不連続rs ODEの数値手法
不連続な右側のODEの数値解法の最先端の方法は何ですか?私は主に区分的で滑らかな右側の関数、例えばサインに興味があります。 私は次のタイプの方程式を解こうとしています: バツ˙v˙= v= { (| F外部| − | F摩擦| )サイン(F外部)0:| F外部| &lt; | F摩擦|:そうでなければバツ˙=vv˙={(|F外部|−|F摩擦|)符号⁡(F外部):|F外部|&lt;|F摩擦|0:さもないと\begin{align*} \dot x &= v\\ \dot v &= \begin{cases} (|F_\text{external}| - |F_\text{friction}|) \mathop{\rm sign} (F_\text{external}) & :|F_\text{external}| < |F_\text{friction}|\\ 0 & : \text{otherwise} \end{cases} \end{align*}
15 ode 

4
固定数のRHS評価のための最適なODEメソッド
実際には、IVPを数値的に解く実行時間 は多くの場合、右辺(RHS)の評価期間によって支配されます。したがって、他のすべての操作は即時であると仮定します(つまり、計算コストなし)。IVPを解決するための全体的な実行時間が制限されている場合、これはの評価回数制限に相当するいくつかの。X (T 0)= X 0 F F N ∈ Nバツ˙(t )= f(t 、x (t )) 以下のための T ∈ [ トン0、t1]x˙(t)=f(t,x(t)) for t∈[t0,t1] \dot{x}(t) = f(t, x(t)) \quad \text{ for } t \in [t_0, t_1] x (t0)= x0x(t0)=x0 x(t_0) = x_0 ffffffN∈ NN∈NN \in \mathbb{N} 最終値のみ関心があります。x (t1)x(t1)x(t_1) このような設定で最適なODEメソッドを選択するのに役立つ理論的および実用的な結果を探しています。 たとえば、場合、幅明示的な2つのオイラーステップまたはミッドポイント法を使用した幅 1つのステップを使用してIVPを解くことができます。どちらが望ましいかはすぐにはわかりません。大きい場合は、もちろん、マルチステップメソッド、反復ルンゲクッタスキームなどについても考えることができます。(t …

3
エージェントベースのモデルを説明するためのベストプラクティス
私は数学生物学/疫学にかなり重点的に取り組んでおり、モデリング/計算科学のほとんどの作業はまだODEのセットに支配されており、明らかにかなり複雑なセットもあります。これらのモデルの利点の1つは、説明と複製がかなり簡単なことです。パラメータ値の表、および方程式自体と、あなたが研究を再現するために必要なすべての方法を、彼らがそれを実装したいと思う方法で誰かに与えました。 しかし、やや複雑なモデルが一般的になり始めています。特に、エージェントベースのモデルは、一連のODEで完全に記述されているとは限らないため、出版物で記述するのが難しく、複製するのが難しいようです。読者が何が起こったのかを理解し、比較的簡単に複製できるようにこれらのモデルを説明する背後に、ガイドラインまたは実際の経験がありますか?

2
GPUでODEシステムを解くためのオプション?
ODEの解法システムを「自明な並列処理」設定でGPUに展開したいと思います。たとえば、512の異なるパラメーターセットを使用して感度分析を行います。 理想的には、フォワードオイラーのような固定タイムステップではなく、CVODEのようなスマートアダプティブタイムステップソルバーを使用してODEソルビングを実行したいのですが、CPUの代わりにNVIDIA GPUで実行します。 誰かこれをやったことがありますか?ライブラリはありますか?
14 ode  gpu 

3
MATLABでODEを使用したステップサイズの選択
こんにちは、私の質問を見てくれてありがとう。これは、以前にphysics.stackexchange.comに投稿した私の質問の更新版です。 現在、2D励起子スピナーBose-Einstein Condensateを研究しており、このシステムの基底状態に興味があります。基底状態に到達する数学的方法は、虚数時間法と呼ばれます。 この方法は、量子力学の時間が虚数に置き換えられる非常に単純な この置換により、システム内の高エネルギー粒子が低エネルギー粒子よりも速く崩壊します。計算のすべてのステップで粒子の数を再正規化すると、最終的に最も低いエネルギーの粒子のシステム(別名)になります。基底状態。t=−iτt=−iτ t = -i \tau 問題の方程式は非線形であり、非線形シュレディンガー方程式と呼ばれ、時にはグロス-ピタエフスキー方程式とも呼ばれます。問題を解決するために、Matlabs ode45を使用しています。これは、システムを時間内に進化させ、最終的に基底状態に到達します。 注意!非線形シュレディンガー方程式には、ラプラシアンおよびその他の空間の微分項が含まれます。これらはすべて高速フーリエ変換を使用して解決されます。最後に、時間ODEのみがあります。* 私の問題と質問:計算はからにます。ode45はforループに入れられるため、巨大なベクトルを同時に計算しません。最初のラウンドはode45(odefun、)で、次にからます。ここで、タイムステップは私の問題です。タイムステップの選択が異なると、基底状態のソリューションも異なります。どのタイムステップが「最も」正しい基底状態を与えるかを判断する方法がわかりません。t0t0t_0tftft_f[ T 0、T 0 + Δ / 2 、T 0 + Δ ] 、Y 、... 、T 0 + Δ Δ[t0,…,tf][t0,…,tf][t_0,\dots,t_f][t0,t0+Δ/2,t0+Δ],y,…[t0,t0+Δ/2,t0+Δ],y,…[t_0, t_0+\Delta/2, t_0 + \Delta],y,\dotst0+Δt0+Δt_0 + \DeltaΔΔ\Delta 私の試み:このスキームでは、大きな時間ステップにより元の粒子に再正規化される前に多数の粒子が崩壊し、小さな時間ステップにより再正規化される前に少量の粒子が崩壊します。私の最初の考えは、小さな時間ステップがより正確な解決策を提供するはずであるが、それは反対のように思われるということです。 私は数値の専門家ではないので、ode45の選択は単純に任意でした。ode113でも同じことがわかります。:( 誰もこの問題について何か考えを持っていますか。追加の詳細が必要かどうかを教えてください。 ありがとうございました。 更新1: 仮想時間法とODEを研究しています。タイムステップが十分に小さくないと、全体が不安定になります。これは、私の非線形方程式が硬く、理解することから物事をはるかに難しくするのではないかと思うようになります。最新情報をお届けします。 更新2: 修正済み:問題は実際にODEの外部で正規化されていました。正規化がodefun内に保持される場合、ODEは、「外部」タイムステップの異なる選択に対して同じ結果を返します。同僚が古いコードを見せてくれたので、odefunに1行だけ追加しました。 function y_out = odefun(t,y_in,...variables...) …

1
ODEの線形システムのアルゴリズム
私は疑問に思います:を解くのに最適なアルゴリズムは何ですか ここでは実行列です。Aは明示的に時間依存ではなく、通常は疎ですが、必ずしもバンド化されていません。その固有値には正の実数部があります。Aは対角化も可能ですが、完全に対角化するには計算が効率的すぎるには大きすぎる場合があります。dあなたはdt= A udあなたはdt=Aあなたは\begin{equation} \frac{du}{dt} = Au \end{equation}AAAn × nn×nn\times n 私が良い経験をした暗黙の台形規則があります。 (私は- Δ トン2A )あなたn + 1= ( I+ Δ トン2A )あなたn(私−△t2A)あなたはn+1=(私+△t2A)あなたはn\begin{equation} \left(I-\frac{\Delta t}{2} A\right) u_{n+1} = \left(I+\frac{\Delta t}{2} A\right) u_{n} \end{equation} 明示的な方法やパデ近似はどうですか?また、強制用語がRHSに追加された場合、これはどのように変わりますか?

2
ネイティブC99複合型を使用するC用のODEソルバーのオープンソースセットはありますか?
私は多くのシミュレーションの基礎としてGSLを使用してきましたが、私の目的には少し行き過ぎであり、レガシーの理由で独自の複雑なタイプを定義しています。おそらくあまり効率的ではない自分のRunge-Kutta ODEソルバーをコーディングするのではなく、ネイティブC99複合型を使用するオープンソースODEソルバーはありますか?
12 c  ode 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.