CHEM-A2600 - Kemiantekniikan ohjelmointikurssi, Luento-opetus, 4.9.2023-1.12.2023
This course space end date is set to 01.12.2023 Search Courses: CHEM-A2600
Python-oppimateriaali (CHEM-A2600)
Matemaattiset funktiot (math)
Pythonin math-niminen moduuli sisältää sisältää suuren määrän erilaisia matemaattisia funktioita ja vakioita. Moduulien luomisesta ja käyttämisestä kerrotaan lisää seuraavassa luvussa, mutta ennen kuin sukellamme syvemmälle moduulien maailmaan, otetaan math-moduulin sisältämät matemaattiset funktiot käyttöön.
math-moduuli tuodaan ensin oman ohjelman käyttöön lisäämällä ohjelman alkuun import-käsky:
import math
Tämän jälkeen moduulin sisältämiä funktioita ja vakioita voi käyttää alla olevilla tavoilla. Voit kopioida esimerkit Spyderiin ja ajaa ne, jos haluat nähdä, miten funktiot toimivat.
# 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)) # fabs(x) -> itseisarvo (muuten sama kuin Pythonin normaali abs()-funktio, mutta palauttaa aina liukuluvun) print(math.fabs(-5.6))
Math-moduulin dokumentaatio ja listaus kaikista sen sisältämistä 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, jolloin käytetään parametria rel_tol tai absoluuttinen, jolloin käytetään parametria abs_tol.
Otetaan ensin esimerkki, jossa suhteellinen ja absoluuttinen vertailu johtavat samaan lopputulokseen:
import math luku1 = 2.0 luku2 = 2.005 print(f"Luvut: {luku1:.3f} ja {luku2:.3f}") 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:
import math luku1 = 2000.0 luku2 = 2001.0 print(f"Luvut: {luku1:.3f} ja {luku2:.3f}") 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 ja abs_tol -parametrien välillä riippuu vertailun luonteesta. Jos esimerkiksi vertaillaan mittaustuloksia ja tiedetään vain mittausmenetelmän suhteellinen virhe, tulee käyttää suhteellista rel_tol-vertailua.