np.polyfit () – käyrän sovitus numpy Polyfit

The .polyfit() funktio, hyväksyy kolme eri tuloarvoa: x, y ja polynomin asteen. Argumentit x ja y vastaavat niiden datapisteiden arvoja, jotka haluamme mahduttaa akseleille x ja y. Kolmas parametri määrittää asteen meidän polynomi funktio. Esimerkiksi lineaarisen istuvuuden saamiseksi käytetään astetta 1.

Sisällysluettelo

mikä on käyrä sopiva?

Käyräasennus koostuu sellaisen matemaattisen funktion rakentamisesta, joka pystyy sopimaan tiettyihin tietopisteisiin. Useimmiten, sovitusyhtälö alistetaan rajoitteita; lisäksi on myös mahdollista tehdä alustava arvaus tarjota hyödyllisiä lähtökohtia estimointi sovitus parametrit, tämä jälkimmäinen menettely on etu alentaa laskennallisen työn. Tässä artikkelissa tarkastellaan NumPy-funktiota .polyfit(), jonka avulla voidaan luoda polynomifunktioita hyvin yksinkertaisella ja välittömällä tavalla.

Lineaarinen fit

yksinkertaisin fit-tyyppi on lineaarinen fit (ensimmäisen asteen polynomifunktio), jossa datapisteet sovitetaan suoran avulla. Suoran yleinen yhtälö on:

y = mx + q

, missä ”m”: tä kutsutaan kulmakertoimeksi ja ”q”: ta leikkauspisteeksi. Kun sovellamme lineaarista istuvuutta, etsimme periaatteessa arvoja parametreille ”m” ja ”q”, jotka tuottavat parhaan istuvuuden datapisteisiimme. Numpyssa toiminto np.polyfit() on erittäin intuitiivinen ja tehokas työkalu datapisteiden asentamiseen; katsotaan, miten satunnainen joukko datapisteitä sovitetaan suoralla viivalla.

seuraavassa esimerkissä halutaan soveltaa lineaarista sovitusta joihinkin datapisteisiin, joita kuvaavat taulukot x ja y. Että .polyfit() funktio, hyväksyy kolme eri tuloarvoa: x, y ja polynomin asteen. Vaikka x ja y vastaavat niiden datapisteiden arvoja, jotka haluamme sovittaa, vastaavasti x ja y akseleille, kolmas parametri määrittää polynomifunktiomme asteen. Koska haluamme lineaarisen istuvuuden, määrittelemme asteen, joka on yhtä suuri kuin 1. Funktion polyfit() lähdöt ovat luettelo, joka sisältää sovitusparametrit; ensimmäinen on se, joka funktiossa kerrotaan korkeimman asteen termillä; muut seuraavat sitten tätä järjestystä.

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

kuten aiemmin mainittiin, muuttuja fit sisältää sovitusparametrit. Ensimmäinen on kulmakerroin, viimeinen katkaisija. Tässä vaiheessa, jotta voimme piirtää meidän fit, meidän täytyy rakentaa Y-akselin arvot saaduista parametreista käyttäen alkuperäisiä X-akselin arvoja. Esimerkissä tätä vaihetta kuvataan fit_eq muuttujan määritelmällä. Viimeinen jäljellä oleva asia on piirtää tiedot ja sopiva yhtälö. Tulos on:

toisen asteen polynomisovitus

tässä toisessa esimerkissä luodaan toisen asteen polynomisovitus. Tämän tyypin polynomifunktiot kuvaavat parabolista käyrää XY-tasossa; niiden yleinen yhtälö on:

y = ax2 + bx + c

missä a, b ja c ovat yhtälön parametrit, joita estimoimme muodostettaessa sovitusfunktiota. Tähän esimerkkiin sopivat datapisteet kuvaavat tuntemattomalta korkeudelta heitetyn esineen lentorataa. .polyfit() – funktiota hyödyntämällä saadaan sovitettua putoavan kappaleen liikerata ja saadaan myös arvio sen alkunopeudesta x-suunnassa, 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()

kun on alustettu x ja y matriisit, jotka määrittelevät objektin lentoradan, sovelletaan funktiota .polyfit(), tällä kertaa lisäämällä ”2” polynomifunktion asteeksi. Tämä johtuu siitä, että putoavan kappaleen lentorataa voidaan kuvata toisen asteen polynomilla; meidän tapauksessamme x ja y koordinaattien suhde saadaan seuraavasti:

y = y0 – ½ (g/ v02)x2

missä y0 on alkuasento (korkeus, josta kappale on heitetty), g painovoiman kiihtyvyys (9,81 m / s2) ja v0 alkunopeus (m / S) x-suunnassa (käynti: https://en.wikipedia.org/wiki/Equations_for_a_falling_body tarkemmat tiedot). Tämän jälkeen määritämme muuttujille a, b ja c 3 sovitusparametrin arvon ja määrittelemme fit_equation polynomiyhtälön, joka piirretään; tulos on:

jos nyt tulostamme kolme sopivaa parametria, a, b ja c, saamme seuraavat arvot: a = -0.100 , b = 0.038, c = 24.92. Vuonna yhtälö kuvataan liikerata, joka kuuluu elin ei ole b aikavälillä; koska fit on aina lähentämisestä todellinen tulos, saamme aina arvo kaikille parametreille; kuitenkin meidän on huomioitava, että arvo meidän B termi on paljon pienempi kuin muut ja voidaan jotenkin laiminlyöty, kun verrataan meidän Sovi kanssa yhtälö kuvataan fysiikan ongelma. C-termi kuvaa alkukorkeutta (y0), kun taas A – termi kuvaa suuretta – ½ (g/ v02). Alkunopeus v0 saadaan siis seuraavasti:

v0=2-g2a

, jolloin saadaan lopullinen arvo v0 = 6, 979 m / s.