2016-12-05 6 views
-1

f(x)exp(-x) x = 0と無限大の間の堅牢な積分アルゴリズムが必要です。f(x)は正の微分可能な関数です。 私は配列xを先験的に知りません(これは私のルーチンの中間出力です)。 xアレイは、通常、ログが等間隔ですが、非常に不規則です。 現在、私はSimpsonアルゴリズムを使用しています。私の問題は、x配列によってドメインが非常にアンダーサンプリングされていることが多いことです。これは積分の非現実的な値を生成します。 私のコードを実行するたびに、この積分を何千回も(それぞれ異なるx値のセットで)行う必要があるので、この関数を統合するための効率的で堅牢な方法を見つける必要があります。x = 0、無限大からf(x)exp(-x)を最適化

詳細: xアレイは、2〜Nポイント(N既知)を持つことができます。最初の値は常にx[0] = 0.0です。最後のポイントは、常に調整可能なしきい値x_max(たとえば、exp(x_max) approx 0)より大きい値です。私は点x[i]のところでfの値を知っているだけです(ただし関数は滑らかな関数です)。

私の最初のアイデアは、Laguerre-Gauss直交統合を行うことでした。しかし、このアルゴリズムは、最適な直交点を使用しない場合、非常に信頼性が低いと思われる。

私の現在のアイデアは、Simpsonアルゴリズムがより安定するように、補間ポイントのセットを追加して、fを補間することです。私がこれを行うなら、補助点の最適な選択はありますか?

アドバイスありがとうございます。 ありがとうございました。その後、

+1

http://math.stackexchange.com/ –

+0

f(x)exp(x)またはf(x)exp(-x)でもっと運があるかもしれませんか? (指数+プラスxまたはマイナスx)? –

+0

あなたの関数評価はCPUの高価な点は? (安価な評価ポイントが多いですか?) –

答えて

0

設定t=1-exp(-x)dt = exp(-x) dx積分値を使用すると、標準のシンプソンの式で評価し、うまくいけば、良い結果を得ることができます

integral[ f(-log(1-t)) , t=0..1 ] 

に等しいです。

区分線形補間は、その方法がシンプソンであっても台形式になるため、積分の次数2の誤差が常に生じることに注意してください。 Simpsonメソッドのエラーを改善するには、より高い補間度、理想的には3次スプラインが必要です。制御点を計算するために推定微分を用いた立方体ベジエ多項式は、高速妥協である可能性がある。

+0

ありがとう、私は実際には 't = exp(-x)'を使って終わり、次に 'f(t)dt'を積分します。私は分析値に対して結果をチェックし、無視できる誤差があった。 trapzアルゴリズムの場合でも、これははるかに高速です。 –

+0

はい、それも動作します。違いは、1つのパラメータ化が成長しており、もう1つが低下していることです。 – LutzL

関連する問題