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:
Saadaksesi arvot Z1 ja Z2 tarvitset taun arvoa.
Z1 lasketaan seuraavasti:
Z2 lasketaan seuraavasti:
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 & \\