Python-oppimateriaali (CHEM-A2600)
math-moduuli
Yksi
hyödyllisimmistä Pythonin moduuleista on math-moduuli,
joka sisältää perustavanlaatuisia matemaattisia funktioita ja vakioita.
Ensin math-moduuli täytyy tuoda ohjelmaan import-käskyllä:
import math
Tämän jälkeen moduulin funktioita ja vakioita voi käyttää näin:
# exp(x) -> Eksponenttifunktio e^x print(math.exp(4)) # log(x) -> Luvun x luonnollinen logaritmi, ln(x) print(math.log(54.598150033144236)) # log(x, y) -> Luvun x logaritmi, kantaluku y print(math.log(8, 2)) # log10(x) -> Luvun x 10-kantainen logaritmi print(math.log10(10000)) # pow(x, y) -> luku x potenssiin y. Sama kuin x**y, mutta muuntaa aina luvut (ja tuloksen) liukuluvuksi print(math.pow(3, 2)) # sqrt(x) -> Luvun x neliöjuuri (kuten x**(1/2)) print(math.sqrt(9)) # pi -> pii (ei ole funktio vaan vakio) print(math.pi) # e -> Neperin luku (ei ole funktio vaan vakio) print(math.e) # sin(x), cos, tan, ... -> trigonometriset funktiot print(math.sin(math.pi / 2)) # degrees(x) -> muuntaa radiaanit asteiksi print(math.degrees(math.pi)) # radians(x) -> muuntaa asteet radiaaneiksi print(math.radians(180)) # ceil(x) -> pyöristä kokonaislukuun ylöspäin print(math.ceil(5.4)) # floor(x) -> pyöristä kokonaislukuun alaspäin print(math.floor(5.6))
Math-moduulin dokumentaatio ja listaus funktioista löytyy osoitteesta https://docs.python.org/3/library/math.html
Liukulukujen yhtäsuuruuden vertailu math.isclose-funktiolla
Liukulukujen yhtäsuuruuden vertailuun ei pidä käyttää == -operaattoria vaan math.isclose-funktiota. Tällöin voit itse määritellä tarkkuuden, jolla liukulukuja verrataan. Vertailu voi olla joko suhteellinen (rel_tol) tai absoluuttinen (abs_tol).
Otetaan ensin esimerkki, jossa suhteellinen ja absoluuttinen vertailu johtavat samaan lopputulokseen:
import math luku1 = 2.0 luku2 = 2.005 print("Luvut: {:.3f} ja {:.3f}".format(luku1, luku2)) if math.isclose(luku1, luku2, rel_tol = 0.01): print("Luvut ovat samat 1% suhteellisella tarkkuudella") if math.isclose(luku1, luku2, abs_tol = 0.01): print("Luvut ovat samat 0.01 absoluuttisella tarkkuudella")
tulostaa
Luvut: 2.000 ja 2.005 Luvut ovat samat 1% suhteellisella tarkkuudella Luvut ovat samat 0.01 absoluuttisella tarkkuudella
Toinen esimerkki, missä rel_tol ja abs_tol johtavat eri lopputulokseen:
luku1 = 2000.0 luku2 = 2001.0 print("Luvut: {:.3f} ja {:.3f}".format(luku1, luku2)) if math.isclose(2000.0, 2001.0, rel_tol = 0.01): print("Luvut ovat samat 1% suhteellisella tarkkuudella") if not math.isclose(luku1, luku2, abs_tol = 0.01): print("Luvut eivät ole samat 0.01 absoluuttisella tarkkuudella")
Tulostaa
Luvut: 2000.000 ja 2001.000 Luvut ovat samat 1% suhteellisella tarkkuudella Luvut eivät ole samat 0.01 absoluuttisella tarkkuudella
Valinta rel_tol/abs_tol välillä riippuu vertailun luonteesta. Jos esimerkiksi vertaillaan mittaustuloksia ja tiedetään vain mittausmenetelmän suhteellinen virhe, tulee käyttää suhteellista rel_tol-vertailua.