私が持っているデータは、常に二次多項式(二次関数)です。私は補間された関数のピークを可能な限り正確に見つけたいと思います。 データを補間してピークを見つける最も正確な方法は?
は、これまでのところ私はinterp1d
を使用してきたし、その後
linspace
とシンプルな
for
ループを使用して、ピーク値を抽出します。
linspace
に多数の新しく生成されたサンプルを使用することはできますが、フィッティングされた多項式の導関数を使用してさらに正確にすることはできます。
私は
interp1d
を使ってそれを行う方法を見つけられませんでした。
フィッティングした多項式係数を返す唯一の関数はpolyfit
ですが、この適合関数はかなり不正確です(ほとんどの場合、関数はデータポイントを通過しない)。
私はUnivariateSpline
を使用して試してみたと当てはめ関数は非常に正確であるように思わ、派生スプラインとその根を得ることは非常に簡単です。
他の多項式フィッティング関数(BarycentricInterpolator
、KroghInterpolator
、...)は、数値安定性の理由から多項式係数を計算していないことを示しています。
UnivariateSpline
とその派生の正確さはどの程度正確ですか?
しかし、この方法は依然として 'np.arange'のステップサイズに依存します。この場合は_0.5_です。私はフロート/倍精度に二次関数の最大値を取得したいと思います。 –
@TjazBrelih浮動小数点精度を与えます。 'y.append((i ** 2)+25)'を 'y.append((i ** 2)+25.086)'に変更します。次に、プログラムを実行します。 0.5間隔での補間では、渡された元のデータにその値が存在しないにもかかわらず、最小値が検出されます。 –
これは、関数がx軸に沿ってシフトされていない場合にのみ機能します。あなたが 'y.append((i ** 2)+25)'を 'y.append(((i + 0.2)** 2)+25)'に変更すると、真のピークが見つからず、最大/補間された関数の最小値は_0.5_の間隔でサンプリングされます。 –