np.polyfit () – görbe illeszkedő numpy Polyfit
a .polyfit()
függvény, három különböző bemeneti értéket fogad el: x
, y
és a polinom fok. A x
és y
argumentumok a x
és y
tengelyre illeszteni kívánt adatpontok értékeinek felelnek meg. A harmadik paraméter meghatározza a polinomfüggvényünk mértékét. Például lineáris illeszkedés eléréséhez használja az 1. fokozatot.
Tartalomjegyzék
mi a görbe illesztése?
a görbe illesztése olyan matematikai függvény felépítéséből áll, amely képes bizonyos adatpontok illesztésére. Az illesztési egyenlet legtöbbször korlátozásoknak van kitéve; sőt, az illesztési paraméterek becsléséhez hasznos kiindulási pontok megadására is lehetséges kezdeti találgatás, ez utóbbi eljárásnak az az előnye, hogy csökkenti a számítási munkát. Ebben a cikkben megvizsgáljuk a .polyfit()
NumPy függvényt, amely lehetővé teszi a polinomiális illesztési függvények létrehozását nagyon egyszerű és azonnali módon.
lineáris illesztés
az illesztés legegyszerűbb típusa a lineáris illesztés (első fokú polinomfüggvény), amelyben az adatpontok egyenes vonal segítségével vannak felszerelve. Az egyenes egyenlet általános egyenlete:
y = mx + q
ahol az “m” – t szögtényezőnek és “q” – nak nevezzük. Amikor lineáris illesztést alkalmazunk, alapvetően az “m” és “q” paraméterek értékeit keressük, amelyek a legjobban illeszkednek az adatpontjainkhoz. A numpy-ban a np.polyfit()
funkció egy nagyon intuitív és hatékony eszköz az adatpontok illesztéséhez; lássuk, hogyan illeszthetünk egy véletlenszerű adatpontot egyenes vonallal.
a következő példában lineáris illesztést szeretnénk alkalmazni néhány adatpontra, amelyeket a x
és y
tömbök írnak le. A .polyfit()
függvény, három különböző bemeneti értéket fogad el: x
, y
és a polinom fok. Míg a x
és a y
megfelel azoknak Az adatpontoknak az értékeinek, amelyeket el akarunk illeszteni, a x
és a y
tengelyeken; a harmadik paraméter meghatározza a polinomfüggvényünk mértékét. Mivel lineáris illeszkedést akarunk, megadunk egy 1-es fokozatot. A polyfit()
függvény kimenetei az illesztési paramétereket tartalmazó lista lesznek; az első az, amelyet a függvényben megszoroznak a legmagasabb fokú kifejezéssel; a többiek ezt a sorrendet követik.
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()
mint korábban említettük, a fit
változó tartalmazza az illesztési paramétereket. Az első a szög koefficiens, az utolsó az elfogás. Ezen a ponton az illesztés ábrázolásához az Y tengely értékeit a kapott paraméterekből kell felépítenünk, az eredeti x tengely értékek felhasználásával. A példában ezt a lépést a fit_eq
változó meghatározása írja le. Az utolsó fennmaradó dolog az adatok ábrázolása és az illesztési egyenlet. Az eredmény:
második fokú polinom illesztés
ebben a második példában létrehozunk egy másodfokú polinom illesztést. Az ilyen típusú polinom függvények parabolikus görbét írnak le az xy síkban; általános egyenletük:
y = ax2 + bx + c
ahol a, b és c azok az egyenletparaméterek, amelyeket becslünk egy illesztési függvény létrehozásakor. Azok az adatpontok, amelyek ebben a példában illeszkednek, egy ismeretlen magasságból dobott objektum pályáját képviselik. A .polyfit()
függvényt kihasználva illesztjük a leeső tárgy pályáját, és becslést kapunk a kezdeti sebességéről x irányban, 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()
az objektum pályáját meghatározó x
és y
tömbök inicializálása után a .polyfit()
függvényt alkalmazzuk, ezúttal a “2” – t a polinom fit függvény fokaként. Ennek oka az, hogy a leeső tárgy pályája másodfokú polinommal írható le; a mi esetünkben az x
és y
koordináták közötti összefüggést a következők adják meg:
y = Y0 – (g/ v02)X2
ahol y0 a kiindulási helyzet (az a magasság, ahonnan a tárgyat dobták), g a gravitáció gyorsulása (9,81 m / s2) és v0 a kezdeti sebesség (m/s) az x irányban (további részletekért látogasson el: https://en.wikipedia.org/wiki/Equations_for_a_falling_body). Ezután hozzárendeljük a a
, b
és c
változókhoz a 3 illesztési paraméter értékét, és meghatározzuk a fit_equation
polinom egyenletet, amelyet ábrázolunk; az eredmény:
ha most kinyomtatjuk a három illesztési paramétert, a,b és c, akkor a következő értékeket kapjuk: a = -0,100 , b = 0,038, c = 24,92. A leeső test pályáját leíró egyenletben nincs b kifejezés; mivel az illesztés mindig a valós eredmény közelítése, mindig kapunk értéket az összes paraméterre; azonban észre fogjuk venni, hogy b kifejezésünk értéke sokkal kisebb, mint a többi, és valahogy elhanyagolható, ha összehasonlítjuk illeszkedésünket a probléma fizikáját leíró egyenlettel. A c kifejezés a kezdeti magasságot jelenti (y0), míg az a kifejezés a mennyiséget írja le – 6 (g/ v02). Ezért a v0 kezdeti sebességet a következő adja meg:
v0=2-g2a
így a végső érték v0 = 6,979 m/s.