Funkcje są podstawowym narzędziem ułatwiającym wykonywanie skomplikowanych zadań. Dzielimy cale zadanie na prostsze czynnosci które potrafimy wykonać ręcznie, a następnie piszemy funkcje które wykonają je automatycznie.

Bardzo prosty przykład: zakładam, że potrafimy dodać trzy liczby w Mathematice, np:

Funkcje_1.gif

Funkcje_2.gif

podobnie dodajemy trzy symbole:

Funkcje_3.gif

Funkcje_4.gif

Teraz chcemy napisać funkcję która dodaje trzy składniki, np: x, y, z. Standardowa składnia wygląda następująco:

Funkcje_5.gif

Podsumowanie składni:
dodaj3        - nazwa funkcji     
[]         - argumenty funkcji zawsze w nawiasach kwadratowych
x_         - pierwszy argument składa się z nazwy (x) i symbolu podkreślenia (_)
:=          - symbol dwukropek i ,,równa się’’ poprzedza definicję funkcji
x+y+z         - to co funkcja ma zrobić: dodać trzy symbole
Przykładowe wywołanie funkcji:

Funkcje_6.gif

Funkcje_7.gif

Funkcje_8.gif

Funkcje_9.gif

Warto zwrócić uwagę na fakt, iż funkcja która dodaje 3 (i dowolną ilość) symboli istnieje już w Mathematice : jest to Plus:

Funkcje_10.gif

Funkcje_11.gif

Powyższa sytuacja zdarza się często, gdyż Mathematica posiada bardzo rozbudowany język. Czasem szybciej jest napisać jednak własną funkcję, niż doszukać się jej w dokumentacji. Innym powodem pisania własnych funkcji może być chęć ich np. przyspieszenia.

Inne sposoby definiowania funkcji:

Funkcje_12.gif

Funkcje_13.gif

Funkcje_14.gif

Funkcje_15.gif

Funkcje_16.gif

Funkcje_17.gif

Funkcje_18.gif

Funkcje_19.gif

Przykład: funkcja generująca losową sekwencję DNA.

Na początek sprawdzamy czy potrafimy wygenerować jeden losowy nukleotyd. Mozna to zrobić za pomocą RandomChoice (losowy wybór z listy). Każdorazowe wywołanie może dać inny wynik:

Funkcje_20.gif

Funkcje_21.gif

Teraz chcemy wygenerować listę np: 10 takich losowych nukleotydów, za pomocą Table:

Funkcje_22.gif

Funkcje_23.gif

Listę należy ,,posklejać’’ aby utworzyć jeden łańcuch tekstowy:

Funkcje_24.gif

Funkcje_25.gif

Można to zrobić na raz w ten sposób:

Funkcje_26.gif

Funkcje_27.gif

lub w ten:

Funkcje_28.gif

Funkcje_29.gif

lub jeszcze inaczej:

Funkcje_30.gif

Funkcje_31.gif

Nazwijmy funkcję wykonującą te czynności randomDNA. Jej ,,wnętrze’’ (ang. body, ciało) najprościeś wkleić metodą Ctrl+C Ctrl+V.

Funkcje_32.gif

Funkcje_33.gif

Funkcje_34.gif

Nieco bardziej skomplikowana funkcja rozwiązująca podpunkt (a) Zad. 1 z Zestawu 1. Funkcja sprawdza czy podano jej jako argument łańcuch tekstowy ( _?StringQ), i zawiera 5 zmiennych wewnętrznych (dlugosc, czestoscA, czestoscC, czestoscG, czestoscT), tj. niewidocznych poza ,,ciałem’’ funkcji:

Funkcje_35.gif

Funkcje_36.gif

Funkcje_37.gif

Funkcje_38.gif

Funkcje_39.gif

Funkcje_40.gif

Funkcje_41.gif

Funkcje_42.gif

Funkcje_43.gif

Funkcje_44.gif

Funkcje_45.gif

Funkcje_46.gif

Od momentu napisania i przetestowania funkcji, możemy ją uzywać podobnie jak funkcji wbudowanych. Poniższy wykres pokazuje jak zmienia się częstość występowania nukleotydów na początku chromosomu.

Funkcje_47.gif

Funkcje_48.gif

Funkcje_49.gif

Funkcje_50.gif

Funkcje_51.gif

Funkcje_52.gif

Funkcje_53.gif

Funkcje_54.gif

Funkcje_55.gif

Funkcje_56.gif

Funkcje_57.gif

Spikey Created with Wolfram Mathematica 7.0