811120P Diskreetit rakenteet 2016-2017 4. Joukot, relaatiot ja funktiot Osa 3: Funktiot
4.3 Funktiot Olkoot A ja B joukkoja. Funktio joukosta A joukkoon B on sääntö, joka liittää yksikäsitteisesti määrätyn B:n alkion jokaiseen A:n alkioon Jos f on funktio joukosta A joukkoon B, merkitään f : A B A on f:n määrittely- eli lähtöjoukko ja B sen arvo- eli maalijoukko Kun x A, niin f(x) on se joukon B alkio, johon f liittää alkion x f(x) on alkion x kuva ja alkio x alkion f(x) alkukuva Funktion f kuvajoukko f(a) = {f(x) x A} Huom: f(a) B, mutta f(a) ei ole välttämättä koko B funktiot 2
4.3.1 Surjektio Olkoot A ja B joukkoja ja f : A B funktio; f on surjektio, jos f(a)=b Siis f on surjektio, jos jokaisella maalijoukon alkiolla on alkukuva Esimerkki. Olkoot f(x)=3x+1 ja g(x)=x 2 funktioita reaalilukujen joukolta reaalilukujen joukolle. Silloin f on surjektio, mutta g ei ole. (Totea!) funktiot 3
4.3.2 Injektio Olkoot A ja B joukkoja ja f : A B funktio; f on injektio, jos se ei kuvaa lähtöjoukon kahta eri alkiota samalle maalijoukon alkiolle Loogisesti ilmaistuna funktio f on injektio, jos propositio x z : x z f(x) f(z) on tosi Jos funktio, on sekä surjektio että injektio, niin se on bijektio Esimerkki. Olkoot f(x)=3x+1 ja g(x)=x 3 -x funktioita reaalilukujen joukolta reaalilukujen joukolle. Silloin f on injektio (ja myös bijektio), mutta g ei ole. Totea! funktiot 4
4.3.3 Yhdistetty funktio Olkoot A,B ja C joukkoja ja f : A B sekä g : B C funktioita; yhdistetty funktio g f : A C määritellään seuraavasti: g f (a) = g(f(a)) aina, kun a A. Esimerkki. Olkoot f(x)=3x+1 ja g(x)=x 2 funktioita reaalilukujen joukolta reaalilukujen joukolle. Silloin g f (x) = 9x 2 +6x+1 ja f g (x) = 3x 2 +1. (Totea!) Funktiot h ja k ovat samat, merkitään h=k, jos kaikilla x:n arvoilla h(x)=k(x) Huom! Yleensä siis f g g f funktiot 5
4.3.4 Identiteettifunktio Olkoon A joukko ja id A : A A funktio, jolle id A (a) = a aina, kun a A; id A on joukon A identiteettifunktio Funktio id A ei siis tee mitään; se kuvaa jokaisen lähtöjoukon alkion samaksi alkioksi Huom: Jos g on funktio, jonka lähtöjoukko on A ja h funktio, jonka maalijoukko on A, on voimassa g id A = g ja id A h = h funktiot 6
4.3.5 Käänteisfunktio Olkoot A,B ja C joukkoja ja f : A B sekä g : B A funktioita. Jos g f = id A ja f g = id B, niin funktio f on funktion g käänteisfunktio ja funktio g on funktion f käänteisfunktio Graafisesti tarkastelemalla havaitaan, että funktiolla voi olla käänteisfunktio, jos se on sekä surjektio että injektio. Tämä myös riittää käänteisfunktion olemassa oloon, joten saadaan Lause. Funktiolla f on käänteisfunktio jos ja vain jos se on bijektio. funktiot 7
4.3.5 Käänteisfunktio (2) Jos funktiolla f on käänteisfunktio, niin siitä käytetään merkintää f -1 Esimerkki. Olkoot f(x)=3x+1 ja g(x)=x 2 funktioita reaalilukujen joukolta reaalilukujen joukolle. Silloin funktiolla g ei ole käänteisfunktiota ja f -1 (x) = (x-1)/3 (Totea!) Esimerkki. Viestin salaaminen. Olkoon M kaikkien viestien joukko ja funktio f : M M bijektio. Jos ainoastaan viestin vastaanottaja tuntee käänteisfunktion f -1, niin voidaan lähettää viesti f(m), kun m M. Vastaanottaja soveltaa tähän käänteisfunktiota ja saa tuloksen f -1 f (m) = id M (m) = m funktiot 8
Tehtäviä Tutki, ovatko seuraavat funktiot surjektioita tai injektioita a) Olkoon A opiskelijoiden joukko, B kaikkien henkilötunnusten joukko ja f : A B, f(a) = a:n henkilötunnus b) f : IR IR, f(x) = 2x+5 c) f : IN IN IN, f(m,n) = m+n d) f : Z Z Z Z, f(m,n) = (-m,-n) Jos funktio on bijektio, etsi sen käänteisfunktio Olkoon f : IR IR, f(x) = x 2 +5 ja g : IR IR, g(x) = 1/(x-3). Konstruoi funktiot f g ja g f. funktiot 9
4.3.6 Funktiot ohjelmointikielissä Käytännössä kaikki ohjelmointikielet sisältävät funktion käsitteen Kielissä valmiita kirjastofunktioita Ohjelmoija voi laatia omia funktioita Onko ohjelmointikielen funktio sama kuin matemaattinen funktio? C-kielisen funktion otsikko: int funktio(char c, float f) Vastaava Pascal-kielellä: function f(x: char; y: real): integer funktiot 10
4.3.6 Funktiot ohjelmointikielissä (2) Funktion otsikko määrittelee lähtö- ja maalijoukon. Edellä lähtöjoukko on C R, missä C on tietokoneen merkkien joukko ja R tietokoneessa esitettävien reaalilukujen joukko. Maalijoukko on tietokoneessa esitettävien kokonaislukujen joukko. Otsikon jälkeen tulee funktion runko, joka sisältää palautettavan arvon laskevan algoritmin funktiot 11
4.3.6 Funktiot ohjelmointikielissä (3) Vertailua matemaattisiin funktioihin: Matemaattinen funktio palauttaa aina samoilla argumenteilla saman arvon eikä se vaikuta maailman tilaan Ohjelmointikielen funktion paluuarvo voi riippua parametrien lisäksi muista seikoista (esimerkiksi globaalien muuttujien arvot) Ohjelmointikielen funktion kutsu voi muuttaa ohjelman tilaa Ns. funktionaalisessa ohjelmoinnissa pidetään ihanteena matemaattisia funktioita funktiot 12