これはカーブフィッティングと呼ばれます。これを行うための最良の方法は、あなたのためにそれを行うことができる数値ライブラリを見つけることです。これは、scipyを使用してこれを行う方法を示すページです。そのページの図は、コードの機能を示しています。
2つのノイズの多いデータセットと2つの最適な正弦曲線を示すグラフhttp://www.scipy.org/Cookbook/FittingData?action=AttachFile&do=get&target=datafit.png
今ではたった4行のコードですが、作者はそれをまったく説明していません。ここで簡単に説明しようと思います。
まず、答えをどのような形にするかを決める必要があります。この例では、作成者はフォームの曲線が必要です
f(x) = p 0 cos(2π/ p 1 x + p 2)+ p 3 x
代わりに、いくつかの曲線の合計が必要になる場合があります。それで大丈夫です; 数式はソルバーへの入力です。
したがって、この例の目的は、定数p0からp3を見つけて、式を完成させることです。scipyは、この4つの定数の配列を見つけることができます。必要なのは、scipyが実際にサンプリングされたデータポイントにどれだけ近いかを推測するために使用できるエラー関数です。
fitfunc = lambda p, x: p[0]*cos(2*pi/p[1]*x+p[2]) + p[3]*x # Target function
errfunc = lambda p: fitfunc(p, Tx) - tX # Distance to the target function
errfunc
長さ4の配列という1つのパラメーターのみを取ります。これらの定数を数式に代入し、候補曲線上の値の配列を計算してから、サンプリングされたデータポイントの配列tXを減算します。結果はエラー値の配列です。おそらく、scipyはこれらの値の2乗の合計を取ります。
次に、いくつかの初期推定値を入力して数値を計算し、エラーが最小化されるパラメーターpscipy.optimize.leastsq
のセットを見つけようとします。
p0 = [-15., 0.8, 0., -1.] # Initial guess for the parameters
p1, success = optimize.leastsq(errfunc, p0[:])
結果p1
は、4つの定数を含む配列です。success
ソルバーが実際に解を見つけた場合は、1、2、3、または4です。(errfuncが十分に狂っている場合、ソルバーは失敗する可能性があります。)