私は odeint を使用して、ゼロ未満になるべきではないいくつかの変数があるシステムをシミュレートしています。
odeint の変数を特定の範囲にバインドする適切な方法はありますか?
私は odeint を使用して、ゼロ未満になるべきではないいくつかの変数があるシステムをシミュレートしています。
odeint の変数を特定の範囲にバインドする適切な方法はありますか?
odeint ではそのような可能性はありません。そして、それを行うことができるアルゴリズムはないと思います。ODE で境界を何らかの方法でエンコードする必要があります。
システムの進化中に境界を見つけたい場合は、次のようなループを使用します
while( t < tmax )
{
stepper.do_step( ode , x , t , dt );
t += dt;
if( check_bound( x , t ) ) break;
}
2つのサイドノード、おそらくこれがあなたの問題のケースです:
ODE には、アルゴリズムが保存則が確実に成立することを保証する保存則を持つ特別なアルゴリズムがあります。たとえば、シンプレクティック ソルバーを参照してください。
境界が ODE で何らかの方法で既にエンコードされていて、とにかく境界に達している場合は、ソルバーのステップサイズを短くする必要があります。