1

私は導関数を計算するのにかなり高価な (一次) ODE のシステムを持っています。

ただし、導関数は、収束級数から計算され、境界がドロップされた項からの最大寄与に配置できるため、または kd ツリーに格納された事前計算された範囲情報を使用することにより、与えられた誤差範囲内でかなり安価に計算できます。 /octree ルックアップ テーブル。

残念ながら、これを利用できる一般的な ODE ソルバーを見つけることができませんでした。それらはすべて座標を提供するだけで、正確な結果が返されることを望んでいるようです。(注意してください、私は ODE の専門家ではありません。ルンゲ クッタ、Numerical Recipies の資料、LSODE、および Gnu Scientific Library のソルバーには精通しています)。

つまり、私が見たすべてのソルバーに対して、と の配列をderivs受け取り、 backの配列を返すコールバック関数を提供します。しかし、理想的には、コールバック、s、および許容可能なエラーの配列を提供し、微分範囲が必要な精度内にあることが保証されたものを探しています。(おそらく、同様に有用なバリエーションが多数あります)。txdx/dttxdx/dt_mindx/dt_max

この種のことを念頭に置いて設計されたソルバーへのポインタ、または問題への代替アプローチ (私がこのようなものを望んでいる最初の人だとは信じられません) は大歓迎です。

4

7 に答える 7

1

これについてもう少し考えてみると、区間演算がおそらく重要であることがわかりました。私のderivs関数は基本的に間隔を返します。区間演算を使用する積分器は、x を区間として維持します。私が興味を持っているxのは、 final で s の十分に小さいエラー バウンドを取得することだけtです。明らかなアプローチは、反復的に再統合し、許容範囲内の結果が最終的に得られるまで、反復ごとに最大のエラーを導入してサンプルの品質を改善することです (ただし、それは「病気よりも悪い治療法」のように聞こえますが、全体的な効率に)。「暗黙の」離散化誤差を「明示的な誤差」と同等に保つように選択されたステップ サイズを使用して、適応ステップ サイズ制御がこのようなスキームにうまく適合すると思われます。

とにかく、「odeソルバー間隔演算」または単に「間隔ode」をグーグルで検索すると、興味深い新しい関連するものがたくさん表示されます(特にVNODEとその参照)。

于 2009-02-06T16:36:47.460 に答える
1

スティッフなシステムを使用している場合、導関数がニュートン反復内でのみ使用される場合、何らかの形の陰解法を使用することになります。近似ヤコビアンを使用すると、ニュートン反復で厳密な二次収束が発生しますが、多くの場合、許容されます。あるいは (ほとんどの場合、システムが大きい場合)、ヤコビアンのないニュートン-クリロフ法を使用して段階を解くことができます。この場合、近似ヤコビアンは単なる前提条件になり、ニュートン反復で二次収束が保持されます。

于 2009-11-08T19:12:07.557 に答える
1

これが適切な質問であるかどうかはわかりません。

多くのアルゴリズム、たとえば非線形方程式の解法 f(x) = 0 では、導関数 f'(x) の推定値だけが、「一般的な方向」に進む必要があるため、ニュートン法などで使用するために必要なすべてです。答えの。

ただし、この場合、導関数は、解く (ODE) 方程式の主要な部分です。導関数を間違えると、間違った答えが得られます。これは、f(x) の近似のみで f(x) = 0 を解こうとするようなものです。

別の回答が示唆しているように、ODE を適用された f(x) + g(x) (g(x) は誤差項) として設定すると、導関数の誤差を入力の誤差に関連付けることができるはずです。

于 2009-02-04T19:21:22.513 に答える
1

大雑把に言えば、絶対誤差 eps までの f' を知っていて、x0 から x1 まで積分すると、導関数の誤差から生じる積分の誤差は <= eps*(x1 - x0) になります。ODE ソルバーからの離散化エラーもあります。eps*(x1 - x0) がどれだけ大きいかを考え、ODE ソルバーに誤差 <= eps で計算された f' 値を入力します。

于 2009-02-01T17:28:31.620 に答える
0

odesetの使用を検討しましたか? これにより、ODE ソルバーのオプションを設定できます。次に、呼び出したソルバーにオプション構造体を 4 番目の引数として渡します。エラー制御プロパティ (RelTol、AbsTol、NormControl) は、最も関心のあるものかもしれません。これがまさにあなたが必要とする種類のヘルプであるかどうかはわかりませんが、何年も前に MATLAB ODE 関数を最後に使用したので、思いつくことができる最良の提案です。

さらに: ユーザー定義の導関数について、導関数の計算に許容値をハードコードするだけでよいでしょうか?それとも、ソルバーからエラー制限を渡す必要がありますか?

于 2009-02-01T23:04:42.453 に答える
0

Check into a finite element method with linear basis functions and midpoint quadrature. Solving the following ODE requires only one evaluation each of f(x), k(x), and b(x) per element:

-k(x)u''(x) + b(x)u'(x) = f(x)

The answer will have pointwise error proportional to the error in your evaluations.

If you need smoother results, you can use quadratic basis functions with 2 evaluation of each of the above functions per element.

于 2009-11-08T19:30:25.290 に答える