Tehtävät

Viidennen viikon tehtävät

Varsinkin laboratoriotöissä haluamme usein sovittaa dataan suoran tai käyrän, sekä tietää sen yhtälön. Pythonin avulla tämä käy nopeasti hyödyntämällä pienimmän neliösumman menetelmää. Wikipedia kertoo asiasta näin: "Pienimmän neliösumman menetelmässä regressiokertoimien estimaattorit määrätään minimoimalla jäännös- eli virhetermien neliösumma. Saaduilla estimaateilla voidaan siten muodostaa estimoitu regressiosuora, eli malli kuvaamaan selitettävän muuttujan vaihtelua. "

Pythonin leastsq-funktiota joka käyttää PNS-menetelmää kutsutaan seuraavasti:

  def residuals(param, xdata, ydata):
    return ydata - (param[0] + param[1]*xdata)
  def main():
    x0 = np.array([0,0])
    tu = leastsq(residuals, x0, args=(xdata, ydata))

Leastsq vaatii siis residuals funktion (joka laskee virhetermit), alkuarvauksen sekä argumenteiksi dataa. Nyt saamme sovitetun funktion seuraavalla tavalla:

  def residuals(param, xdata, ydata):
    return ydata - (param[0] + param[1]*xdata)
  def main():
    x0 = np.array([0,0])
    tu = leastsq(residuals, x0, args=(xdata, ydata))
    yfit = tu[0] #Saadut parametrit
    fitFunc = yfit[0] + yfit[1]*xdata

fitFuncin voimme plotata hyödyntämällä pyplottia.

Tehtäväpohja on seuraavanlainen:

  def func(param, xdata, ydata):
    return ydata - (param[0] + param[1]*xdata)
  def main():

Tehtävänäsi on käyttää SciPyn Least square-funktiota ja tehdä laboratoriosta saatuun dataan suoran sovitus. Data löytyy tiedostosta input.dat. Datassa ensimmäinen sarake on virta ja toinen sarake on jännite. Ratkaiset siis resistanssia. Muista tulostaa saamasi kulmakerroin, jotta tarkistus menee läpi!

R = 0.56

Tehtäväpohja on seuraavanlainen:

  def main():
    #Generate random data
    xdata = np.linspace(0,4,50)
    y_noise = 0.2 * np.random.normal(size=xdata.size)
    ydata = 3*xdata + y_noise

Tehtävänäsi on käyttää SciPyn Least square-funktiota ja tehdä suoran sovitus generoituun dataan. Suora tulee olla muotoa ax + b. Muista tulostaa saamasi parametrit, jotta tarkistus menee läpi!

[-0.04193429  3.00553665]

Tehtäväpohja on seuraavanlainen:

  def main():
    #Generate random data
    xdata = np.linspace(-3,7,75)
    y_noise = 0.5 * np.random.normal(size=xdata.size)
    ydata = xdata**2 + y_noise

Tehtävänäsi on käyttää SciPyn Least square-funktiota ja tehdä muotoa ax^2 + b oleva sovitus generoituun dataan. Sinun täytyy myös toteuttaa sovitusfunktio (residuals) itse. Muista tulostaa saamasi parametrit, jotta tarkistus menee läpi!

[-0.02469396  0.99438934]

Tehtäväpohja on seuraavanlainen:

  def main():
    #Generate random data
    xdata = np.linspace(0,2*np.pi,100)
    y_noise = 0.2 * np.random.normal(size=xdata.size)
    ydata = np.sin(xdata) + np.cos(xdata) + y_noise

Tehtävänäsi on käyttää SciPyn Least square-funktiota ja tehdä muotoa Asin(x) + Bcos(x) oleva sovitus generoituun dataan. Sinun täytyy myös toteuttaa sovitusfunktio (residuals) itse. Muista tulostaa saamasi parametrit, jotta tarkistus menee läpi!

[ 1.00423816  0.99764248]

Tehtäväpohja on seuraavanlainen:

  def main():
    #Generoidaan random dataa
    xdata = np.linspace(0,4,50)
    y = func(xdata, 2, 3, 1)
    y_noise = 0.2 * np.random.normal(size=xdata.size)
    ydata = y + y_noise

Tehtävänäsi on käyttää SciPyn Curve fit-funktiota ja tehdä sovitus a*e^(-b*x) + c generoituun dataan. Sinun täytyy myös toteuttaa sovitusfunktio (residuals) itse. Muista tulostaa saamasi parametrit, jotta tarkistus menee läpi! Curve fit ei kuulu luentomateriaaliin, mutta Googlesta voi olla apua :)

[ 1.7763289   3.02012127  1.06947269]

Sisällysluettelo