np.polyfit()-NumPy Polyfit

を使用した曲線近似。polyfit()関数は、xy、および多項式次数の三つの異なる入力値を受け入れます。 引数xおよびyは、それぞれx軸およびy軸上の近似するデータ点の値に対応します。 第三のパラメータは、多項式関数の次数を指定します。 たとえば、線形近似を取得するには、次数1を使用します。

目次

曲線近似とは何ですか?

曲線近似は、いくつかの特定のデータポイントを近似できる数学関数を構築することにあります。 さらに,近似パラメータの推定のための有用な出発点を提供するための初期推測を行うことも可能であり,この後者の手順は計算作業を低下させる利点を有する。 この記事では、非常に簡単で即時の方法で多項式近似関数を作成できるNumPy関数.polyfit()について説明します。

線形近似

最も単純なタイプの近似は、データ点が直線を使用して近似される線形近似(一次多項式関数)です。 直線の一般的な方程式は次のとおりです。

y=mx+q

ここで、”m”は角度係数、”q”切片と呼ばれます。 線形近似を適用するとき、基本的には、データポイントに最適な近似をもたらすパラメータ”m”と”q”の値を検索しています。 Numpyでは、関数np.polyfit()はデータポイントをフィッティングするための非常に直感的で強力なツールです; ランダムな一連のデータ点を直線で近似する方法を見てみましょう。

次の例では、配列xおよびyによって記述されるいくつかのデータポイントに線形近似を適用します。 ザ.polyfit()関数は、xy、および多項式次数の三つの異なる入力値を受け入れます。 xyは、それぞれx軸とy軸に適合させたいデータ点の値に対応しますが、3番目のパラメータは多項式関数の次数を指定します。 線形近似が必要なので、1に等しい次数を指定します。 polyfit()関数の出力は近似パラメータを含むリストになり、最初のものは関数内で最高次数項を乗算したものであり、他のものはこの順序に従います。

import numpy as npfrom numpy import random #it will be useful for generating some random noise (on purpose) in the data points that we want to fitimport matplotlib.pyplot as plt #for plotting the data#---LINEAR FIT----#generate the x arrayx = np.linspace(0,60,60) # generate an array of 60 equally space points#generate the y array exploiting the random.randint() function to introduce some random noisey = np.array() #each element is a random number with value between +-2 the respective x axis value#Applying a linear fit with .polyfit()fit = np.polyfit(x,y,1)ang_coeff = fitintercept = fitfit_eq = ang_coeff*x + intercept #obtaining the y axis values for the fitting function#Plotting the datafig = plt.figure()ax = fig.subplots()ax.plot(x, fit_eq,color = 'r', alpha = 0.5, label = 'Linear fit')ax.scatter(x,y,s = 5, color = 'b', label = 'Data points') #Original data pointsax.set_title('Linear fit example')ax.legend()plt.show()

前述のように、変数fitには近似パラメータが含まれます。 最初のものは角度係数で、最後のものは切片です。 この時点で、近似をプロットするには、元のx軸の値を使用して、得られたパラメータからy軸の値を構築する必要があります。 この例では、このステップはfit_eq変数の定義によって記述されています。 最後に残っているのは、データと近似方程式をプロットすることです。 結果は次のとおりです:

2次多項式の近似

この2番目の例では、2次多項式の近似を作成します。 このタイプの多項式関数は、xy平面内の放物線曲線を記述します。

y=ax2+bx+c

ここで、a、b、cは、近似関数を生成するときに推定する方程式パラメータです。 この例で近似するデータポイントは、未知の高さからスローされたオブジェクトの軌跡を表します。 関数.polyfit()を利用して、落下する物体の軌道を近似し、x方向の初期速度v0の推定値も取得します。

#-----POLYNOMIAL FIT----x = np.array() # x coordinatesy = np.array() # y coordinatesfit = np.polyfit(x, y, 2)a = fitb = fitc = fitfit_equation = a * np.square(x) + b * x + c#Plottingfig1 = plt.figure()ax1 = fig1.subplots()ax1.plot(x, fit_equation,color = 'r',alpha = 0.5, label = 'Polynomial fit')ax1.scatter(x, y, s = 5, color = 'b', label = 'Data points')ax1.set_title('Polynomial fit example')ax1.legend()plt.show()

オブジェクトの軌跡を定義するxおよびy配列を初期化したら、関数.polyfit()を適用し、今回は多項式近似関数の次数として”2″を挿入します。 これは、落下する物体の軌道が2次多項式で記述できるためです; この場合、x座標とy座標の関係は、

y=y0–θ(g/v02)x2

ここで、y0は初期位置(オブジェクトがスローされた高さ)、gは重力加速度(9.81m/s2)、v0はx方向の初期速度(m/s)(詳細はhttps://en.wikipedia.org/wiki/Equations_for_a_falling_bodyを参照)である。)。 次に、変数ab、およびcに3つの近似パラメータの値を割り当て、プロットされる多項式fit_equationを定義します。:

ここで、3つの近似パラメータa、b、およびcを出力すると、a=-0.100、b=0.038、c=24.92の値が得られます。 落下体の軌道を記述する方程式では、b項はありません。fitは常に実際の結果の近似であるため、常にすべてのパラメータの値を取得します。しかし、fitと問題の物理学を記述する方程式を比較すると、b項の値は他のものよりもはるかに小さく、何らかの形で無視することができることに気付くでしょう。 C項は初期の高さ(y0)を表し、a項は量–π(g/v02)を表します。 したがって、初期速度v0は次のように与えられます。

v0=2-g2a

v0=6.979m/sの最終値が得られます。