Do sada smo vidjeli kako se koristiti raznim funkcijama vec ugradjenim u Mathematicu - sada cemo vidjeti kako definisati sopstvene funkcije u ovom programskom paketu ! ;

Kao prvi primjer posmatrajmo funkciju zvanu f koja kvadrira svoj argument ; Komanda u Mathematici za kreiranje ove funkcije je ;

f[x_] := x^2

f[a + 1]

(1 + a)^2

f[4]

16

Expand[f[x + 1 + y]]

1 + 2 x + x^2 + 2 y + 2 x y + y^2

? f

Global`f

f[x_] := x^2

? Expand

Expand[expr] expands out products and positive integer powers in expr. Expand[expr, patt] leaves unexpanded any parts of expr that are free of the pattern patt. More…

Clear[f]

Imena kao sto je f koje koristite za funkcije u Mathematici su samo simboli - zbog ovoga, treb ... cim funkcijama !  Takodjer budite sigurni da ne definisete dvije stvari sa istim imenom !

Funkcije u Mathematici mogu imati bilo koji broj argumenata ;

grba[x_, xmax_] := (x - xmax)^2/xmax

Sada mozete koristiti funkciju "grba" kao bilo koju funkciju u matematici !

RowBox[{2, +, RowBox[{grba, [, RowBox[{x, ,, 3.5}], ]}]}]

RowBox[{2, +, RowBox[{0.285714,  , RowBox[{RowBox[{(, RowBox[{RowBox[{-, 3.5}], +, x}], )}], ^, 2}]}]}]

grba[x_, x_max] := (x - xmax)^4  

? grba

Global`grba

grba[x_, x_max] := (x - xmax)^4

Ovim smo prebrisali staru funkciju grba i pripisali joj novu vrijednost !

Clear[grba]

U mnogim kalkulacijama i programiranju, vidjecete da cete mnoge stvari ... i vise puta, sto moze postati zamorno - stoga mozete definisati funkcije koje vam skracuju posao !

Expand[Product[x + i, {i, 1, 3}]]

6 + 11 x + 6 x^2 + x^3

Expand[Product[x + i, {i, 1, 4}]]

24 + 50 x + 35 x^2 + 10 x^3 + x^4

exprod[n_] := Expand[Product[x + i, {i, 1, n}]]

exprod[3] exprod[4]

(6 + 11 x + 6 x^2 + x^3) (24 + 50 x + 35 x^2 + 10 x^3 + x^4)

Mozete imati vise linija u svojim funkcijama, sve  dok su odvojene tacka - zarezima ";"

cex[n_, i_] := (t = exprod[n] ;             Coefficient[t, x^i])

? cex

Global`cex

cex[n_, i_] := (t = exprod[n] ; Coefficient[t, x^i])

Rezultat koji dobivate od cijele funkcije je jednostavno koeficient koji se nalazi uz clan x^i u proizvodu (x + 1) (x + 2) ... (x + n)

exprod[6] cex[6, 4]

720 + 1764 x + 1624 x^2 + 735 x^3 + 175 x^4 + 21 x^5 + x^6

175

Dobra ideja u programiranju generalno je da varijable koje samo koristite interno u definisanj ...  postici ako definisete svoje programe kao MODULE, u kojima dajete listu varijabli koje su lokalne

t

720 + 1764 x + 1624 x^2 + 735 x^3 + 175 x^4 + 21 x^5 + x^6

Dakle u slucaju  funkcije "cex", varijabla t je "pobjegla" izvan ... OBAVEZNO definisite lokalne varijable takvim, osim ako nemate jako dobar razlog da to NE ucinite !

ncex[n_, i_] := Module[{u}, u = exprod[n] ; Coefficient[u, x^i] ]

ncex[6, 4]

175

u

u

Postoji nekoliko nacina da ponovite neku operaciju vise puta ! Cesto najprirodniji nac ... ot;Do" koristi standardnu iteratorsku notaciju kao kod funkcija Sum ili Product (vidi HELP !)

? Do

Do[expr, {imax}] evaluates expr imax times. Do[expr, {i, imax}] evaluates expr with the variab ... jmin, jmax}, ... ] evaluates expr looping over different values of j, etc. for each i. More…

? Sum

Sum[f, {i, imax}] evaluates the sum of the expressions f as evaluated for each i from 1 to ima ...  Sum[f, {i, imin, imax}, {j, jmin, jmax}, ... ] evaluates a sum over multiple indices. More…

? Product

Product[f, {i, imax}] evaluates the product of the expressions f as evaluated for each i from  ... [f, {i, imin, imax}, {j, jmin, jmax}, ... ] evaluates a product over multiple indices. More…

Do[izraz, {i, imax}]     -   izracunaj izraz gdje i ide od vrijednost ... z, {i, imax}]    -   napravi listu vrijednosti izraza gdje i ide od 1 do imax

Do[Print[i !], {i, 5} ]

1

2

6

24

120

Table[i !, {i, 5}]

{1, 2, 6, 24, 120}

r = 1 ; Do[r = 1/(1 + r), {100} ] ; r

573147844013817084101/927372692193078999176

Neka transformacijska pravila za funkcijePrimjetiti - mozemo koristiti konstrukciju "->"kako bismo zamijenili neki simbol sa nekom vrijednoscu

1 + x/.x3

4

Istu stvar mozemo uraditi u funkcijama

1 + f[x] + f[y]/.x3

1 + f[3] + f[y]

Takodjer mozemo napraviti transformacijsko pravilo na citav f[x] - primjetite da to ne utice na f[y]

1 + f[x] + f[y]/.f[x] p

1 + p + f[y]

Ali ako ZELIMO promjeniti funckiju za SVE vrijednosti, koristimo f[t_] sto oznacava f sa bilo kojim argumentom

1 + f[x] + f[y]/.f[q_] q^2

1 + x^2 + y^2

1 + f[x] + f[y]/.f[t_] t

1441 + 3528 x + 3248 x^2 + 1470 x^3 + 350 x^4 + 42 x^5 + 2 x^6


Created by Mathematica  (November 7, 2007)