このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
ODE の一般的な問題のトラブルシューティング
許容誤差
質問または問題 | 回答 |
---|---|
誤差のしきい値 |
大まかに言うと、これは、しきい値 |
コンピューターの計算精度と同等の解を求めたいのですが、単に | マシンの精度に近い値を得ることはできますが、ぎりぎりまで近づけることはできません。ソルバーは連続関数を近似しようとするため、 |
ある解要素に対しては正確な解が必要ないことをソルバーに設定するには、どのようにすればよいでしょうか。 | その解要素に対する絶対許容誤差 |
問題のスケール
質問または問題 | 回答 |
---|---|
ODE suite で、どの程度のサイズの問題を解くことができますか。 | 基本的な制限要因は、メモリ サイズとシミュレーション時間です。ステップごとにシステムの方程式の数を 問題がノンスティッフな場合や |
非常に大きな系の解を求めますが、必要な要素は | はい。この目的のために特別に設計された |
積分計算の立ち上がり部分でどのくらいの CPU 時間がかかりますか。またその時間を減らす方法とは? | 立ち上がりで最も時間がかかるのは、ソルバーが問題のスケールに合ったステップ サイズを見つけようとする部分です。適切なステップ サイズがわかっている場合は、 |
積分計算で使われる最初のステップ サイズが大きすぎて、重要な動作を検出できません。 |
|
解要素
質問または問題 | 回答 |
---|---|
解が想定とは異なっています。 | 想定が正しい場合は、許容誤差を既定値よりも小さくしてください。積分する時間区間が "長すぎる" 問題や多少不安定な問題の解を正確に計算するには、相対許容誤差を小さくする必要があります。 いずれかの時点において、解の要素がその絶対許容誤差よりも小さいままのものがあるかをチェックしてください。その場合は、これらの要素では桁数が正しくなるように設定されていないことになります。これらの要素については特に問題がなくても、正確に計算できないと、これらに依存する他の要素の精度が落ちてしまうこともあります。 |
プロットの滑らかさが十分ではありません。 |
|
計算しながらプロットすると途中までは問題ないのですが、あるところで計算が止まってしまいます。 | まず、計算が停止する点の近くで ODE の解が滑らかであるかを確認してください。そうでない場合は、それを解決するための小さいステップをソルバーに設定しなければなりません。ODE 関数の滑らかな部分で積分区間を分割すると、これを解決できる場合があります。 関数が滑らかであり、計算が非常に小さなステップ幅で進んでいる場合は、スティッフな問題には対応していないソルバーを使用して、そのような問題の解を求めようとしている可能性があります。スティッフ ソルバー |
最終値はわかっていても、初期値がわからない場合はどうしたらよいですか。 | ODE suite のすべてのソルバーでは、時間を戻したり進めたりしながら解を求めることができます。ソルバーの構文は |
非常に多くのタイム ステップを使うので、積分計算が非常に遅くなります。 | はじめに、
最後に、ODE が効率よく記述されているかを確かめてください。ソルバーは ODE の導関数を何回も計算します。数値積分に要する時間は、ODE の計算に大きく依存します。複雑な定数パラメーターを評価ごとに計算し直すのではなく、これらをグローバル変数に保存するか、または一度に計算して入れ子関数に渡してください。 |
| 時間 微分方程式の係数または解に周期性がある場合、最大ステップ サイズを周期長に制限して、ソルバーでステップが周期長より大きくならないことを確認してください。 |
問題のタイプ
ライン手法で離散化した PDE (偏微分方程式) を扱うことができますか。 | PDE を離散化すると ODE 方程式が生成されるので可能です。離散化の結果によっては、質量行列を含んだ形式になる場合がありますが、それには ODE ソルバーを使用できます。多くの場合、このシステムはスティッフになります。これは、PDE が放物型である場合や、流体内での化学反応のような非常に異なる時間スケールで生じる現象の場合に予想されます。このような場合、ソルバー 方程式が多い場合は、 系がスティッフでない場合やそれほどスティッフではない場合は、スティッフ ソルバー 1 次元放物-楕円型偏微分方程式の解は、MATLAB® PDE ソルバー |
サンプリングされたデータによるシステムを積分できますか。 | 直接的には無理です。代わりに、内挿やその他のデータ近似の手法を使用し、データを関数として表してください。この関数については、滑らかさが重要です。スプラインのような区分的多項式で置き換えた場合、一見滑らかにみえますが、ソルバーにとっては不連続になっています。微分値が不連続になる点で、ソルバーは非常に細かいステップを使用します。滑らかな関数を使用してデータを表すか、または滑らかさの影響はあまり受けない低次のソルバー ( |
参考
odeset
| odeget
| deval
| odextend