np.polyfit () – curba montarea cu NumPy Polyfit

os .polyfit() funcție, acceptă trei valori de intrare diferite: x, y și gradul polinomial. Argumentele x și y corespund valorilor punctelor de date pe care dorim să le încadrăm, pe axele x și, respectiv, y. Al treilea parametru specifică gradul funcției noastre polinomiale. De exemplu, pentru a obține o potrivire liniară, utilizați gradul 1.

cuprins

ce este montarea curbei?

montarea curbei constă în construirea unei funcții matematice care este capabilă să se potrivească unor puncte de date specifice. De cele mai multe ori, ecuația de montare este supusă unor constrângeri; în plus, este posibilă și presupunerea inițială pentru furnizarea de puncte de plecare utile pentru estimarea parametrilor de montare, această din urmă procedură având avantajul de a reduce munca de calcul. În acest articol vom explora funcția NumPy .polyfit(), care permite crearea funcțiilor de potrivire polinomială într-un mod foarte simplu și imediat.

potrivire liniară

cel mai simplu tip de potrivire este potrivirea liniară (o funcție polinomială de gradul întâi), în care punctele de date sunt montate folosind o linie dreaptă. Ecuația generală a unei linii drepte este:

y = mx + q

unde „m” se numește coeficient unghiular și interceptare „q”. Când aplicăm o potrivire liniară, căutăm practic valorile parametrilor” m „și” q ” care produc cea mai bună potrivire pentru punctele noastre de date. În Numpy, funcția np.polyfit() este un instrument foarte intuitiv și puternic pentru montarea punctelor de date; să vedem cum să potrivim o serie aleatorie de puncte de date cu o linie dreaptă.

în exemplul următor, dorim să aplicăm o potrivire liniară la unele puncte de date, descrise de matrice xși y. La .polyfit() funcție, acceptă trei valori de intrare diferite: x, y și gradul polinomial. În timp ce x și y corespund valorilor punctelor de date pe care dorim să le încadrăm, pe axele x și respectiv y; al treilea parametru specifică gradul funcției noastre polinomiale. Deoarece dorim o potrivire liniară, vom specifica un grad egal cu 1. Ieșirile funcției polyfit() vor fi o listă care conține parametrii de montare; primul este cel care în funcție este înmulțit cu termenul de cel mai înalt grad; celelalte urmează apoi această ordine.

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()

după cum s-a menționat anterior, variabila fit va conține parametrii de montare. Primul este coeficientul unghiular, ultimul este interceptarea. În acest moment, pentru a ne stabili potrivirea, trebuie să construim valorile axei y din parametrii obținuți, folosind valorile inițiale ale axei X. În exemplu, acest pas este descris de definiția variabilei fit_eq. Ultimul lucru rămas este să trasați datele și ecuația de montare. Rezultatul este:

potrivire polinomială de gradul doi

în acest al doilea exemplu, vom crea o potrivire polinomială de gradul doi. Funcțiile polinomiale de acest tip descriu o curbă parabolică în planul xy; ecuația lor generală este:

y = ax2 + bx + c

unde A, b și c sunt parametrii ecuației pe care îi estimăm atunci când generăm o funcție de montare. Punctele de date pe care le vom încadra în acest exemplu, reprezintă traiectoria unui obiect care a fost aruncat de la o înălțime necunoscută. Exploatând funcția .polyfit(), ne vom potrivi traiectoriei obiectului care se încadrează și vom obține, de asemenea, o estimare a vitezei sale inițiale în direcția 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()

odată inițializate x și y matrice care definesc traiectoria obiectului, vom aplica funcția .polyfit(), de data aceasta inserarea „2” ca grad al funcției de potrivire polinom. Acest lucru se datorează faptului că traiectoria unui obiect care se încadrează poate fi descrisă de un polinom de gradul doi; în cazul nostru, relația dintre coordonatele x și y este dată de:

y = y0 – Irak (g/ v02)x2

unde y0 este poziția inițială (înălțimea de la care a fost aruncat obiectul), g accelerația gravitației ( 9,81 m/s2) și v0 viteza inițială (m/s) în direcția x (vizitați: https://en.wikipedia.org/wiki/Equations_for_a_falling_body pentru mai multe detalii). Apoi atribuim la variabilele a, b și c valoarea celor 3 parametri de montare și definim fit_equation, ecuația polinomială care va fi reprezentată; rezultatul este:

dacă tipărim acum cei trei parametri de montare, a,b și c, obținem următoarele valori: a = -0.100 , b = 0.038, c = 24.92. În ecuația care descrie traiectoria unui corp care se încadrează nu există un termen b; deoarece potrivirea este întotdeauna o aproximare a rezultatului real, vom obține întotdeauna o valoare pentru toți parametrii; cu toate acestea, vom observa că valoarea termenului nostru b este mult mai mică decât celelalte și poate fi cumva neglijată, atunci când comparăm potrivirea noastră cu ecuația care descrie fizica problemei. Termenul c reprezintă înălțimea inițială (y0), în timp ce termenul a descrie cantitatea – XV (g/ v02). Prin urmare, viteza inițială v0 este dată de:

v0 = 2-g2a

obținându-se valoarea finală a v0 = 6.979 m / s.