Funktiot

Funktion määritteleminen

Omia funktioita voidaan määritellä seuraavaan tapaan:

[Graphics:../Images/gr_216.gif]
[Graphics:../Images/gr_217.gif]

Funktion määrittelyssä käytetään yleensä sijoitusoperaattoria :=, sillä funktion arvo lasketaan vasta, kun funktion arvoa kysytään jollakin argumentin arvolla. Funktion määrittelyn vasemmalla puolella argumenttiin kirjoitetaan alaviiva _ . Se tarkoittaa, että kyseessä on malli, jonka paikalle funktiota kutsuttaessa voidaan sijoittaa mitä tahansa. Oikealla puolella ei ole alaviivaa!

[Graphics:../Images/gr_218.gif]
[Graphics:../Images/gr_219.gif]
[Graphics:../Images/gr_220.gif]
[Graphics:../Images/gr_221.gif]

Funktiolle voidaan antaa sijoitusoperaattorin = avulla arvo myös yksittäisessä pisteessä. Esimerkiksi sijoitus f[3]=5 tarkoittaa, että muuttuja f[3] saa arvon 5.

[Graphics:../Images/gr_222.gif]

Kysymysmerkillä nähdään funktion määrittely. Kun itse määriteltyä funktiota ei enää tarvita, se on hyvä poistaa esimerkiksi komennolla Clear, jotta vanha funktio ei aiheuta sekaannusta uusien funktiomäärittelyjen kanssa.

[Graphics:../Images/gr_223.gif]
[Graphics:../Images/gr_224.gif]
[Graphics:../Images/gr_225.gif]

Katso myös: Module-komento

Funktion määrittelyn rajoittaminen

Funktion määrittelyä rajoitetaan asettamalla funktion argumentin perään merkki /; (kauttaviiva ja puolipiste) ja tämän jälkeen loogiset rajoitukset. Vaihtoehtoisesti rajoitukset voidaan sijoittaa määrittelyn loppuun. Funktioon voi liittyä myös useampia ehtoja. Katso: loogiset operaatiot
Esimerkiksi funktio [Graphics:../Images/gr_226.gif] voidaan määritellä seuraavilla vaihtoehtoisilla tavoilla:
f[x_ /; x>=0]:= x^2  tai    f[x_]:= x^2 /; x>=0

[Graphics:../Images/gr_227.gif]

[Graphics:../Images/gr_228.gif]

Funktion argumentti voidaan rajoittaa esimerkiksi kokonaisluvuksi, rationaaliluvuksi, reaaliluvuksi tai kompleksiluvuksi. Tällöin funktion arvoa ei lasketa, jos argumentti ei ole oikeaa tyyppiä.
f[x_Integer]:=x^2     f[x_Rational]:=x^2
f[x_Real]:=x^2        f[x_Complex]:=x^2
Näihin voidaan lisätä myös loogisia rajoituksia kuten edellä.

Rekursiiviset funktiot

Funktion määrittely voi olla rekursiivinen, jolloin määrittelyyn kuuluu saman funktion arvon laskeminen jossakin toisessa pisteessä. Tällöin rekursion pitää jossakin vaiheessa päättyä ts. pitää päästä tilanteeseen, jossa tulee laskettavaksi funktion arvo pisteessä, jossa funktion arvo tunnetaan.
Seuraavassa on kaksi esimerkkiä rekursiivisesta funktion määrittelystä. Esimerkeissä lasketaan luonnollisen luvun kertoma muodostamalla rekursiivinen funktio hieman eri tavoin. Sinänsä kertomafunktion muodostaminen on tarpeetonta, sillä Mathematicassa luvun n kertoma on n!.

[Graphics:../Images/gr_229.gif]
[Graphics:../Images/gr_230.gif]
[Graphics:../Images/gr_231.gif]
[Graphics:../Images/gr_232.gif]
[Graphics:../Images/gr_233.gif]
[Graphics:../Images/gr_234.gif]
[Graphics:../Images/gr_235.gif]
[Graphics:../Images/gr_236.gif]

Kun kertoma määritellään edellä esitellyllä tavalla, lasketaan kaikki funktion arvot aina uudelleen, kun kysytään jonkin luvun kertomaa. Seuraavassa tavassa sijoitetaan laskettu arvo muuttujan kertoma[n] arvoksi, jolloin jo laskettuja funktion arvoja ei tarvitse jonkin toisen luvun kertomaa laskettaessa laskea uudelleen.

[Graphics:../Images/gr_237.gif]
[Graphics:../Images/gr_238.gif]
[Graphics:../Images/gr_239.gif]
[Graphics:../Images/gr_240.gif]
[Graphics:../Images/gr_241.gif]
[Graphics:../Images/gr_242.gif]
[Graphics:../Images/gr_243.gif]

Jos rekursiivinen lasku on kovin pitkä, Mathematican rekursiolle asettama yläraja 256 tulee vastaan. Tällöin vakiolle $RecursionLimit voidaan antaa suurempi arvo.

Puhtaat funktiot

Jos tiettyä funktiota käytetään toistuvasti, se kannattaa määritellä funktioksi. Jos taas funktiota tarvitaan vain kerran, niin silloin voidaan käyttää puhdasta funktiota. Puhtaalla funktiolla ei ole nimeä, vaan se sijoitetaan sellaisenaan siihen paikkaan, jossa sitä tarvitaan.
Function[x,lauseke] on puhdas funktio, jossa x on muodollinen parametri. Vastaavasti Function[{x1,x2,...},lauseke] on puhdas funktio, jossa on muodolliset parametrit x1, x2, ....

[Graphics:../Images/gr_244.gif]
[Graphics:../Images/gr_245.gif]
[Graphics:../Images/gr_246.gif]
[Graphics:../Images/gr_247.gif]

Puhdas funktio voidaan muodostaa myös ilman, että nimetään argumenttia. Argumenttina käytetään tällöin risuaitaa # tai jos argumentteja on useampi #1, #2, .... Funktion lauseke kirjoitetaan risuaitojen avulla ja loppuun kirjoitetaan &. Kun funktiota kutsutaan, risuaita korvautuu funktion argumentilla.

[Graphics:../Images/gr_248.gif]
[Graphics:../Images/gr_249.gif]
[Graphics:../Images/gr_250.gif]
[Graphics:../Images/gr_251.gif]
[Graphics:../Images/gr_252.gif]
[Graphics:../Images/gr_253.gif]