3

My current problem is trying to use FunctionInterpolation[] on complicated functions, the easiest to see this is probably when you compare the difference between:

FunctionInterpolation[Sin[t], {t, 0, 30}]
Plot[%[t], {t, 0, 30}]

and

FunctionInterpolation[Sin[t], {t, 0, 1000}]
Plot[%[t], {t, 0, 30}]

By increasing the domain of the function the interpolation becomes very inaccurate, I'm looking for a way to create a FunctionInterpolation[] that has an arbitrarily high accuracy for an arbitrarily long domain. It appears to be possible for short domains but I have been unable so far to find a solution for both.

If this is not possible, why not? is there something special about the form of InterpolationFunction that I'm unaware of?

4

3 に答える 3

3

デリバティブも含めることができます:

FunctionInterpolation[{Sin[t], Cos[t], -Sin[t], -Cos[t]}, {t, 0, 1000}]
Plot[%[t], {t, 0, 100}]

プロット

于 2012-09-24T12:14:08.303 に答える
2

関数範囲に文書化されていない構文を使用すると、基になるサンプリング周波数を明らかに増やすことができます。

FunctionInterpolation[Sin[t], {t, 0, 1000, 20}]

Plot[%[t], {t, 0, 30}]

Mathematica グラフィックス

于 2012-09-24T21:30:33.293 に答える
2

文書化されていないオプションInterpolationOrder->nを大きなnlike で試してください。たとえば、次のようにします50

With[{func = FunctionInterpolation[Sin[t], {t, 0, 1000}]}, 
  Plot[func[x], {x, 150, 160}]
]

ここに画像の説明を入力

With[{func = FunctionInterpolation[Sin[t], {t, 0, 1000}, InterpolationOrder -> 50]}, 
  Plot[func[x], {x, 150, 160}]
]

ここに画像の説明を入力

文書化されていないものを試すこともできますInterpolationPoints

With[{func = FunctionInterpolation[Sin[t], {t, 0, 1000}, InterpolationPoints -> 50]}, 
  Plot[func[x], {x, 150, 160}]
]

ここに画像の説明を入力

于 2016-05-16T21:48:26.127 に答える