質問: Matlabのode45における "イベント"の精度 I'm consider a problem of integrating until an event occurs using ode45 in Matlab, as in here: http://www.mathworks.com/help/techdoc/math/f1-662913.html#f1-670140 Matlabがイベントの位置をどれだけ正確に計算するかを制御する方法はありますか?具体的には、イベントは `value` パラメータがゼロになるまでODEで解決するように指示しますが、 `value` はどれくらい小さいのでしょうか?統合が終了したときに `value` をどのくらい小さくしたいのかを指定する方法はありますか?
回答: > > Matlabがイベントをどの程度正確に計算するかを制御する方法はありますか 場所? > > > 短い答えは「いいえ、でもマシンの精度にはとにかくです」と思われます。 Matlabの `ode45` (および `ode15s` 、 `ode23` などの残りの部分)は、 `odezero` という関数を呼び出します。 ODEインテグレータのゼロイベントを計算する作業を行います。次は、公差が設定されている `odezero` の関連する行です: ``` tol = 128*max(eps(t),eps(tnew)); tol = min(tol, abs(tnew - t)); ``` これから2つのことが分かります。(1)ユーザーオプションに依存しないこと、(2)制御権を持っていても、許容値が128 * epsであるため、それを小さくすることはできません。 > > 私が価値を望む方法を指定する方法はありますか? 統合は終了しますか? > > > MatlabのODEイベントディテクタは、 `value` が0に近づくかゼロに近づくかを調べることなく、 *crossing* 0を探します。特定の値を超えるODEの特定の値を探したい場合は、イベント関数に解と望ましいしきい値の差を返します。