np.polyfit () – křivka kování s NumPy Polyfit
The .polyfit()
funkce, přijímá tři různé vstupní hodnoty: x
, y
a polynomiální stupeň. Argumenty x
a y
odpovídají hodnotám datových bodů, které chceme přizpůsobit, na osách x
a y
. Třetí parametr určuje stupeň naší polynomiální funkce. Například pro získání lineárního uložení použijte stupeň 1.
Obsah
Co Křivky?
tvarovka křivky spočívá v sestavení matematické funkce, která je schopna přizpůsobit některé konkrétní datové body. Většina z časů, montáž rovnice je vystaven omezení; navíc, to je také možné, aby se počáteční odhad pro poskytování užitečné výchozí body pro odhad nastavitelných parametrů, tento postup má tu výhodu, že snížení výpočetní práce. V tomto článku prozkoumáme NumPy funkci .polyfit()
, která umožňuje vytvářet polynomiální fit funkce velmi jednoduchým a okamžitým způsobem.
Lineární uložení
nejjednodušším typem uložení je lineární uložení (polynomiální funkce prvního stupně), ve kterém jsou datové body namontovány pomocí přímky. Obecná rovnice přímky je:
y = mx + q
, Kde „m“ je tzv. úhlový součinitel a „q“ zachytit. Když použijeme lineární přizpůsobení, v podstatě hledáme hodnoty parametrů “ m “ a „q“, které poskytují nejlepší přizpůsobení pro naše datové body. V Numpy je funkce np.polyfit()
velmi intuitivní a výkonný nástroj pro montáž datových bodů; podívejme se, jak umístit náhodnou řadu datových bodů s přímkou.
V následujícím příkladu chceme použít lineární fit pro některé datové body, popsané pole x
a y
. Na .polyfit()
funkce, přijímá tři různé vstupní hodnoty: x
, y
a polynomiální stupeň. Zatímco x
a y
odpovídají hodnotám datových bodů, které chceme přizpůsobit, na osách x
a y
; třetí parametr určuje stupeň naší polynomiální funkce. Protože chceme lineární uložení, určíme stupeň rovný 1. Výstupy funkce polyfit()
budou seznam obsahující parametry montáže; první je ten, který je ve funkci vynásoben nejvyšším stupněm; ostatní pak následují toto pořadí.
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()
jak bylo uvedeno výše, proměnná fit
bude obsahovat parametry montáže. První je úhlový koeficient, poslední je zachycení. V tomto bodě, abychom mohli vykreslit naše přizpůsobení, musíme sestavit hodnoty osy y ze získaných parametrů pomocí původních hodnot osy x. V příkladu je tento krok popsán definicí proměnné fit_eq
. Poslední zbývající věc je vykreslit data a montážní rovnici. Výsledkem je:
Polynomiální fit druhého stupně
V tomto druhém příkladu jsme se vytvořit druhý stupeň polynomiální fit. Polynom funkce tohoto typu popsat parabolickou křivkou v rovině xy; jejich obecná rovnice je:
y = ax2 + bx + c
kde a, b a c jsou parametry rovnice, které odhadujeme při generování montáž funkce. Datové body, které v tomto příkladu zapadneme, představují trajektorii objektu, který byl hozen z neznámé výšky. Využitím funkce .polyfit()
přizpůsobíme trajektorii padajícího objektu a získáme také odhad jeho počáteční rychlosti ve směru 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()
po inicializaci x
a y
pole definování objektu trajektorie, můžeme použít funkci .polyfit()
, tentokrát vložení „2“ jako stupeň polynomu fit funkce. Je to proto, že trajektorie padajícího objektu může být popsána polynomem druhého stupně; v našem případě vztah mezi x
a y
souřadnice je dána:
y = y0 – ½ (g/ v02)x2
kde y0 je počáteční polohu (výšku, ze které objekt byl hozen), g gravitační zrychlení ( 9,81 m/s2) a v0 je počáteční rychlost (m/s) v x-směru (na adrese: https://en.wikipedia.org/wiki/Equations_for_a_falling_body pro více informací). Poté přiřadíme proměnným a
, b
a c
hodnotu 3 parametrů kování a definujeme fit_equation
, polynomiální rovnici, která bude vynesena; výsledkem je:
Pokud bychom nyní vytisknout tří nastavitelných parametrů, a,b a c, získáme následující hodnoty: a = -0.100 , b = 0.038, c = 24.92. V rovnici popisující trajektorii padajícího těla není b horizontu; vzhledem k tomu, fit je vždy odhadem skutečného výsledku, budeme vždy hodnoty pro všechny parametry; nicméně můžeme si všimnout, že hodnota našeho b horizontu, je mnohem menší než ostatní a může být nějak zapomněl, při porovnání naše fit s rovnice popisující fyzikální problém. Termín c představuje počáteční výšku (y0), zatímco termín a popisuje množství – ½ (g / v02). Proto počáteční rychlost v0 je dána:
v0=2-g2a
čímž se získá konečná hodnota v0 = 6.979 m/s.