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.