いくつかの点があり、この点に曲線を当てはめようとしています。関数が存在することは知っていますがscipy.optimize.curve_fit
、ドキュメント、つまりこの関数の使用方法がわかりません。
私のポイント:np.array([(1, 1), (2, 4), (3, 1), (9, 3)])
誰もそれを行う方法を説明できますか?
いくつかの点があり、この点に曲線を当てはめようとしています。関数が存在することは知っていますがscipy.optimize.curve_fit
、ドキュメント、つまりこの関数の使用方法がわかりません。
私のポイント:np.array([(1, 1), (2, 4), (3, 1), (9, 3)])
誰もそれを行う方法を説明できますか?
単純な多項式フィットから始めることをお勧めします。知っておく必要がscipy.optimize.curve_fit
ある関数をポイントのセットにフィットさせようとします。f
numpy.polyfit
これは、とを使用した単純な 3 次多項式近似poly1d
です。最初に最小二乗多項式近似を実行し、2 番目に新しい点を計算します。
import numpy as np
import matplotlib.pyplot as plt
points = np.array([(1, 1), (2, 4), (3, 1), (9, 3)])
# get x and y vectors
x = points[:,0]
y = points[:,1]
# calculate polynomial
z = np.polyfit(x, y, 3)
f = np.poly1d(z)
# calculate new x's and y's
x_new = np.linspace(x[0], x[-1], 50)
y_new = f(x_new)
plt.plot(x,y,'o', x_new, y_new)
plt.xlim([x[0]-1, x[-1] + 1 ])
plt.show()
最初に、numpy 配列を x 値と y 値を含む 2 つの別個の配列に分割する必要があります。
x = [1, 2, 3, 9]
y = [1, 4, 1, 3]
また、curve_fit には、希望するタイプのフィットを提供する関数も必要です。たとえば、線形フィットは次のような関数を使用します
def func(x, a, b):
return a*x + b
scipy.optimize.curve_fit(func, x, y)
は、2 つの配列を含む numpy 配列を返します。最初の配列には、データに最適な と のa
値が含まれ、2 番目の配列には、最適適合パラメーターの共分散が含まれます。b
提供されたデータを使用した線形適合の例を次に示します。
import numpy as np
from scipy.optimize import curve_fit
x = np.array([1, 2, 3, 9])
y = np.array([1, 4, 1, 3])
def fit_func(x, a, b):
return a*x + b
params = curve_fit(fit_func, x, y)
[a, b] = params[0]
このコードは戻りa = 0.135483870968
、b = 1.74193548387
これは、ポイントと線形フィットを含むプロットです...これは明らかに悪いものですが、フィッティング関数を変更して、希望するタイプのフィットを取得できます。