Tehtävät

Neljännen viikon tehtävät

Tehtäväpohja on seuraavanlainen:

    def main():
    t = np.arange(3) + 1             # Älä koske
    ydot = np.arange(3) + 4             # Älä koske
    f = 1.41                          # Älä koske
    tau = aliohjelma1(t,f)            # Älä koske
    z1,z2 = aliohjelma2(t,ydot,f,tau) # Älä koske
    print(tau,z1,z2)                # Älä koske

    #Kirjoita aliohjelma1 ja aliohjelma2 tähän

Tulet tarvitsemaan tämän tehtävän koodia myöhemmin tällä kurssilla, pidä se siis tallessa! Sinun tehtäväsi on luoda funktio joka laskee datan periodisuuden. Funktio laskee taun arvon ja palauttaa.

Tau lasketaan seuraavasti:

Taun lauseke

Saadaksesi arvot Z1 ja Z2 tarvitset taun arvoa.

Z1 lasketaan seuraavasti:

Z1 lauseke

Z2 lasketaan seuraavasti:

Z2 lauseke

Aloita tehtävä tekemällä aliohjelma1(t,f) joka laskee taun arvon. Luo seuraavaksi aliohjelma2(t, ydot, f, tau) joka laskee Z1 ja Z2 arvot. Tulosta lopuksi saadut arvot:

0.0496453900709 1.14844141687 11.8561720281

Python3 float-tyypillä on monia ominaisuuksia. Datan käsittelyssä tahdomme usein vähentää desimaaleja. Tutustu laajaan formatointiohjeeseen täällä.

Seuraavaksi todella yksinkertainen harjoitus Pythonin float numeroiden formatista. Tehtäväpohja on seuraavanlainen:

  def main():
    a = 2/3
    b = np.pi
    c = 11.123123123123

Tehtävä on oikein kun tulostat:

0.67
3.1416
11.123
0.67 3.1416 11.123

Mittauksista ja muista tutkimuksista saadaan usein isoja, jopa tuhansien rivien datatiedostoja. Näiden käsittelyyn Python3 on tehokas työkalu.

Datan käsittely tapahtuu Python3:ssa helpoiten file-komennolla. Ensin määritellään mitä tiedostoa käsitellään, kuinka sitä käsitellään ja miten käsittely jatkuu. Lopuksi tiedosto suljetaan, jottei se korruptoidu.

  def main():
     file = open('input.dat', 'r')

Ylläoleva komento avaa tiedoston input.dat ja asettaa sen lukutilaan. Lukutilassa voimme kätevästi siirtää datatiedoston arvoja muuttujiin.

  def main():
     file = open('input.dat', 'r')
     tiedot = file.readlines()

     x = []
     y = []

     for rivi in tiedot:
        osarivi = rivi.split()
        x.append(float(osarivi[0]))
        y.append(float(osarivi[1]))

Ylläoleva koodi siis avaa input.dat tiedoston ja lukee siitä kaksi saraketta muuttujiin x ja y.

NumPy sisältää myös kätevän tiedoston luku ominaisuuden.

  def main():
     infile = 'input.dat'

     x = np.loadtxt(infile, usecols=(0,))
     y = np.loadtxt(infile, usecols=(1,))

Ylläolevalla komennolla käyttäjän ei tarvitse käydä dataa uudelleen for-loopilla läpi vaan se saadaan suoraan muuttujille.

Vastaavasti tiedostoon kirjoittaminen toimii lähes samalla tavalla.

  def main():
     file = open('output.dat', 'w')

Nyt olemme alustaneet output.dat tiedoston ja määrittäneet että siihen tallennetaan tietoa. Seuraava vaihe riippuu täysin siitä mitä tiedostoon halutaan laittaa, mutta esimerkiksi lukujen kirjoitus tapahtuisi seuraavasti:

     file = open('output.dat', 'w')
     i = 0
     while (i < len(x)):
        file.write("%6.2f\n"%(x[i]))
        i++
    file.close()

Tämä koodi kirjoittaa kuvitellun muuttujan x listan kokonaisuudessaan output.dat tiedostoon, siten että luvut ovat allekkain.

Tehtäväpohja on seuraavanlainen:

        def main():
              lista=[]
        #Tee tehtävä tähän

        ###################################
        print(lista)

Tehtävän mukana tulee tiedosto model.dat. Tehtävänäsi löytää datasta rivi, missä on D-sarakkeessa luku 25 (25. päivä) ja siirtää se annettuun lista muuttujaan. Tehtävä on oikein kun listassa on seuraava rivi:

['2454399.48 2007 10 25 23 35']

Tehtäväpohjassa tulee mukana input.dat tiedosto. Tehtävänäsi on lukea input.dat tiedosto ja luoda output.dat tiedosto joka on valmiiksi LaTeX-taulukko muotoa. Output.dat tiedostossa pitää olla yhdellä rivillä 8 lukua ja rivejä pitäisi olla 25. Tehtävä on oikein kun output.dat tiedosto näyttää seuraavalta:

  0.01  &  7.73  &  1.20  &  7.69  &  2.05  &  7.72  &  3.13  &  7.69  \\
  4.16  &  7.69  &  5.03  &  7.70  &  5.14  &  7.71  &  5.17  &  7.73  \\
  ...

Tehtäväpohjassa tulee mukana input.dat tiedosto. Tehtävänäsi on lukea input.dat tiedosto missä on 528 riviä ja luoda output.dat tiedosto joka on valmiiksi LaTeX-taulukko muotoa. Output.dat tiedostossa on 50 riviä. Ensimmäisesä sarakkeessa ovat 50 ensimmäistä ajanhetken arvoa t kahden desimaalin tarkkuudella. Toisessa sarakkeessa on taas seuraavat 50 arvoa jne. Viimeisessä 11. sarakkeessa on 28 arvoa, sillä data loppuu kesken. Tehtävä on oikein kun output.dat tiedosto näyttää seuraavalta:

Kolme ensimmäistä riviä


1.08 &  31.26 &  65.09 &  97.47 & 128.28 & 156.09 & 190.26 & 239.08 & 274.36 & 314.07 & 346.38 \\
1.24 &  31.43 &  65.27 &  98.09 & 128.47 & 156.27 & 190.43 & 239.23 & 277.07 & 314.22 & 347.38 \\
1.40 &  32.09 &  65.46 &  98.28 & 132.09 & 156.46 & 191.09 & 239.38 & 277.22 & 314.36 & 348.08 \\

Kolme viimeistä riviä


29.25 &  62.09 &  94.47 & 127.28 & 154.09 & 188.26 & 238.08 & 272.36 & 308.07 & 345.38 &  \\
29.43 &  62.27 &  97.09 & 127.47 & 154.28 & 188.43 & 238.23 & 274.07 & 308.22 & 346.08 &  \\
31.09 &  62.45 &  97.28 & 128.09 & 154.46 & 190.09 & 238.38 & 274.22 & 308.36 & 346.23 &  \\

Sisällysluettelo