You are on page 1of 68

UNIVERZITET U SARAJEVU

PRIRODNO-MATEMATIKI FAKULTET
ODSJEK ZA MATEMATIKU

Dr. eljko Juri:

Interaktivna raunanja u
programskom paketu
Mathematica
/ skraena

verzija /

Prirunik za laboratorijske vjebe na predmetu


Raunarski sistemi

Februar, 2006.

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

1. Uvod
U matematikoj praksi se u sve veoj mjeri upotrebljavaju takozvani algebarski raunarski paketi,
meu kojima je Mathematica firme Wolfram Research Inc. vjerovatno najmoniji. Rad na ovom
programu zapoeo je Stephen Wolfram prije skoro 30 godina, i on se do dananjeg dana neprestano
usavrava. Pomou njega moemo lako rjeavati sloene matematike zadatke ak i na relativno slabim
raunarima. Oblasti matematike koje su pokrivene ovim paketom ukljuuju numeriki prorauni
proizvoljne tanosti, sreivanje algebarskih izraza, linearna algebra, apstrakna algebra (teorije grupa i
polja), teorija brojeva, razne oblasti analize (simboliko i numeriko diferenciranje i integriranje,
rjeavanje diferencijalnih jednaina, itd.), rjeavanje jednaina i sistema jednaina, itd.
Paket Mathemtatica posjeduje i naredbe za grafiku. Sa tim naredbama lako crtamo, na primjer,
grafike funkcija. Grafove funkcija jedne promjenljive moemo predstaviti u Dekartovim ili polarnim
koordinatama, a mogu biti zadane i u parametarskom ili implicitnom obliku. Graf funckija dvije
promjenljive moe se prikazati kao povr u prostoru. Grafiki se mogu predstaviti i krivulje u
trodimenzionalnom prostoru. Pored toga, postoje i druge mogunosti prikazivanja funkcionalnih veza,
kao to su dijagrami, itd. Posebno je mogue zadati i grafike atribute, npr. kakav je oblik, debljina i
boja linija, tip i veliina oznaka na grafikonu, itd. Pri prostornom predstavljanju objekata moe se
podeavati lokacija izvora svjetlosti, njihova boja, itd. Grafiki izvjetaji mogu se lako izvoziti kao
datoteke razliitih oblika, na primjer postscript datoteke, bit-mapirane slike, ili kao datoteke za ispis na
tampau. Takoe je mogue grafike ispise prebacivati u druge dokumente (npr. dokumente kreirane sa
Microsoft Word-om).
Pored svega navedenog, programski paket Mathematica takoer ukljuuje i vlastiti programski
jezik interpreterskog tipa, tako da je mogue kreiranje vlastitih programskih modula i biblioteka, pa ak i
kompletnih matematikih aplikacija. Pored osnovnih kontrolnih struktura koje se susreu u skoro svim
programskim jezicima (IF THEN ELSE, FOR, WHILE itd.), jezici ugraeni u raunarske algebarske
sisteme imaju posebne mogunosti za simboliko programiranje. Ipak, namjera ovog prirunika nije
uvoenje u programiranje u paketu Mathematica, s obzirom da bi za tako neto bio potreban mnogo vei
prostor. Ovaj prirunik objanjava samo interaktivna raunanja, u kojem korisnik samo postavlja
problem koji eli rijeiti, koristei odgovarajuu sintaksu, i odmah dobija rjeenje. Ovakav interaktivni
rad ogranien je samo na onu klasu problema za koje Mathematica apriori zna rijeiti, bez potrebe za
pisanjem specijalnih programa. Meutim, vidjeemo da je klasa takvih problema izuzetno iroka. Pored
toga, ograniiemo se samo na prikaz mogunosti ije matematiko razumijevanje ne prelazi znanje
studenta prve godine studija matematike. Koritena verzija je Mathematica 5.0 (koja je u vrijeme pisanja
ovog prirunika bila najnovija verzija), mada e veina opisanih stvari raditi i u verzijama 4.0 i 3.0.

2. Transakcije u programskom paketu Mathematica


Kada se pokrene programski paket Mathematica, ono to korisnik ugleda na ekranu predstavlja
samo jedan dio programskog paketa Mathematica, koji se naziva radno okruenje (Mathematica
FrontEnd). Radno okruenje prihvata komande od korisnika i prikazuje rezultate izraunavanja u formi
podesnoj za korisnika, koje korisnik po potrebi moe dalje ureivati i oblikovati. Radno okruenje
takoer posjeduje mnoge karakteristike tekst procesora, odnosno programa za obradu teksta, tako da je
pogodan i za ureivanje i oblikovanje matematikih dokumenata. Meutim, stvarna izraunavanja
obavlja posve drugi program, nazvan Mathematica Kernel. Ovaj program se moe pokrenuti zasebno, ali
za time nema osobite potrebe, jer se Mathematica Kernel automatski poziva iz Mathematica
FrontEnd-a) prvi put kada korisnik zatrai bilo kakvo izraunavanje, i ostaje aktivan u pozadini sve do
zavretka rada sa paketom Mathematica.
Nakon pokretanja paketa Mathematica, pred korisnikom se ukazuje prazan dokument koji emo
zvati biljenica (engl. notebook). Rad u biljenici odvija se slino kao u svakom editoru teksta. Posebno,
pritisak na tipku |Enter| na alfanumerikom (slovnom) dijelu tastature vri pomjeranje kurzora u novi
red, kao to je uobiajeno. Meutim, pritisak na kombinaciju tipki |Shift| + |Enter| proizvodi sasvim
1

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

drugaiji efekat. Nakon pritiska na ovu kombinaciju tipki, tekst koji smo upravo ukucali Mathematica
FrontEnd alje Mathematica Kernel-u, koji tada vri njegovu evaluaciju (izvravanje, izraunavanje) i
alje rezultat izvravanja nazad Mathematica FrontEnd-u koji prikazuje rezultat izraunavanja. Ovu
seriju dogaaja nazivamo transakcijom. Na mnogim Mathematica sistemima umjesto kombinacije
|Shift| + |Enter| dovoljno je pritisnuti samo tipku |Enter| na numerikom dijelu tastature.
Cijeli rad sa paketom Mathematica odvija se u transakcijama: korisnik zadaje komandu (ili seriju
komandi), nakon ega pritie kombinaciju tipki |Shift| + |Enter|. Ukoliko je komanda ispravna, nakon
kraeg ili dueg vremena (zavisno od sloenosti komande) prikazuje se rezultat izvravanja komande.
Veina komandi u paketu Mathematica predstavljaju aritmetike izraze ili seriju izraza. Na primjer,
ukucajmo izraz
2+3
i pritisnimo |Shift| + |Enter| (ili, eventualno, tipku |Enter| na numerikom dijelu tastature). Kao rezultat, u
biljenici emo ugledati odgovor 5, odnosno biljenica e izgledati ovako:
In[1] := 2+3
Out[1] = 5

Ovim je obavljena jedna transakcija: zadali smo paketu Mathematica da izrauna koliko je 2+3, i
dobili smo odgovor 5. Komanda koju smo zadali (2+3) smjetena je ulaznu eliju, a rezultat
izraunavanja (5) u izlaznu eliju. Sve transakcije, ulazne i izlazne elije, oznaene su uglastim
zagradama uz desni rub dokumenta (biljenice), kao to je prikazano na sljedeoj slici:
Oznaka
ulazne elije
In[1] := 2+3
Out[1] = 5

Oznaka
transakcije

Oznaka
izlazne elije

Mathematica ulaze u svaku od transakcija (2+3 u prethodnom primjeru) uva u ulaznoj


transakcionoj listi nazvanoj In, a rezultate izvravanja transakcija u izlaznoj transakcionoj listi nazvanoj
Out. U kasnijem radu moemo se pozivati na sadraje ovih listi. Indeks u ulaznoj zagradi predstavlja
redni broj transakcije. Tako, In[1] oznaava da se radi o ulazu u prvu transakciju, a Out[1] oznaava da
se radi o rezultatu prve transakcije. Zadamo li novu komandu, npr. 5+6 i pritisnemo |Shift| + |Enter| u
biljenici e se pojaviti
In[2] := 5+6
Out[2] = 11

Indeks 2 govori da se radi o drugoj transakciji. Redni brojevi transakcija rastu za 1 nakon svake
obavljene transakcije, sve do zavretka rada sa tekuom biljenicom (ili do prelaska u novu otvorenu
biljenicu). Kasnije emo vidjeti zato je dodjela ulaznoj listi izvrena pomou znaka := a izlaznoj listi
pomou znaka =.
Redni brojevi transakcija ne moraju odgovarati prostornom razmjetaju transakcija u biljenici.
Naime, ukoliko izmijenimo sadraj neke ulazne elije, i ponovo pritisnemo |Shift| + |Enter|, rezultat
transakcije e prebrisati sadraj stare izlazne elije, i transakcija e dobiti novi broj. Na primjer, ukoliko
se vratimo na prvu ulaznu eliju, izmijenimo broj 3 u 30 (tj. tako da komanda postane 2+30) i pritisnemo
|Shift| + |Enter|, u biljenici e se na mjestu gdje se nalazila prva transakcija pojaviti sljedei prikaz:
In[3] := 2+30
Out[3] = 32

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

Dakle, transakcija je oznaena rednim brojem 3, mada se ona u biljenici sada nalazi ispred transakcije
sa rednim brojem 2.
Moe se desiti da jedna transakcija kao rezultat proizvede vie izlaznih elija. Tako je, na primjer,
mogue zadati itav niz komandi u jednoj ulaznoj eliji pri emu se svaka komanda nalazi u posebnom
redu (to moemo postii pritiskom na samo |Enter|), a zatim odjedamput izvriti sve komande pritiskom
na |Shift| + |Enter|. Na primjer:
2+3
4+11
3*8
Out[4] = 5
Out[5] = 15
Out[6] = 24
In[4] :=

Isto tako, jedna jedina komanda moe kao rezultat proizvesti vie od jedne izlazne elije, kao u
sljedeem primjeru (ne obraajte panju to ne razumijete komandu, bitno je da uoite pojavu vie
izlaznih elija):
In[7] :=

Do[Print[i*i],{i,5}]

1
4
9
16
25
Takoer, moe se desiti da komanda ne proizvede ni jednu izlaznu eliju kao rezultat, kao u sljedeem
primjeru:
In[8] :=

cijena:=10

U svakom sluaju, uvijek je mogue editirati sadraj ve postojeih ulaznih elija koristei kurzorske
tipke, obiljeavanje, brisanje, komande Cut, Copy i Paste iz Edit menija, itd. na slian nain kao u
programima za obradu teksta. Takoer je mogue kopirati dio sadraja jedne elije u drugu eliju ili u
prazan prostor u biljenici. Kad god elimo da zaponemo novu transakciju, dovoljno je da kliknemo
miem ispod posljednje transakcije (prostorno gledano) u biljenici.
Da bismo izbrisati neku eliju (ulaznu ili izlaznu), miem oznaimo odgovarajuu uglastu zagradu
uz desni rub dokumenta i pritisnemo tipku |Delete| na tastaturi. Mogue je i odjednom obrisati itavu
transakciju ukoliko ozaimo uglastu zagradu koja obiljeava transakciju. Takoer je mogue miem
obiljeiti vie elija i/ili transakcija i obrisati ih odjedanput.
Sadraj izlaznih elija nije mogue direktno mijenjati (editirati). Ukoliko probamo da editiramo
sadraj neke izlazne elije, bie kreirana nova prazna elija neposredno ispod razmatrane izlazne elije
(a neposredno iznad sljedee ulazne elije), u koju e biti prepisan sadraj razmatrane izlazne elije.
Naknadni pritisak na |Shift| + |Enter| bie tretiran kao nova transakcija. Na primjer, vratimo li se na
izlaznu eliju Out[2] i pokuamo na rezultat 11 dopisati +4, dobiemo situaciju koja izgleda kao na
sljedeoj slici:
In[2] := 5+6
Out[2] = 11

11+2
Pritisak na |Shift| + |Enter| kreira novu transakciju:
In[9] := 11+2
Out[9] = 13

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

Biljenicu snimamo na uobiajeni nain, pomou komande Save iz menija File. Kada sljedei put
ponovo pokrenemo paket Mathematica i uitamo ranije snimljenu biljenicu, potrebno je svaku
transakciju ponovo evaluirati pritiskom na |Shift| + |Enter| da bi ona zaista bila izvrena. To nije nita
neobino s obzirom da Mathematica nije kompajler nego interpreter: bilo kakav program unesen u radno
okruenje paketa Mathematica se ne prevodi u izvrni kod! Alternativno, moemo iz menija Evaluate
izabrati komandu Evaluate Notebook koja e ponovo evaluirati sve transakcije pohranjene u biljenici,
redom jednu po jednu.
U nastavku teksta vie neemo prikazivati oznake sa desne strane kojima se obiljeavaju granice
elija, osim kada bude potrebno neto posebno naglasiti. Takoer, brojeve transakcija u svakom novom
odjeljku zapoinjaemo od jedinice, mada oni u konkretnim sluajevima upotrebe paketa Mathematica
mogu biti posve razliiti. Za sve primjere koji budu navedeni podrazumijevae se da su izvravani u
navedenom redoslijedu, jer ponekad rezultat izvjesnih transakcija moe ovisiti od rezultata izrvavanja
prethodnih transakcija.

3. Manipulacije sa brojevima
Najelementarnija vrsta podataka u paketu Mathematica su cijeli brojevi. Za obavljanje etiri
osnovne raunske operacije sa brojevima koriste se operatori +, , * i /. Znakovi + i - mogu
se koristiti i za zadavanje predznaka broja. Mnoenje i dijeljenje imaju prioritet u odnosu na sabiranje.
Za promjenu prioriteta operacija mogu se koristiti zagrade, pri emu se bez obzira na neophodni broj
zagrada koriste iskljuivo male zagrade ( i ). Na primjer:
In[1] := 2+7*(166*(4+9*2))/4
Out[1] = 201

Opseg cijelih brojeva sa kojima Mathematica moe raditi ogranien je jedino kapacitetom
raspoloive memorije i u praksi iznosi vie stotina hiljada cifara. Na primjer:
In[2] := 3842366234123678354234234 * 723345678234123456234345
Out[2] = 2779359009646086917848666186402076501515725566730

Ukoliko su svi operandi cijeli brojevi, rezultat je takoer cijeli broj, osim u sluaju operacije
dijeljenja kada rezultat ne mora nuno biti cijeli broj. U tom sluaju rezultat se prikazuje u formi
skraenog razlomka p/q, tj. takvog razlomka da je NZD(p,q) = 1. Na primjer:
28/12
7
Out[3] =
3
In[3] :=

Vidimo da Mathematica omoguava taan rad sa razlomcima. Demonstrirajmo na primjeru malo


kompleksniji rad sa razlomcima:
In[4] := (7+4/(3+5))/(3*2/(4+6)1/(3+7/2))
Out[4] =

975
58

Unoenje viestrukih razlomaka pomou operatora / moe biti nepregledno. Stoga Mathematica
omoguava da se razlomaka crta unosi direktno sa tastature pomou kombinacije tipki |Ctrl| + | / |. Tako,
na primjer, moemo unijeti i sljedeu transakciju:
1 1

3 2
5
Out[5] =
6
In[5] :=

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

ili, transakciju koja je ekvivalentna pretposljednjoj transakciji (da unesemo razlomak iji je brojnik itav
izraz, prije nego to pritisnemo |Ctrl| + | / | moramo prethodno oznaiti odnosno markirati dio izraza koji
elimo da se pojavi u brojniku):
In[6] :=

Out[6] =

7 34 5
3 * 4 2 6

1
3 7
2

975
58

Mathematica e dati taan rezultat u formi razlomka jedino ukoliko su svi operandi cijeli brojevi ili
razlomci. S druge strane, ukoliko se u nekom broju pojavi decimalna taka, tada e Mathematica taj broj
tretirati kao aproksimativni realni broj. Ukoliko je makar jedan operand aproksimativni realni broj, itav
raun e se izvoditi aproksimativno (interno na oko 16 tanih cifara, dok e se krajnji rezultat prikazivati
sa 6 tanih cifara). Na primjer:
In[7] := 2.317 * 3.424
Out[7] = 7.93341
In[8] := 1.0/7
Out[8] = 0.142857

Zapravo, dovoljno je da se u broju pojavi decimalna taka (makar iza nje ne stajalo nita) da bi broj bio
shvaen kao aproksimativni broj:
In[9] := 1./7
Out[9] = 0.142857

Odavde vidimo da je jedan od naina da kao rezultat dobijemo decimalni broj a ne razlomak da
upotrebimo taku u makar jednom od operanada:
In[10] := (7.+4/(3+5)) / (3*2/(4+6)1/(3+7/2))
Out[10] = 16.8103

Kasnije emo vidjeti da ovo nije najbolji nain. Prvo, ovako ne moemo podeavati tanost rezultata, a
drugo, svi meurezultati se takoer raunaju aproksimativno, zbog ega postoji mogunost
nagomilavanja greke u sloenijim raunanjima.
Sljedei operator koji se esto koristi je operator stepenovanja ^. Na primjer:
In[11] := 2^50
Out[11] = 1125899906842624

Operator stepenovanja ima vei prioritet od mnoenja i dijeljenja, tako da je 2^3*4 isto to i
(2^3)*4, a ne 2^(3*4). Takoer, operator stepenovanja je asocijativan nadesno, tako da je 2^3^4 isto
to i 2^(3^4), a ne (2^3)^4. Umjesto operatora stepenovanja mogue je pisati izraz u obliku stepena sa
eksponentom, to je pomou tastature mogue postii pritiskom na kombinaciju tipki |Ctrl| + |6|:
50

In[12] := 2
Out[12] = 1125899906842624

Prilikom stepenovanja, rezultat e uvijek biti izraen kao taan broj sve dok su u izrazu upotrebljeni
samo tani brojevi (cijeli brojevi i razlomci). Meutim, rezultat esto moe da bude iracionalan broj.
Mathematica veliku klasu iracionalnih brojeva zna da zapamti tano (npr. sve algebarske brojeve, tj.
brojeve koji mogu biti nule nekog polinoma sa cjelobrojnim koeficijentima):
2^(1/2)
Out[13] = 2
In[13] :=

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

45^(1/2)
Out[14] = 3 5
In[14] :=

In[15] := 2^(1/7)
1/7
Out[15] = 2

U posljednjem primjeru, program je zakljuio da je najbolje ostaviti rezultat u izvornom obliku ukoliko
elimo da ga tretiramo kao taan broj. Naravno, jedan od naina (mada ne i najbolji) da dobijemo
aproksimativne rezultate je da kao neki od operanada upotrebimo aproksimativni broj:
In[16] := 2^(1/2.)
Out[16] = 1.41421
In[17] := 45 ^ .5
Out[17] = 6.7082
In[18] := 2. ^ (1/7)
Out[18] = 1.10409

Iz navedenih primjera vidimo i da se dio ispred decimalne take takoer smije izostaviti ukoliko je
jednak nuli (recimo, smijemo pisati .5 umjesto 0.5).
U sluaju da probamo izvriti nedozvoljenu operaciju, recimo 0/0, Mathematica e ispisati poruku
upozorenja. Poruke upozorenja su esto dosta udne, dok se korisnik ne navikne na njihovo tumaenje, s
obzirom da su posljedica naina na koji Mathematica interno predstavlja podatke i operacije nad njima.
Mathematica automatski podrazumijeva mnoenje na mnogim mjestima gdje bi se ono
podrazumijevalo u standardnoj matematici ukoliko se znak mnoenja izostavi. Na primjer, faktori ispred
zagrada mogu se pisati bez znaka mnoenja:
In[19] := 3(5+6)
Out[19] = 33
In[20] := (3+8)(5+4)
Out[20] = 99

U veini sluajeva Mathematica obian razmak ukoliko se nalazi izmeu operanada tretira kao
nevidljivi operator mnoenja, to moe djelovati pomalo neobino, ali emo vidjeti da je ovo svojstvo
jako praktino kod simbolikih raunanja koje emo uskoro upoznati:
In[21] := 2 3
Out[21] = 6

Pored osnovnih raunskih operacija, Mathematica poznaje i brojne matematike funkcije, poput
logaritamskih, trigonometrijskih, i drugih funkcija. Meutim, dok je u standardnoj matematici f(x)
sintaksa za raunanje vrijednosti funkcije f u taki x, u paketu Mathematica se umjesto obinih zagrada
koriste uglaste zagrade, odnosno f[x] da se izbjegnu eventualne konfuzije sa zagradama koje odreuju
prioritet operacija. Naime, u izrazu poput a(x+3) moe biti nejasno da li je to a to mnoi x plus 3 ili
funkcija a od x plus 3. Stoga je sintaksa za poziv funkcija u paketu Mathematica sljedea:
funkcija[argument]
Za funkcije koje imaju vie argumenata sintaksa je sljedea:
funkcija[argument1, argument2,...argumentN]
Mathematica poznaje nekoliko hiljada ugraenih funkcija, a postoji i mogunost da korisnik sam
definira svoje funkcije. Na primjer, jedna od ugraenih funkcija je funkcija Sqrt, koja rauna kvadratni
korijen svog argumenta:
6

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

In[22] := Sqrt[49]
Out[22] = 7

Sqrt[27]
Out[23] = 3 3
In[23] :=

In[24] := Sqrt[27.]
Out[24] = 5.19615

Mathematica pravi striktnu razliku izmeu malih i velikih slova. Tako se funkcija Sqrt ne moe
pisati kao sqrt ili SQRT. Na primjer:
In[25] :=

sqrt[9]
General::spell : Possible spelling error: new symbol name "sqrt" is similar to existing symbol "Sqrt".

Out[25] =

sqrt[9]

Paket Mathematica nije prepoznao funkciju sqrt i ostavio ju je neizraunatu, uz upozorenje da je


vjerovatno trebala da bude upotrijebljena funkcija slinog imena Sqrt. Treba zapamtiti da sve ugraene
funkcije paketa Mathematica (i svi drugi ugraeni simboli) imaju veliko poetno slovo, a ostala mala
slova, osim ukoliko se ime funkcije sastoji od vie rijei. U tom sluaju, poetno slovo svake rijei je
veliko, a izmeu rijei ne postoji razmak (npr. ArcSin). Ukoliko pogrijeimo u broju argumenata koje
funkcija zahtijeva, dobiemo takoer poruku o greci.
Mathematica poznaje i alternativnu sintaksu za pozivanje funkcija koje posjeduju jedan argument,
koja esto moe biti jako praktina, a to je sintaksa
argument // funkcija
Na primjer,
In[26] := 49 //
Out[26] = 7

Sqrt

U ovom sluaju funkcija se zadaje u postfiksnoj formi, slino kao to se funkcije zadaju kod veine
depnih kalkulatora, kada se oznaka funkcije zadaje tek nakon to se zada argument. Postfiksna forma
moe biti praktina kada se neka funkcija treba primijeniti na neki sloeniji izraz. Na primjer, izraz
poput
(7+4/(3+5))/(3*2/(4+6)1/(3+7/2)) // Sqrt
moe biti praktiniji i pregledniji od izraza
Sqrt[(7+4/(3+5))/(3*2/(4+6)1/(3+7/2))]
Takoer, prilikom formiranja kompozicije funkcija, kada se, recimo, na argument x primijenjuje prvo
funkcija f, zatim na njen rezultat funkcija g, a zatim na njen rezultat funkcija h, standardna matematika
notacija koristi zapis oblika h(g(f(x))). U paketu Mathematica ova kompozicija se moe prikazati na dva
meusobno ekvivalentna naina h[g[f[x]]] i x // f // g // h. Drugi nain esto moe biti prikladniji. Ipak,
treba voditi rauna da operator poziva funkcije // ima veoma nizak prioritet, nii od svih raunskih
operacija (poput sabiranja itd.), tako da se u izrazu poput 2+3//Sqrt funkcija Sqrt primjenjuje na itav
izraz 2+3 a ne samo na operand 3.
Slino kao to razlomke moemo unositi direktno sa tastature, mogue je i znak za korjenovanje
takoer unijeti direktno sa tastature koristei kombinaciju tipki |Ctrl| + |2|. Na primjer, moemo izvriti
sljedeu transakciju:
16 36 1

In[27] :=
Out[27] =

3
7

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

Veoma esto je potrebno iskoristiti ulaz u neku transakciju ili rezultat neke transakcije za dalja
izraunavanja. Za tu svrhu koriste se funkcije In i Out. Tako, In[n] predstavlja ulaz u n-tu transakciju,
dok je Out[n] rezultat n-te transakcije. Tako, na primjer, moemo pisati Out[1]+6*Out[3] (rezultat e
biti 187 ako su prva i trea transakcija bile onakve kakve su ovdje prikazane). Umjesto Out[n]
skraeno se moe pisati %n (npr. %1+6*%3). Sam znak % skraenica je za rezultat posljednje
transakcije, to se veoma esto koristi. Na primjer:
In[28] := 13*2795
Out[28] = 256
In[29] := Sqrt[%]
Out[29] = 16
In[30] := %^2
Out[30] = 256

Veoma vana funkcija je funkcija N, koja pretvara taan broj koji je proslijeen kao argument u
aproksimativni realan broj. Ova funkcija se esto koristi kada elimo da dobijemo rezultat iskazan u
obliku decimalnog broja. Na primjer:
In[31] := N[Sqrt[2]]
Out[31] = 1.41421

Funkcija N najee se koristi u postfiksnoj formi:


In[32] := Sqrt[2] //
Out[32] = 1.41421

In[33] := 1/7+3/6 // N
Out[33] = 0.642857

Mada se u posljednjem sluaju dobija isti rezultat kao primjenom izraza 1./7+3/6, izmeu ova dva izraza
je velika razlika. Naime, kod izraza 1/7+3/6 // N, prvo se izraunava izraz 1/7+3/6 kao taan broj (ime
se dobija rezultat 9/14), nakon ega se ovaj taan broj aproksimira priblinim decimalnim brojem. S
druge strane, kod izraza 1./7+3/6 sav raun vri se sa aproksimativnim brojevima, to kod sloenijih
prorauna moe dovesti do akumuliranja greke.
Funkcija N moe se upotrebiti i sa dva argumenta. Pri tome, drugi argument predstavlja broj tanih
cifara koje elimo da dobijemo u aproksimativnom rezultatu. Na primjer:
In[34] := N[1/19, 20]
Out[34] = .05263157894736842105
In[35] := N[Sqrt[2], 40]
Out[35] = 1.414213562373095048801688724209698078570

U ovim primjerima dobili smo 1/19 aproksimirano na 20 tanih cifara i 2 aproksimiran na 40


tanih cifara. Meutim, da bi se aproksimacija izvrila sa proizvoljnom tanou, prvi argument mora
biti taan broj ili aproksimativni broj vee preciznosti od one koja se trai, inae se aproksimacija ne
moe izvriti sa veom tanou, kao npr. u sljedeem primjeru:
In[36] := N[Sqrt[3.7], 30]
Out[36] = 1.92354

U ovom primjeru 3.7 je aproksimativni realni broj odreene fiksne tanosti, pa je i njegov korijen
izraunat aproksimativno kao broj iste tanosti, kojem je tanost nemogue poveati. Da bismo dobili
zahtijevanu tanost, sve to trebamo uraditi je da preformuliramo ovaj izraz tako da se u njemu ne
pojavljuju aproksimativni ve samo tani brojevi (drugim rijeima, da ne upotrebimo decimalnu taku):

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

In[37] := N[Sqrt[37/10], 30]


Out[37] = 1.92353840616713447518553629212

Mathematica poznaje veliki broj matematikih konstanti koje pamti kao tane brojeve, kao to su
npr. konstante i e, koje pri unosu moemo zadavati kao Pi i E, a koje se pri ispisu prikazuju kao
tani brojevi i :
In[38] := 2*Pi*Pi
2
Out[38] = 2

Naravno, primjenom funkcije N mogue je dobiti numerike aproksimacije:


In[39] := Pi*Pi // N
Out[39] = 19.7392
In[40] := N[Pi, 100]
Out[40] = 3.1415926535897932384626433832795028841971693993751058209749445923078164

062862089986280348253421170680
Ukoliko elimo, mogue je da umjesto simbola Pi direktno sa tastature unesemo znak .
Mathematica omoguava da se pomou tastature unese vie stotina razliitih znakova koji ne postoje na
tastaturi. Za tu svrhu se koristi tipka |Esc|: prvo se pritisne |Esc|, zatim se otkuca jedan ili vie
karakteristinih znakova, a zatim ponovo tipka |Esc|. Na primjer, da bi smo dobili znak , pritisnemo
prvo |Esc|, zatim slovo p, a nakon toga ponovo |Esc|, to emo skraeno pisati kao |Esc| p |Esc|. Na taj
nain moemo izvriti transakciju poput sljedee:
In[41] := // N
Out[41] = 19.7392
2

Slino, konstantu moemo unijeti kao |Esc| ee |Esc| (slovo e javlja se dva puta). Alternativno, sve
nestandardne simbole, kao i razlomke, korijene itd. mogue je unositi koristei odgovarajue palete
simbola iz menija, slino kao to se koriste opcije Insert Symbol ili Equation Editor u Microsoft Word-u.
Kompleksni brojevi takoer za sistem Mathematica ne predstavljaju nikakav problem. Imaginarna
jedinica zadaje se kao I, a prilikom ispisa prikazuje se kao simbol :
In[42] := (2+3I) (5+6I)
Out[42] = 8 + 27

Znak takoer moemo unijeti sa tastature, koristei kombinaciju |Esc| ii |Esc|.


Realni i imaginarni dio kompleksnog broja moemo izdvojiti pomou funkcija Re i Im. Funkcija
Conjugate daje konjugirano kompleksnu vrijednost kompleksnog broja, dok apsolutnu vrijednost
kompleksnog broja moemo dobiti pomou funkcije Abs (naravno, ova funkcija radi i sa realnim
brojevima):
In[43] := Abs[3+4I]
Out[43] = 5

(2+3I) (5+6I) // Re
28
Out[44] =
61
In[44] :=

In[45] := (2+3I) (5+6I)


Out[45] = 28.1603

// Abs // N

Trigonometrijske funkcije piu se redom kao Sin, Cos, Tan, Cot, Sec i Csc, a prihvataju argumente
u radijanima. Ukoliko elimo argument zadati u stepenima, moemo ga pomnoiti sa konstantom
Degree koja ima vrijednost /180:
9

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

Sin[Pi/3]
3
Out[46] =
2
In[46] :=

Sin[Pi/5]
1 1
(5 5 )
Out[47] =
2 2
In[47] :=

In[48] := Sin[90 Degree]


Out[48] = 1

Umjesto konstante Degree moemo koristiti i simbol sa istim znaenjem, koji moemo dobiti
pomou tastature koristei kombinaciju tipki |Esc| deg |Esc|:
In[49] := Sin[23] //
Out[49] = 0.39073

Sve funkcije koje Mathematica poznaje pokuavaju da kao rezultat daju taan broj ukoliko su kao
argumenti zadani tani brojevi. Ukoliko se kao rezultat ne moe dobiti taan broj, ili ukoliko je rezultat
izraen kao taan broj isuvie rogobatan, Mathematica ostavlja funkciju neizraunatu, osim ako smo
eksplicitno zatraili numeriku aproksimaciju pomou funkcije N:
In[50] := 2+3+Sin[2]
Out[50] = 5+Sin[2]

3*Cos[Pi/8]

Out[51] = 3 Cos
8
In[51] :=

In[52] := 3*Cos[Pi/8] //
Out[52] = 2.77164

Kasnije emo vidjeti kako moemo dobiti taan rezultat za npr. cos /8 izraen preko korijena.
Inverzne trigonometrijske (ciklometrijske) funkcije piu se kao ArcSin, ArcCos, ArcTan, ArcCot,
ArcSec i ArcCsc. Sve one vraaju rezultat u radijanima (u sluaju da elimo rezultat u stepenima,
uvijek moemo rezultat podijeliti konstantom Degree). Funkcija ArcTan moe se upotrebiti i sa dva
argumenta: ArcTan[x, y] rauna arkus tangens od y/x, ali uzimajui u obzir kvadrant u kojem lei taka
(x, y) u koordinatnom sistemu, tako da se dobija rezultat u opsegu od do (umjesto od /2 do /2).
Ova funkcija je korisna kada treba izraunati argument (polarni ugao) kompleksnog broja x + y .. Za istu
svrhu mogue je koristiti i funkciju Arg koja ima samo jedan argument kompleksan broj iji se
argument trai.
Hiperbolne funkcije piu se kao Sinh, Cosh, Tanh, Coth, Sech i Csch, a njima inverzne funkcije
(area funkcije) kao ArcSinh, ArcCosh, ArcTanh, ArcCoth, ArcSech i ArcCsch.
Logaritamska funkcija Log moe se upotrebiti sa jednim argumentom, ili sa dva argumenta. U
prvom sluaju, podrazumijeva se baza e, a u drugom sluaju prvi argument predstavlja bazu a drugi
logaritmand. Rezultat se uvijek svodi na bazu e, osim ukoliko se rezultat moe iskazati tano, ili ukoliko
je zatraena numerika aproksimacija:
Log[2, 3]
Log[3]
Out[53] =
Log[2]
In[53] :=

In[54] := Log[2, 3]
Out[54] = 1.58496

// N

10

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

In[55] := Log[2, 3.]


Out[55] = 1.58496
In[56] := Log[10, 1000]
Out[56] = 3

Inverzna funkcija funkciji Log je eksponencijalna funkcija Exp. Exp[x] je zapravo isto to i E^x.
Sve elementarne funkcije Mathematica zna izraunati i za kompleksne vrijednosti argumenata:
In[57] := Sqrt[5+12I]
Out[57] = 3 + 2
In[58] := %^2
Out[58] = 5 + 12
In[59] := Exp[2+ 9I] // N
Out[59] = 6.73239 + 3.04517

Isto vrijedi i za veinu drugih funkcija (preciznije, za sve funkcije koje se mogu smisleno definirati za
kompleksne argumente).
Operatori poput +, , *, /, ^ itd. koji stoje izmeu operanada zovu se infiksni operatori.
Postoje i prefiksni operatori koji stoje ispred operanada, kao i postfiksni operatori koji stoje iza
operanada. Primjer prefiksnog operatora je unarni minus za promjenu predznaka koji stoji ispred broja
(npr. 2). Najtipiniji primjeri postfiksnih operatora u paketu Mathematica su faktorijel ! i
polufaktorijel !!. Faktorijel n! je produkt svih prirodnih brojeva od 1 do n, dok je polufaktorijel n!!
produkt svih parnih odnosno neparnih brojeva od 2 do n odnosno od 1 do n, ovisno da li je n paran ili
neparan:
In[60] := 7!
Out[60] = 5040
In[61] := 7!!
Out[61] = 105

Treba voditi rauna da funkcija faktorijel raste veoma brzo:


In[62] := 150!
Out[62] = 57133839564458545904789328652610540031895535786011264182548375833179829

12484539839312657448867531114537710787874685420416266625019868450446635
59491959220665749425920957357789293253572904449624724054167907221184454
37122269675520000000000000000000000000000000000000
Zatraimo li numeriku aproksimaciju ovako velikog broja, kao rezultat emo dobiti broj prikazan u
eksponencijalnoj notaciji (isto vrijedi i za veoma male brojeve):
In[63] := % // N
262
Out[63] = 5.71338 10

Faktorijel od 1000000 ima 5565709 cifara, stoga bi ako zadate komandu poput 1000000! na rezultat
ekali poprilino dugo (ako bi raunar uope imao dovoljno memorije da izie na kraj sa tolikim
brojem). Kao indikator da je sistem Mathematica zauzet raunanjem rezultata neke transakcije, zagrada
koja ograuje ulaznu eliju te transakcije sa desne strane biljenice postaje podebljana i obojena
drugaijom bojom. Sve dok se izvoenje transakcije ne zavri, sistem Mathematica ne moe izvoditi
druge transakcije, mada je editiranje u biljenici mogue. Poto neke transakcije mogu potrajati veoma
dugo, postoji nain da se izvoenje transakcije obustavi. Za tu svrhu dovoljno je izabrati komandu Abort
evaluation iz menija Kernel (isti efekat moe se postii i kombinacijom tipki |Alt| + |.|). Umjesto
rezultata obustavljene transakcije ispisuje se simbol $Aborted:
11

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

In[64] := 1000000!
Out[64] = $Aborted

Ukoliko ova komanda ne pomogne, drastinija varijanta je izabrati komantu Quit kernel iz istog menija.
Ova komanda uklanja Mathematica Kernel iz memorije (do naredne transakcije) tako da e gotovo
sigurno pomoi u sluaju kada se Mathematica zaglavi. Nuspojava ove komande je to e numeracija
narednih transakcija ponovo poeti od jedinice, kao i to e ulazne i izlazne transakcione liste biti
izbrisane, s obzirom da se Mathematica Kernel mora ponovo pokrenuti. Stoga, ovu komandu treba
koristiti samo ukoliko Abort Evaluation ne pomogne. Ukoliko ne pomogne ni komanda Quit kernel (to
je zaista rijetkost), kao krajnje rjeenje moete snimiti sadraj biljenice (to je mogue i dok je raunanje
u toku), napustiti poptuno program, ponovo ga pokrenuti, i na kraju ponovo uitati sadraj biljenice.
U sljedeoj tablici navedene su jo neke od poznatijih matematikih funkcija koje Mathematica
poznaje. Neke od navedenih funkcija same za sebe nisu osobito korisne, ali se mogu lijepo upotrebiti
unutar sloenijih izraza, prilikom definiranja vlastitih funkcija, ili pri programiranju.
Floor[x]
Ceiling[x]
IntegerPart[x]
FractionalPart[x]
Round[x]
Quotient[x, y]
Mod[x,y]
Max[x1, x2, ...]
Min[x1, x2, ...]
GCD[x1, x2, ...]
LCM[x1, x2, ...]
Sign[x]
Binomial[n, k]
Multinomial[n, k1, k2, ...]
Prime[n]

Matematika funkcija x : daje kao rezultat najvei cijeli broj koji je


manji ili jednak od x.
Matematika funkcija x : daje kao rezultat najmanji cijeli broj koji je
vei ili jednak od x.
Daje kao rezultat cijeli dio broja x (pozitivni brojevi se zaokruuju
nanie, a negativni navie).
Daje kao rezultat decimalni dio broja x.
Daje kao rezultat x zaokruen na najblii cijeli broj.
Daje kao rezultat cijeli dio od kolinika x/y.
Daje kao rezultat ostatak cjelobrojnog dijeljenja x sa y.
Daje kao rezultat najvei od brojeva xi.
Daje kao rezultat najmanji od brojeva xi.
Daje kao rezultat najvei zajedniki djelilac brojeva xi, tj najvei broj x
sa svojstvom da su svi kolinici xi/x cijeli brojevi.
Daje kao rezultat najmanji zajedniki sadrilac brojeva xi, tj najmanji
broj x sa svojstvom da su svi kolinici x/xi cijeli brojevi.
Signum funkcija: rezultat je 1 ako je x>0, 1 ako je x<0 i 0 ako je x=0.
Za kompleksne argumente x rezultat je x/Abs[x].
Daje kao rezultat vrijednost binomnog koeficijenta "n nad k" koji se
koristi u kombinatorici i koji je jednak n! / (k! (nk)!).
Daje kao rezultat vrijednost multinomnog koeficijenta koji je jednak
n! / (k1! k2! ...).
Daje kao rezultat n-ti prost broj.

PrimePi[n]

-funkcija (n): daje kao rezultat broj prostih brojeva koji su manji ili
jednaki od n.

EulerPhi[n]

Euler-ova funkcija (n): daje kao rezultat broj prirodnih brojeva koji su
manji od n i koji su relativno prosti sa n.

DivisorSigma[n, k]

-funkcija k(n): daje kao rezultat sumu k-tih stepena svih djelilaca
broja n.
Daje kao rezultat ostatak pri dijeljenju broja xy sa n (ova funkcija radi
veoma brzo ak i u sluaju da je broj xy ogroman, i ima veliku primjenu
u kriptografiji).

PowerMod[x, y, n]

12

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

Fibonacci[n]

HarmonicNumber[n]
HarmonicNumber[n, k]

Daje kao rezultat n-ti Fibonaci-jev broj Fn (Fibonaci-jevi brojevi su


definirani induktivnom relacijom F1 = F2 = 1 i Fn = Fn1+Fn2, a mogu se
definirati ak i za sluaj kada n nije cijeli broj, to je u paketu
Mathematica uraeno).
Daje kao rezultat sumu harmonijskog reda 1/1+1/2+...+1/n.
Daje kao rezultat sumu hiperarmonijskog reda 1/1k+1/2k+...+1/nk.

Ukoliko bilo kojoj od funkcija zadamo argument izvan njenog domena, Mathematica e prosto
funkciju ostaviti neizraunatu (eventualno uz izdavanje poruke upozorenja):
In[65] := Prime[12.5]
Prime::intpp : Positive integer argument expected in Prime[12.5].
Out[65] =

Prime[12.5]

Pored rada sa individualnim brojevima Mathematica poznaje i rad sa listama. Lista je zapravo
ureeni niz drugih objekata (recimo, brojeva), koje emo nazvati elementi liste. Liste zadajemo tako to
njene elemente navedemo unutar vitiastih zagrada. Na primjer:
In[66] := {3, 9, 4, 5, 4}
Out[66] = {3, 9, 4, 5, 4}

U ovom sluaju sistem Mathematica je prosto ponovio listu koju smo mu zadali, to nije osobito
korisno. Mnogo korisnija je injenica da gotovo sve matematike funkcije koje Mathematica poznaje
prihvataju liste kao svoje argumente, pri emu se funkcija primjenjuje na svaki element liste
pojedinano:
In[67] :=

Sqrt[{3,9,4,5,4}]
{ 3 , 3, 2, 5 , 2}

Out[67] =

In[68] := % // N
Out[68] = {1.73205, 3, 2, 2.23607, 2}

Operatori poput +, , *, / i ^ mogu se primjenjivati i kada su operandi liste, pod uvjetom


da su obje liste jednake duine. U tom sluaju, operacije se vre nad odgovarajuim elementima obje
liste:
In[69] := {3, 9, 4, 5, 4} * {2, 6, 1, 3, 2}
Out[69] = {6, 54, 4, 15, 8}

Takoer, isti operatori mogu se primijeniti i kada je jedan argument broj a drugi lista. Tada se operacija
primjenjuje nad tim brojem i svakim od elemenata liste:
In[70] := 6 * {3, 9, 4, 5, 4}
Out[70] = {18, 54, 24, 30, 24}
In[71] := %/3
Out[71] = {6, 18, 8, 10, 8}
2

In[72] := %
Out[72] = {36, 324, 64, 100, 64}

16 / %
4 4 1 4 1
Out[73] = { ,
, ,
, }
9 81 4 25 4
In[73] :=

Kasnije emo vidjeti da elementi listi u paketu Mathematica ne moraju biti samo brojevi, nego bilo
kakvi objekti koje Mathematica, poznaje, pa tako i same liste. Tako je, na primjer, lista

13

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

{3, 4, {1, 2}, 5, {{2}, 3}, {}} sasvim legalna. Ova lista ima 6 elemenata: broj 3, broj 4, lista iji su
elementi brojevi 1 i 2, broj 5, lista iji su elementi lista iji je element 2 i broj 3, i konano, prazna lista.
Nad ovakvim sloenim listama takoer se mogu primjenjivati sve funkcije koje se mogu primjenjivati i
na proste liste. Specijalno, nad dvije sloene liste mogu se primjenjivati i binarne operacije, pod uvjetom
da su saglasne po strukturi. Na primjer:
In[74] := {3, {2, 5}, 4} + {5, {1, 2},
Out[74] = {8, {3, 7}, {7, 7, 5}}

{3, 3, 1}}

U ovom primjeru smo imali 3 + 5 = 8, {2, 5} + {1, 2} = {3, 7} i 4 + {3, 3, 1}={7, 7, 5}.
Mathematica poznaje i rad sa brojevima koji nisu zapisani u bazi 10. Brojeve zapisane u
proizvoljnom brojnom sistemu moemo pisati kao
baza ^ ^ eksponent
Na primjer, sljedei broj predstavlja broj (100101101)2 zapisan u binarnom sistemu (ija je dekadna
vrijednost 301):
In[75] := 2^^100101101
Out[75] = 301

U sluaju baza veih od 10, nedostajue cifre iznad 10 piu se kao slova abecede a, b, c itd. pri
emu se ravnopravno mogu koristiti mala ili velika slova. Na primjer, slijedei broj predstavlja
heksadekadni broj (2d3b)16:
In[76] := 16^^2d3b
Out[76] = 11579

Obrnuta pretvorba moe se ostvariti pomou funkcije BaseForm sa dva argumenta, koja ispisuje
vrijednost izraza datog prvim argumentom u bazi datoj drugim argumentom:
In[77] := BaseForm[301, 2]
Out[77] // BaseForm =

1001011012
In[78] := BaseForm[11579, 16]
Out[78] // BaseForm =

2d3b16
In[79] := BaseForm[2^^10110101 + 2^^11001011, 2]
Out[79] // BaseForm =

1100000002
U posljednjem primjeru smo zapravo izraunali zbir (10110101)2 + (11001011)2 i rezultat ponovo
prikazali u binarnom obliku. Primijetimo da u ovim primjernima u izlaznim elijama umjesto
uobiajenog Out[n] pie Out[n]//BaseForm. To je posljedica injenice da se sadraj izlazne elije
zapravo uva u dekadnom obliku, kako je i uobiajeno, a baza se koristi samo za potrebe ispisa, u ta se
lako moemo uvjeriti:
In[80] := %
Out[80] = 384

Funkcije poput BaseForm, koje samo utjeu na nain ispisa ali ne i na nain izraunavanja i pamenja
rezultata u izlaznoj listi nazivaju se funkcije omotai (engl. wrapper functions).

14

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

4. Upotreba promjenljivih i simboliko raunanje


Promjenljive predstavljaju jedan od fundamentalnih objekata u veini programskih jezika.
Promjenljive u paketu Mathematica pruaju znatno vie fleksibilnosti nego promjenljive u klasinim
programskim jezicima, stoga e im biti posveeno vie panje.
Promjenljive, slino promjenljivim u matematici, zapravo predstavljaju imena kojima su dodijeljene
odreene vrijednosti. U matematici su imena promjenljivih obino ograniena samo na jedno slovo, dok
se u sistemu Mathematica (kao i u klasinim programskim jezicima) imena promjenljivih mogu sastojati
od vie znakova. U sistemu Mathematica imena promjenljivih mogu se sastojati od slova engleskog
alfabeta i cifara, pri emu prvi znak ne smije biti cifra (npr. a2 je legalno ime, ali 2a nije). Pored
slova engleskog alfabeta i cifara dozvoljeni su jo neki specijalni znaci, ali u detalje neemo ulaziti. Ime
ne smije sadravati razmake. Velika i mala slova se razlikuju, tako da Abc i abc predstavljaju dva
razliita imena.
Promjenljivoj moemo dodijeliti vrijednost pomou operatora dodjele =. Tipian primjer
upotrebe operatora dodjele ima oblik ime = izraz. Na primjer:
In[1] := a=5
Out[1] = 5
In[2] := a+2
Out[2] = 7

Ovim je ime a postalo promjenljiva ija je vrijednost 5, i svaka upotreba imena a u raunu bie
zamijenjena sa vrijednou 5. Promjenljiva zadrava svoju vrijednost sve do nove dodjele, ili do brisanja
vrijednosti pomou naredbe Clear, o emu e biti govora kasnije. Primijetimo da je rezultat operatora
dodjele jednak upravo dodijeljenoj vrijednosti, to omoguava lanano dodjeljivanje, kao u sljedeem
primjeru:
In[3] := a=b=c=12
Out[3] = 12
In[4] := a+b*c
Out[4] = 156

Ukoliko elimo da sprijeimo ispisivanje rezultata izvravanja neke komande, komandu moemo
zavriti znakom taka-zarez (;). To je posebno vano prilikom kreiranja programa, jer bi, u
suprotnom, prilikom izvravanja programa bili ispisivani brojni meurezultati koji nas ne zanimaju. Na
primjer:
In[5] :=

a=20;

Rezultat nije ispisan. Meutim, lako se moemo uvjeriti da je dodjela a=20 ipak izvrena:
In[6] := a
Out[6] = 20

Znak ; takoer moe sluiti i kao separator koji omoguava da vie izraza (tipino u formi
komandi) zadamo u jednom redu. Takoer, prilikom dodjeljivanja, sa desne strane operatora dodjele
moe se nalaziti izraz, a ne samo brojana vrijednost:
In[7] := put = 300;
Out[7] = 50

vrijeme = 6; brzina = put/vrijeme

Vidimo da se u ovom sluaju prikazuje rezultat izvravanja samo posljednje komande. Da smo i
posljednju komandu zavrili taka-zarezom, ne bi bilo prikazano nita (mada bi sve dodjele bile ispravno
izvrene).
15

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

Ono u emu se algebarski raunarski sistemi kao to je Mathematica sutinski razlikuju od klasinih
programskih jezika kao to su Pascal, C, C++ itd. je mogunost rada sa promjenljivim koje nemaju
nikakvu definiranu vrijednost. U tom sluaju one se smatraju za simbole (to donekle odgovara pojmu
opeg broja u matematici). Mathematica automatski vri neka elementarna sreivanja nad izrazima koji
sadre simbole:
In[8] := y^5 + x*x + 2 + 5*x + x/x x*3
2
5
Out[8] = 3 + 2 x + x + y

U simbolikim rezultatima simboli se uvijek sortiraju po abecedi (tako da se umjesto y + x dobija


x + y, a umjesto y x dobija se x + y itd.). Takoer, lanovi sa niim stepenima simbola uvijek se nalaze
ispred lanova sa viin stepenima, a slobodni lanovi ispred lanova koji sadre simbole. Moemo
primijetiti da je sistem Mathematica automatski izvrio kraenje u izrazu x/x (tj. izvrio njegovu
zamjenu sa 1) mada je takvo kraenje dozvoljeno samo za x 0. Mathematica u ovakvim situacijama
podrazumijeva produenje po neprekidnosti, tj. u graninim takama definicionog podruja
podrazumijevaju se granine vrijednosti (tj. smatra se da je x/x = 1 bezuvjetno). Mada ova konvencija
moe ponekad da smeta, njome se izbjegava generiranje veoma sloenih izraza koji bi mogli da nastanu
ukoliko se ovakva kraenja ne bi vrila bezuvjetno.
Podsjetimo se da se znak mnoenja * u sistemu Mathematica moe zamijeniti razmakom, tj.
umjesto x * y moemo pisati samo x y. Razmak se moe i izostaviti ako to nee dovesti do zabune. Tako,
na primjer, moemo pisati 2x umjesto 2 * x ili 2 x, ali ne moemo pisati xy umjesto x * y, jer e xy biti
shvaeno kao jedna promjenljiva sa imenom xy . S druge strane, x y moemo pisati umjesto produkta
x * y.
Ukoliko je potrebno da uklonimo vrijednost koju posjeduje neka promjenljiva (tj. da je pretvorimo u
simbol bez vrijednosti), moemo koristiti funkciju Clear kod koje u uglastim zagradima navodimo ime
promjenljive ili popis imena razdvojen zarezima kojima briemo vrijednosti. Na primjer:
In[9] :=

Clear[a,b,c]

Funkcija (naredba) Clear ne daje nikakav rezultat. Nakon ove naredbe promjenljive a, b i c (koje
su ranije imale vrijednost) postaju ponovo simboli bez vrijednosti:
In[10] := a+b+c
Out[10] = a+b+c

Promjenljive u paketu Mathematica mogu uvati daleko sloenije strukture podataka nego u
klasinim programskim jezicima (poput Pascal-a, C-a, C++-a, itd.), kao to su liste, matrice, skupovi,
algebarski izrazi, pa ak i grafikoni, crtei, geometrijski objekti itd. Tako, promjenljiva u sebi moe
uvati izraz u kojem se javljaju simboli, odnosno druge nedefinirane promjenljive. Na primjer,
promjenljiva x moe kao svoju vrijednost sadravati izraz (a+b)/(ab) gdje su a i b nedefinirane
promjenljive. Ilustrirajmo ovo na jednom primjeru:
In[11] :=

x=a+b3; y=ab;

In[12] := x+y
Out[12] = 3 + 2 a

Izrazi mogu pored nedefiniranih promjenljivih sadravati i nedefinirane funkcije. Naravno,


Mathematica ne moe izraunati vrijednost nedefiniranih funkcija, stoga ih ostavlja neizraunate, ali
moe izraunati ostatak izraza koji eventualno sadri nedefiniranu funkciju. Na primjer:
In[13] := 7+2*funkc[5+3*6]4
Out[13] = 3 + 2 funkc[23]

U navedenom primjeru nedefinirana funkcija je funkcija funkc.


16

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

Zbog mogunosti da promjenljive sadre simbolike izraze koji ne moraju imati definirane
vrijednosti, paket Mathematica posjeduje dva operatora dodjele: operator trenutane dodjele = i
operator zakanjele dodjele :=. Kod operatora trenutane dodjele, sa desne strane operatora dodjele
izraunava se sve to se moe izraunati (eventualne nedefinirane vrijednosti ostaju neizraunate), i
nakon toga, izraunati objekat dodjeljuje se lijevoj strani. Kod operatora zakanjele dodjele, desna strana
se dodjeljuje lijevoj strani neizraunata (tj. u promjenljivoj se uva kompletan izraz, a ne njegova
vrijednost). Izraz u promjenljivoj izraunava se tek onog trenutka kada se ta promjenljiva upotrebi u
nekom drugom izrazu. Da bismo vidjeli kakva je razlika izmeu ove dvije dodjele, razmotrimo sljedei
primjer:
In[14] :=

a=10; x=a+b+2; y:=a+b+2;

In[15] := x
Out[15] = 12+b
In[16] := y
Out[16] = 12+b

Na prvi pogled bi se moglo uiniti da obje promjenljive x i y imaju isti sadraj (12+b).
Meutim, taj zakljuak je netaan: sadraj promjenljive x je zaista 12+b, jer je zbir a+2 (koji je u
trenutku dodjele iznosio 12) izraunat odmah prilikom dodjele, dok je sadraj promjenljive y a+b+2
(preciznije, 2+a+b zbog naina na koji Mathematica sortira izraze), a vrijednost promjenljive a
uvrtena je tek kada je promjenljiva y upotrijebljena. Ovo postaje oigledno ako promijenimo sadraj
promjenljive a (ili, jo oiglednije, ako izbriemo njen sadraj):
a=15;
x
y
Out[17] = 12+b
Out[18] = 17+b
In[17] :=

Clear[a];
x
y
Out[19] = 12+b
Out[20] = 2+a+b
In[19] :=

Bitno je napomenuti da se naknadna izraunavanja prilikom upotrebe promjenljivih vre ak i u


sluaju promjenljivih koje su definirane operatorom = ukoliko je u njima ostalo nedefiniranih simbola.
Na primjer, vrijednost promjenljive x sadri nedefinirani simbol b ija e vrijednost biti uvrtena
prilikom upotrebe promjenljive:
b=4;
x
y
Out[21] = 16
Out[22] = 6+a
In[21] :=

a=5;
x
y
Out[23] = 16
Out[24] = 11
In[23] :=

Pri radu sa promjenljivim, obino se koristi operator trenutane dodjele. Operator zakanjele dodjele se
koristi samo iznimno, kada za to postoje posebni razlozi.

17

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

Nakon izloenog, postaje jasno zbog ega Mathematica elemente ulazne transakcione liste
automatski dodjeljuje pomou operatora := a elemente izlazne transakcione pomou operatora =:
ulazna transakciona lista uva neizraunate ulaze u transakciju, dok izlazna transakciona lista uva
izraunate rezultate transakcija. Sljedei primjer jasno ilustrira razliku (u sluaju da brojevi transakcija
ne odgovaraju primjeru, argumente funkcija In i Out potrebno je izmijeniti u skladu sa konkretnim
brojevima transakcija):
In[25] :=

a=10; Clear[b];

In[26] := a+b
Out[26] = 10+b
In[27] :=

a=15;

In[28] := In[26]
Out[28] = 15+b
In[29] := Out[45]
Out[29] = 10+b

Zapravo, svaka upotreba In[n] u nekom izrazu dovodi do ponovnog izraunavanja ulaza u n-tu
transakciju, u skladu sa trenutnom situacijom.
Treba obratiti panju na injenicu da se u dodjeli tipa ime = izraz prvo izraunava izraz sa desne
strane, pa se tek tada vri dodjela. Stoga, izraz sa desne strane moe sadravati ak i isto ime koje se
nalazi sa lijeve strane, pri emu se prilikom izraunavanja koristi vrijednost tog imena prije dodjele. Na
primjer:
In[30] := a=5
Out[30] = 5
In[31] := a=a+2
Out[31] = 7
In[32] := a
Out[32] = 7

Naizgled besmisleni izraz poput a = a + 2 ne treba posmatrati kao a je jednako a plus 2 (to je
oito besmislica), nego kao imenu a dodjeljujemo staru vrijednost imena a plus 2 odnosno nova
vrijednost od a postaje stara vrijednost od a plus 2, to moemo prosto iskazati i kao vrijednost od a se
poveava za 2. Kako se u radu esto javlja potreba da se neka promjenljiva povea ili smanji za neku
vrijednost, odnosno pomnoi ili podijeli sa nekom vrijednou, Mathematica je uvela posebne operatore
+=, =, *= i /= (koji su preuzeti iz programskih jezika C i C++). Tako, x += y, x = y, x *= y i
x /= y predstavljaju respektivno skraenice za fraze x = x + y, x = x y, x = x * y i x = x / y. Matematiki
istunci e rei da je ovakav zapis matematiki konzistentniji, jer ne asocira na jednakost veliina koje
ne mogu biti jednake. Na taj nain, umjesto matematiki sumnjive naredbe a = a + 2 koju smo koristili
da poveamo vrijednost promjenljive a za 2, isti efekat moemo postii naredbom a += 2. Takoer,
umjesto x+=1 odnosno x=1 moemo pisati x++ odnosno x .
Bitno je napomenuti da naredbe poput x = x + 1 (odnosno x += 1 ili ++x) imaju smisla samo ukoliko
je x zaista bila promjenljiva koja posjeduje vrijednost, a ne simbol bez vrijednosti. U suprotnom moemo
dobiti posve neoekivane rezultate, obino praene porukama o greci. Takoer je veoma bitno shvatiti
da se dodjela mora shvatiti kao imperativ u kojem se desna strana eksplicitno dodjeljuje lijevoj strani.
Stoga, dodjela poput 5=x nije legalna (mada je dodjela x=5 posve legalna), jer pokuava da dodijeli
simbol x broju 5, to oito nije mogue objekat 5 spada u tzv. sirove objekte, ija je vrijednost
nepromjenljiva, tj. onakva je kakva je:

18

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

In[33] :=

5=x
Set::setraw : Cannot assign to raw object 5.

Out[33] =

Iz istog razloga, nemogue je izvriti i dodjelu poput 5 = x+3, a pogotovo ne moemo oekivati da
bi takva dodjela mogla rezultirati da vrijednost promjenljive x postane 2. Dakle, znak = ne smijemo
shvatiti kao znak matematike jednakosti, niti izraz 5 = x + 3 kao matematiku jednainu (posebno,
vidjeli smo da operator =, za razliku od matematike jednakosti, nije komutativan). Ukoliko nam je cilj
bio da rijeimo jednainu 5 = x + 3, to trebamo uraditi na drugaiji nain, o emu emo govoriti
kasnije. Dodjela poput x + 3 = 5 takoer nije dobra, jer pomou nje Mathematica pokuava da dodijeli
vrijednost 5 izrazu x + 3, a ne vrijednost 2 (tj. 5-3) promjenljivoj x:
In[34] :=

x+3=5
Set::write : Tag Plus in 3+x is Protected.

Out[34] =

Poruka upozorenja je u ovom sluaju drugaija, ali takoer ukazuje da dodjela nije legalna. Uglavnom,
poruke Set::setraw ili Set::write najei su pokazatelji da smo pokuali izvriti nekorektnu dodjelu.
Nema nikakvog razloga da ne moemo nekoj promjenljivoj dodijeliti listu vrijednosti. Liste mogu
sadravati i simbolike izraze. Na primjer:
In[35] := lista = {3, 5,{1, 2}, x+1, {2, {x , 0}}, x+y}
2
Out[35] = {3, 5, {1, 2}, 1+x, {2, {x , 0}}, x+y}
2

In[36] := lista
2
4
2
Out[36] = {9, 25, {1, 4}, (1+x) , {4, {x , 0}}, (x+y) }
2

In[37] := {lista, lista }


2
Out[37] = {{3, 5, {1, 2}, 1+x, {2, {x , 0}}, x+y},

{9, 25, {1, 4}, (1+x)2, {4, {x4, 0}}, (x+y)2}}

Kasnije emo vidjeti kako iz listi moemo izdvajati pojedine dijelove.


Dodjela koja se vri pomou operatora = i := je trajna, u smislu da vrijedi sve do nove dodjele,
ili eksplicitnog brisanja naredbom Clear. Ponekad je, meutim, mnogo poeljnije nekom simbolu
dodijeliti vrijednost privremeno, preciznije samo dok traje izraunavanje nekog izraza. Na primjer,
pretpostavimo da elimo da izraunamo vrijednosti izraza (3+2 x) (2+x)2 za nekoliko razliitih
vrijednosti promjenljive x. Jedan od naina da to postignemo je sljedei:
In[38] :=

izraz := (3+2 x) (2+x)2

In[39] := x = 4; izraz
Out[39] = 396
In[40] := x = y+1; izraz
2
Out[40] = (3+2 (y+1)) (3+y)
In[41] := x = 3; izraz
Out[41] = 3

Osnovni nedostatak ovog rjeenja je to nakon svake dodjele promjenljiva x zardava svoju
vrijednost do nove izmjene. Stoga su u paketu Mathematica uvedena tzv. pravila. Pravila se definiraju
pomou operatora > (koji se sastoji od dva znaka, i >) koji editor automatski pretvori u znak
(koji moemo direktno unijeti sa tastature kao kombinaciju |Esc|>|Esc|), pa emo ga kao takvog i
pisati. Pomou pravila tipa ime izraz (npr. x 3) mogue je izvriti privremenu dodjelu koja vrijedi
samo za vrijeme izraunavanja nekog drugog izraza, preciznije izraza na koji je pravilo primijenjeno. Da

19

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

bismo primijenili pravilo na neki izraz, koristimo operator smjene /. (sastoji se od dva znaka, / i .)
koji se koristi u obliku
izraz /. pravilo
Na primjer:
2

In[42] := x + 3 x + 4
Out[42] = 44

/. x 5

Ispred i iza operatora smjene /. veoma je dobro ostavljati po jedno prazno mjesto, jer se inae moe
desiti da se znakovi / i . koji sainjavaju ovaj operator slijepe sa onim to slijedi ispred ili iza i
dovedu do pogrene interpretacije, to emo vidjeti kasnije.
Efekat posljednje transakcije je slian kao da smo napisali x = 5; x2 + 3 x + 4 uz jednu bitnu razliku:
u navedenom primjeru promjenljiva x privremeno dobija vrijednost 5 samo za vrijeme izraunavanja
izraza x2 + 3 x + 4 (preciznije x se prosto zamjenjuje sa vrijednou 5 za vrijeme izraunavanja ovog
izraza). Izvan ovog izraza ona zadrava svoju vrijednost kakvu je imala ranije (ili ostaje bez vrijednosti
ako nije imala vrijednost ranije):
In[43] := x
Out[43] = 3
In[44] :=

Clear[x]

Slijedi da je izraunavanja istog izraza (npr. izraza izraz koji smo ve definirali) za nekoliko razliitih
vrijednosti neke promjenljive mnogo pametnije obaviti na sljedei nain (jer na taj nain ne kvarimo
eventualno postojeu vrijednost promjenljive x):
In[45] := izraz /.
Out[45] = 396

x4

In[46] := izraz /. x y+1


2
Out[46] = (3+2 (y+1)) (3+y)
In[47] := izraz /.
Out[47] = 3

x 3

Naravno, promjenljiva x je pri tome i dalje bez vrijednosti, kako je ostalo nakon izvravanja naredbe
Clear:
In[48] := x
Out[48] = x

Pravila treba koristiti gdje je god to mogue, a dodjele samo gdje je to zaista nuno, jer se esto deava
da zaboravimo da obriemo neku promjenljivu koja nam vie ne treba.
Dodjele poput ime = izraz treba zapravo tumaiti kao pravila oblika ime izraz koja se primjenjuju
uvijek, u svakoj prilici, a ne samo na izraze koji su iskoriteni unutar operatora /., i koja su, prema
tome, prirodna svojstva objekta nad kojim je dodjela izvrena (objekta ime). S druge strane, pravila ne
treba posmatrati kao dodjele, jer su ona znatno univerzalnija od dodjela, i nisu vezana za objekte sa
lijeve strane pravila. Pravila je najbolje shvatiti kao upute kako se vre smjene prilikom upotrebe
operatora smjene /., i njihov opi oblik je
ta se smjenjuje s im se smjenjuje
Na primjer, dok je dodjela poput 1 = 2 besmislena, pravilo 1 2 je sasvim legalno, i tvrdi da svaku
pojavu broja 1 treba zamijeniti sa brojem 2:

20

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

(1+x) / (1x) /. 1 2
2 x
Out[49] =
2 x
In[49] :=

U ovom primjeru je razmak iza operatora /. bio od presudne vanosti: da njega nije bilo, taka iz
operatora /. bila bi shvaena kao dio broja (tj. .1), to bi dovelo do sasvim pogrene interpretacije:
(1+x) / (1x) /.1 2
10 (1 x )
Out[59] =
2
1 x
In[50] :=

Iz istog razloga kao kod pravila 1 2, nema nita loe u pravilima poput 5 x, 5 x+3 i x+3 5,
mada su sline dodjele bile ilegalne:
In[51] := (5+x) / (5x) /.
Out[51] = (2+x) / (2x)

5 x+3

Razlog zato je pravilo 1 2 legalno a dodjela 1 = 2 nije, lei u injenici da pravilo 1 2 samo govori
da svaku pojavu objekta 1 treba zamijeniti sa 2 prilikom izraunavanja izraza na koji je pravilo
primijenjeno, dok bi dodjela 1 = 2 tvrdila da uvijek treba da 1 bude jednako 2 (tj. da se 1 zamjenjuje sa
2 uvijek). Tako neto bi zahtijevalo za trajno mijenjanje svojstava objekta 1, to je svakako
besmisleno.
Mada su pravila vrlo mona, ona imaju i svojih ogranienja. Pravilo poput x+3 5 tvrdi da svaku
pojavu izraza x + 3 treba zamijeniti sa 5, ali ono ne govori da x treba zamijeniti sa 2. To
moemo vidjeti i iz sljedeeg primjera:
In[52] :=

polinom := 1 + 3 x + 2 x2 + x3

In[53] := polinom /. 3 x t
2
3
Out[53] = 1 + t + 2 x + x

Ovdje je 3 x zaista zamijenjeno sa t, ali x na drugim mjestima nije zamijenjeno sa t/3 kao to bi
se moglo oekivati. Naime, pravila samo zamjenjuju doslovnu pojavu lijeve strane desnom, bez ikakvih
implicitnih zakljuaka ime treba zamijeniti promjenljive koje figuriraju u lijevoj strani. Eventualno se
na izraz u kojem se vri smjena primjenjuju komutativni i distributivni zakoni da se ustanovi mogunost
primjene smjene. Na primjer:
In[54] := u + v + w
Out[54] = v + z

/. w + u z

Ovo ogranienje moemo izbjei tako da eljenu smjenu uvijek, ukoliko je to mogue, izrazimo to je
god mogue eksplicitnije po objektu koji elimo da smijenimo:
polinom /. x t / 3
2 t2
t3
Out[55] = 1 + t +

9
27
In[55] :=

Ovim smo dobili ono to smo vjerovatno eljeli da dobijemo. Razlog za ovo prividno ogranienje
operatora smjene lei u injenici da je esto potrebno primijeniti neke smjene koje je teko ili nemogue
eksplicitno izraziti. Na primjer, u izrazu 2 + 3 (x + Cos[x]) + (x + Cos[x])2 sasvim je legalno primijeniti
pravilo x + Cos[x] y i dobiti 2 + 3 y + y2, mada je iz navedenog pravila nemogue izraziti eksplicitno x
preko y (tako da bi izraz 2 x + 3 (x + Cos[x]) nakon primjene istog pravila rezultirao izrazom 2 x + 3 y, to
je zapravo najbolje to se uope moe postii).

21

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

Prilikom primjene pravila, nikada se pravilo ne primjenjuje na dio izraza u kojem je ve iskoriteno.
Da nije tako, slijedei primjer bi doveo do petlje bez izlaza (jer bi se, u suprotnom, u novodobijenom
izrazu ponovo smjenjivalo x sa x+1, i tako bez kraja):
In[56] := 1 + x + x /. x x+1
2
Out[56] = 2 + x + (1+x)
2

Ukoliko elimo da na neki izraz primijenimo vie pravila, jedan od naina koji moemo koristiti je
kaskadna primjena operatora /.:
2

In[57] := u + v
Out[57] = 14

+ w2 /. u 1 /. v 2 /. w 3

Primijetimo da poredak zadavanja pravila moe biti jako bitan:


2

In[58] := u + v
Out[58] = 13

/. u v+1 /. v 2

In[59] := u + v /. v 2
2
Out[59] = 4 + (1+v)
2

/. u v+1

U prvom sluaju, u izrazu u2 + v2 se prvo zamjenjuje u sa v+1, ime se dobija izraz (v+1)2 + v2, a
zatim se u novodobijenom izrazu mijenja v sa 2. U drugom sluaju, u izrazu u 2 + v2 se prvo
zamjenjuje v sa 2 ime se dobija izraz u^2 + 4, a zatim se u novodobijenom izrazu zamjenjuje u
sa v+1.
Alternativni, i esto pogodniji nain za viestruku primjenu pravila, je da sva pravila koja elimo da
primijenimo stavimo u listu:
2

In[60] := u + v
Out[60] = 14

+ w2 /. {u 1, v 2, w 3}

Mada je u ovom primjeru rezultat isti kao kod kaskadne primjene operatora /., kod ovakve primjene
pravila se sva pravila navedena u listi primjenjuju uporedo, tako to se na svaki dio izraza primjenjuju
sva navedena pravila redom, dok se ne naie na prvo pravilo koje se moe primijeniti na razmatrani dio
izraza. Pri tome se nikada na isti dio izraza ne primjenjuje vie od jednog pravila (u suprotnom bi moglo
doi do beskonanih petlji, npr. ako bismo zadali listu pravila poput {u v, v u}). Slijedi primjer koji
jasno ilustrira razliku (potrudite se da shvatite zato je svaki od rezultata onakav kakav jeste):
In[61] := u + v /. u v+3
2
2
Out[61] = (5+u) + (8+u)

/. v u+5

In[62] := u + v /. v u+5
2
2
Out[62] = (3+v) + (8+v)

/. u v+3

In[63] := u + v /. {u v+3, v u+5}


2
2
Out[63] = (5+u) + (3+v)
2

Zapravo, samo je posljednji rezultat ono to smo najvjerovatnije eljeli da postignemo. U sluaju kada se
niti u jednom od pravila sa desne strane ne pojavljuje neka od promjenljivih koja se javlja sa lijeve strane
nekog od pravila, tada je potpuno svejedno koju emo varijantu koristiti.
injenica da se nikada na isti dio izraza ne primjenjuje vie od jednog pravila (niti jedno pravilo
vie puta) moe ponekad da smeta. Zbog toga je uveden i operator //. koji na izraz neprestano
primjenjuje navedeno pravilo ili listu pravila, sve dok se to pravilo moe upotrijebiti, odnosno sve dok se
makar jedno od pravila navedenih u listi moe upotrijebiti. Na primjer:

22

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

In[64] := u + v /. {u v+1, v 2}
2
Out[64] = 4 + (1+v)
2

In[65] := u + v
Out[65] = 13

//. {u v+1, v 2}

Ipak, pri upotrebi operatora //. treba biti veoma oprezan, jer e pravila poput x x +1 ili
{x y, y x} neminovno dovesti do beskonane petlje, koju dodue uvijek moemo prekinuti pomou
komande Abort Evaluation iz Kernel menija. Alternativno, paket Mathematica e sam prekinuti ovu
petlju kada se dostigne maksimalno dozvoljeni broj ponavljanja, koji je podrazumijevano postavljen na
65536.
Umjesto liste pravila mogue je zadati i listu listi pravila. U tom sluaju se kao rezultat dobija lista
sastavljena od rezultata primjene svakog od pravila iz unutranjih listi. Na primjer:
In[66] := x + 5 x + 6 /. {{x 1},
Out[66] = {12, 20, 30}
2

In[67] := u + v /. {{u 1,
Out[67] = {2, 8}
2

{x 2}, {x 3}}

v 1}, {u 2, v 2}}

Nema nikakvog razloga da ne zapamtimo itavo pravilo, listu pravila ili listu listi pravila u neku
promjenljivu, tako da ga moemo primjenjivati kada god nam zatreba. Na primjer:
In[68] :=

uvrsti3 := x 3

In[69] := uvrsti3
Out[69] = x 3
2

In[70] := x + 5 x + 6
Out[70] = 30
In[71] := izraz
Out[71] = 30
In[72] :=

/. uvrsti3

/. uvrsti3

uvw := {u 1, v 2, w 3}

In[73] := u + v + w
Out[73] = 6
2

In[74] := u + v
Out[74] = 14

/. uvw

+ w2 /. uvw

Podsjetimo se da promjenljiva izraz od ranije sadri izraz (3+2 x) (2+x)2.

5. Manipulacije sa simbolikim izrazima


Najvea snaga paketa Mathematica lei upravo u mogunosti rada sa simbolikim izrazima.
Meutim, dok se operacije sa numerikim izrazima obavljaju manje ili vie automatski, kod simbolikog
raunanja to nije tako. Razlozi za to su viestruki, a najvaniji je to to kod simbolikog raunanja nije
posve oigledno ta bi trebao da bude rezultat. Na primjer, simboliki izraz (xy+z) (xz) y (xy) + z (z
y) nakon sreivanja moe se napisati kao x2 2 x y + y2 ili kao (xy)2, pri emu je dosta upitno koji od ova
dva oblika treba smatrati rezultatom. Kod simbolikih izraza ne moemo govoriti o rezultatu u onom
smislu kako moemo kod rada sa brojevima, jer su svi ekvivalentni izrazi jednako valjani (svaki na svoj
nain), i svaki moe biti smatran za rezultat. Stoga je kod simbolikih izraza bolje govoriti o
transformacijama, koji izraz prevode iz jednog u drugi ekvivalentni oblik. Mathematica automatski vri
samo najelementarnije transformacije poput objedinjavanja lanova sa istim simbolima (3 x y umjesto

23

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

2 x y + x y), ponitavanja identinih lanova (poput xx), svoenja produkata simbola na stepene (x2
umjesto x x), kraenja zajednikih faktora u brojniku i nazivniku tamo gdje je to oigledno, i nekih
elementarnih identiteta koji ukljuuju inverzne funkcije (npr. x3 umjesto Sqrt[x]6). Sve ostale
transformacije ne vre se po automatizmu, ve je potrebno zadati odgovarajue funkcije pomou kojih se
vri izbor transformacije koju elimo da obavimo nad izrazom. Na primjer:
In[1] := (x*x+5)^2*(x3)+1
2 2
Out[1] = 1+(3+x) (5+x )

Vidimo da u ovom izrazu nije primijenjena ni jedna netrivijalna transformacija (izraz je samo malo
prestruktuiran). Sasvim drugu situaciju dobijamo ako na navedeni izraz primijenimo funkciju Expand:
In[2] := (x*x+5)^2*(x3)+1 // Expand
2
3
4
5
Out[2] = 74 + 25 x 30 x + 10 x 3 x + x

Funkcija Expand vri oslobaanje izraza od produkata i stepena sa cjelobrojnim eksponentima, i


najee se koristi za mnoenje i stepenovanje polinoma:
In[3] := (a x + b y )(c x d y ) // Expand
4
2
3 2
4
Out[3] = a c x a d x y + b c x y b d y
2

In[4] := Expand[(x+yz) ]
4
3
2 2
3
Out[4] = x + 4 x y + 6 x y + 4 x y +

y4 4 x3 z 12 x2 y z 12 x y2 z 4 y3 z+ 6 x2 z2 + 12 x y z2

+6y z 4xz 4yz +z


2 2

Funkcija Expand moe se primijeniti i na izraze koji nisu polinomi, ali treba voditi rauna da ona
ne radi nita vie od oslobaanja od produkata i cjelobrojnih stepena:
In[5] := (Cos[x]Sin[x]) (Cos[x]+Sin[x]) // Expand
2
2
Out[5] = Cos[x] Sin[x]

Primijetimo da Mathematica izraze poput cos2 x ne prikazuje u obliku Cos2[x] (to, strogo reeno, nije ni
matematski skroz ispravno), nego u obliku Cos[x]2 (to je matematski mnogo korektnije). O tome
trebamo voditi rauna i kada unosimo izraze: izraz oblika cos 2 x ispravno se zadaje jedino kao Cos[x]2, a
ne nipoto kao Cos2[x]!
Mathematica sve iracionalne brojeve (u tanoj formi) smatra takoer kao neku vrstu simbolikih
izraza, i ne primjenjuje na njih po automatizmu nikakve dodatne transformacije osim ve pomenutih
najelementarnijih transformacija. Stoga su sve funkcije za manipuliranje sa simbolikim izrazima (poput
Expand) primjenljive i na manipulacije sa iracionalnim brojevima:
In[6] := (Sqrt[2]+Sqrt[3])^2
Out[6] =

( 2 3) 2

% // Expand
Out[7] = 5 2 6
In[7] :=

Bitno je napomenuti da funkcija Expand ne djeluje na produkte i stepene koji su upotrebljeni kao
argumenti neke funkcije (tj. ona ne zalazi u dubinu izraza):
2

In[8] := (Cos[(x+y)(xy)]Sin[(xy) ]) (Cos[(x+y)(xy)]+Sin[(xy)


2
2 2
Out[8] = Cos[(x+y)(xy)] Sin[(xy) ]

]) // Expand

S druge strane, funkcija ExpandAll je slina funkciji Expand, ali djeluje na sve dijelove izraza, ma gdje
se oni nalazili:
In[9] := % // ExpandAll
2
2 2
2
2 2
Out[9] = Cos[x y ] Sin[x 2 x y + y ]

24

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

Interesantno je demonstrirati kako funkcije Expand i ExpandAll djeluju na racionalne izraze. Radi
daljeg eksperimentiranja, smjestiemo jedan racionalan izraz u promjenljivu rac:
rac = (x3)2/((x+1)(x5))+(2+x)(2x)/((x+1)2(x2+1))
(3 x ) 2
(2 x ) (2 x )
Out[10] =

(5 x ) (1 x ) (1 x ) 2 (1 x 2 )
In[10] :=

U sluaju racionalnih izraza, funkcija Expand djeluje samo na brojnike u izrazu. Pored toga, ova
funkcija daje rezultat u obliku sume razlomaka u kojima se u brojniku javlja samo po jedan lan iz
razvijenog brojnika, dok se nazivnici samo prepisuju:
rac // Expand
6x
9
x2
4
x2
Out[11] =

(5 x )(1 x ) (5 x )(1 x ) (5 x )(1 x ) (1 x ) 2 (1 x 2 ) (1 x ) 2 (1 x 2 )


In[11] :=

Funkcija ExpandAll djeluje slino, samo se pored brojnika razvijaju i nazivnici:


rac // ExpandAll
6x
9
x2
4
x2
Out[12] =

54x x 2 54x x 2 54x x 2 1 2x 2x 2 2x 3 x 4 1 2x 2x 2 2x 3 x 4


In[12] :=

Pored funkcija Expand i ExpandAll, za rad sa racionalnim funkcijama korisne su i funkcije


ExpandNumerator i ExpandDenominator. Funkcija ExpandNumerator, slino funkciji Expand,
djeluje samo na brojnike, ali za razliku od nje, ne vri dodatno razbijanje razlomaka na sabirke sa
jednolanim brojnicima. S druge strane, funkcija ExpandDenominator djeluje samo na nazivnike:
rac // ExpandNumerator
4 x2
96x x2
Out[13] =

(1 x ) 2 (1 x 2 ) (5 x ) (1 x )
In[13] :=

rac // ExpandDenominator
(3 x ) 2
(2 x )(2 x )
Out[14] =

2
5 4 x x
1 2 x 2 x 2 2 x 3 x 4
In[14] :=

rac // ExpandNumerator // ExpandDenominator


96x x2
4 x2
Out[15] =

5 4 x x 2 1 2 x 2 x 2 2 x 3 x 4
In[15] :=

Funkcija Together svodi racionalne izraze na zajedniki nazivnik (pri emu se eventualni
zajedniki faktori koji bi se mogli pojaviti u brojniku i nazivniku krate):
In[16] :=

1/(x3+x+1)+1/(x4+2x+1) // Together
2 3 x x 3 x 4

Out[16] =

In[17] :=

rac // Together
11 7 x 9 x 2 3 x 3 5 x 4 x 5

Out[17] =

In[18] :=

(1 x x 3 ) (1 2 x x 4 )

(5 x ) (1 x ) 2 (1 x 2 )

% // ExpandDenominator
11 7 x 9 x 2 3 x 3 5 x 4 x 5

Out[18] =

5 9 x 8 x 2 8 x 3 3 x 4 x 5

25

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

Kao rezultat funkcije Together tipino se dobija razlomak sa manje ili vie faktoriziranim
razlomkom (to moemo izbjei naknadnom primjenom funkcije ExpandDenominator, kao u
prethodnom primjeru), dok se brojnik ne pokuava faktorizirati, ak i ukoliko je to jednostavno (zapravo,
ni nazivnik se ne faktorizira vie od onog to je potrebno da bi se formirao zajedniki nazivnik).
Suprotan efekat od funkcije Together postie se funkcijom Apart, koja rastavlja racionalni izraz na
elementarnije razlomke, tj. razlomke sa jednostavnijim nazivnicima:
rac // Apart
5x
2
3
1
Out[19] = 1

2
3 (5 x ) 2 (1 x )
6 (1 x ) 2 (1 x 2 )
In[19] :=

Sve opisane funkcije rade i sa racionalnim funkcijama koje zavise od vie promjenljivih:
(x + 3x2 2y 3x y)/(x3 + 2y3 2x2y x y2) // Apart
1
1
2
Out[20] =

2 x ( x y) 2 x ( x y) x 2 y
In[20] :=

Funkcija Factor pokuava da rastavi izraz kao produkt izraza u kojima se javljaju lanovi sa niim
eksponentima, i na izvjestan nain je suprotna funkciji Expand:
2

In[21] := x +5 x+6 // Factor


Out[21] = (2+x)(3+x)
In[22] := x y // Factor
2
2
Out[22] = (xy)(x+y)(x + y )
4

In[23] := x y // Factor
2
2
4
3
2 2
3
4
4
3
2 2
3
4
Out[23] = (xy)(x+y)(x + y )(x x y + x y x y + y )(x + x y + x y + x y + y )
20

20

(x8 x6y2 + x4y4 x2y6 + y8)


In[24] := Cos[x] Sin[x] // Factor
Out[24] = (Cos[x]Sin[x])(Cos[x]+Sin[x])
2

In[25] := x + y + z 2 (x y + x z + y z ) // Factor
Out[25] = (xyz) (x+yz) (xy+z) (x+y+z)
4

2 2

2 2

2 2

Bitno je napomenuti da funkcija Factor vri rastavljanje na faktore samo nad skupom cijelih i
racionalnih brojeva. Drugim rijeima, ova funkcija nikada u rastavi ne generira iracionalne brojeve niti
iracionalne izraze:
2

In[26] := x + 5 x + 2 // Factor
2
Out[26] = 2 +5 x + x
In[27] := x + 7 x + 12 x + 6 x 25 x 30 x 25
2
2
3
Out[27] = (5 + x) (1 + x + x ) (5 + x + x )
6

// Factor

Vidimo da je izraz x2 + 5 x + 2 koji nema racionalnih nula ostao praktino netaknut (ako zanemarimo
pregrupiranje), dok je u posljednjem primjeru faktor 5 + x2 + x3 takoer ostao nerastavljen iz istog
razloga. Funkcija Factor je ograniena na racionalne faktore zbog injenice da i ovjek tako radi u
praksi. Naime, svako e rastaviti x2 4, kao (x+2) (x2) ili x2 + 5 x + 6 kao (x+2) (x+3), meutim, rastavu
poput
x2 + 5 x + 2 = (x

5 17
5 17
) (x
)
2
2

teko je smatrati prirodnom, lijepom i praktinom. Jo gori sluaj je sa slijedeom rastavom (koja
bi se eventualno trebala generirati u posljednjem primjeru):

26

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

x3 + x2 5 =

1
133 3 1965 1 / 3 133 3 1965 1 / 3


3 x 1
9
2
2

133 3 1965 1 / 3 133 3 1965 1 / 3


675 15 1965 1 / 3 675 15 1965 1 / 3
) (
) x(
) (
)
2
2
2
2

* 3 x 2 2 (

Stoga se funkcija Factor ograniava samo na racionalne komponente. Za polinome jedne promjenljive,
problem rastave na proste faktore svodi se zapravo na nalaenje njegovih nula. Ako nas zanimaju nule
polinoma, kakve god da su (racionalne ili iracionalne), umjesto funkcije Factor koristiemo funkcije
Roots ili Solve, koje e kasnije biti opisane. Glavna upotreba funkcije Factor zapravo i nije rastavljanje
polinoma koji ovise od jedne promjenljive, ve polinoma koji zavise od vie promjenljivih. U tom
sluaju, rastava se ne moe prosto svesti na problem nalaenja nula.
U sluaju racionalnih izraza, Factor prvo svodi razlomke na zajedniki nazivnik (poput funkcije
Together), a zatim faktorizira (ukoliko je mogue) posebno i brojnik i nazivnik (za razliku od funkcije
Together koja ne vri nikakvu dodatnu faktorizaciju):
2
15
18
// Factor

x 1 x 1 x 4
5 (2 x ) (5 x )
Out[28] =
(1 x ) (1 x ) (4 x )
In[28] :=

Treba napomenuti da, slino funkciji Factor, ni funkcija Apart ne pokuava da izvri takvu rastavu
u kojoj bi se javili iracionalni brojevi ili izrazi, tako da ona ne vri u potpunosti rastavu na elementarne
parcijalne razlomke (kakva se koristi npr. kod integracije racionalnih funkcija):
(5 x5 + x4 + 10 x3 +7 x2 + 6 x + 4) / (2 x6 +x5 +4 x4 +4 x3 +3 x2 + 3 x + 1) // Apart
3
x
1
Out[29] =

2
1 2 x 1 x
1 x x3
In[29] :=

U navedenom primjeru, posljednji razlomak nije elementarni razlomak.


Mathematica vri automatsko kraenje zajednikih faktora u brojniku i nazivniku samo ukoliko su
oni eksplicitno vidljivi:
(x+2) (x+4) (x+5)/((x+1) (x+2) (x+3))
( 4 x ) (5 x )
Out[30] =
(1 x ) (3 x )
In[30] :=

In[31] :=

(x3+11x2+38x+40)/(x3+6x2+11x+6)
40 38 x 11 x 2 x 3

Out[31] =

6 11 x 6 x 2 x 3

Vidimo da u posljednjem primjeru automatsko skraivanje nije izvreno, iako se u principu u oba sluaja
radi o istom razlomku. Funkcija Factor bi svakako izvrila skraivanje, meutim ukoliko nam nije
neophodna puna faktorizacija nego samo skraivanje zajednikih faktora, bolje je upotrebiti funkciju
Cancel, iji je jedini zadatak skraivanje eventualnih zajednikih faktora u brojniku i nazivniku:
In[32] :=

% // Cancel
20 9 x x 2

Out[32] =

3 4 x x2

Funkcija Cancel nee racionalni izraz svesti na zajedniki nazivnik (ukoliko se on sastoji od vie
razlomaka), nego e se skraivanje zajednikih faktora izvesti u svakom od razlomaka pojedinano.
27

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

U matematici se veoma esto susreu razliite transformacije izraza koji sadre trigonometrijske
funckije. Mathematica poznaje tri veoma mone funkcije za manipuliranje sa trigonometrijskim
izrazima. Funkcija TrigExpand koristi adicione teoreme sa ciljem da se oslobodi trigonometrijskih
funkcija sloenijih argumenata (prvenstveno zbirova i razlika kao i viestrukih uglova). Pri tome se
rezultat pokuava izraziti preko stepena trigonometrijskih funkcija prostijih argumenata. Funkcija
TrigFactor takoer prvo eliminira trigonometrijske funkcije sloenijih argumenata (ako ih ima), a zatim
pokuava predstaviti trigonometrijsku funkciju kao produkt prostijih trigonometrijskih izraza, pri emu
taj pokuaj moe dovesti do formiranja sloenijih argumenata. Funkcija TrigReduce pokuava da
trigonometrijski izraz predstavi kao zbir prostijih trigonometrijskih izraza koji mogu imati sloenije
argumente. Slijedi nekoliko karakteristinih primjera:
In[33] := Sin[x+yz] // TrigExpand
Out[33] = Cos[y] Cos[z] Sin[x] + Cos[x] Cos[z] Sin[y] Cos[x] Cos[y] Sin[z] + Sin[x] Sin[y] Sin[z]
In[34] := Sin[6 x] // TrigExpand
5
3
3
5
Out[34] = 6 Cos[x] Sin[x] 20 Cos[x] Sin[x] + 6 Cos[x] Sin[x]
In[35] := Sin[6 x] // TrigFactor
Out[35] = 2 Cos[x] (1 + 2 Cos[2 x]) (1 + 2 Cos[2 x]) Sin[x]

Sin[x] + Sin[y] // TrigFactor


x y
x y
Out[36] = 2 Cos Sin
2 2
2 2
In[36] :=

Sin[x] Cos[y] // TrigReduce


1
Out[37] =
(Sin[x y] + Sin[x + y])
2
In[37] :=

In[38] := Cos[x] Cos[y] Sin[x] Sin[y] //


Out[38] = Cos[x + y]
In[39] :=

TrigReduce

Cos[2 x] Sin[3 x]2 // TrigExpand

Out[39] =

Cos[ x ] 2 Cos[ x ] 4 Cos[ x ]8 Sin [ x ] 2 3


6
2

Cos[ x ] 2 Sin [ x ] 2 + 7 Cos[x] Sin[x]


2
4
4
2
2
8
Sin [ x ] 4 35
2
6 Sin [ x ]
Cos[ x ] 4 Sin [ x ] 4 + 7 Cos[x] Sin[x]
4
2
4
2

In[40] := Cos[2 x] Sin[3 x] // TrigFactor


2
Out[40] = (1 + 2 Cos[2 x]) (Cos[x] Sin[x])

Sin[x]2 (Cos[x] + Sin[x])

Cos[2 x] Sin[3 x]2 // TrigReduce


1
Out[41] =
(2 Cos[2 x] Cos[4 x] Cos[8 x])
4
In[41] :=

Funkcije TrigExpand, TrigFactor i TrigReduce pored klasinih trigonometrijskih izraza rade i sa


izrazima koji sadre hiperbolne funkcije.
Prilikom rada sa racionalnim trigonometrijskim ili hiperbolnim izrazima, u funkcije Together,
Apart i Cancel moe se kao dodatni parametar dodati opcija Trig>True. Na taj nain se dobijaju
mnogo bolji rezultati, jer se pored obinih manipulacija sa racionalnim izrazima primjenjuju i
trigonometrijske transformacije:
1/(Sin[x]+Cos[x]) + Sin[x]/Cos[2 x] // Together
1 Cos[ x ] Sec[2 x ] Sin [ x ] Sec[2 x ] Sin [ x ] 2
Out[42] =
Cos[ x ] Sin [ x ]
In[42] :=

28

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

Together[%, Trig>True]
Cos[ x ]
Out[43] =
(Cos[ x ] Sin [ x ]) (Cos[ x ] Sin [ x ])
In[43] :=

Za funkciju FunctionExpand teko je rei ta tano radi. Generalno, ona pokuava transformirati
neki izraz koji sadri sloenije matematike funkcije u izraz koji sadri jednostavnije operacije i
jednostavnije argumente, ak i u sluaju ukoliko e se na taj nain dobiti osjetno glomazniji izrazi. Ova
funkcija je naroito korisna za pretvaranje izvjesnih trigonometrijskih izraza u izraze (obino
iracionalne) koji ne sadre trigonometrijske funkcije, kao to pokazuju naredni primjeri:
In[44] :=

Cos[Pi/24] // FunctionExpand
2 2

Out[44] =
In[45] :=

4
2 2
2 2

Sin[Pi/17] // FunctionExpand

Out[46] =

In[47] :=

1
3 (2 2 )
4

Tan[3 Pi/8] // FunctionExpand

Out[45] =

In[46] :=

1
8 215 17 2 (17 17 ) 2 346 17 2 (17 17 ) 34 (17 17 ) 8 2(17 17 )

Sin[ArcCos[x]/2] // FunctionExpand
1 x

Out[47] =

Sin[2 ArcCos[x]] // FunctionExpand


Out[48] = 2 1 x x 1 x
In[48] :=

esto nam je cilj da neki izraz elimo predstaviti u to je god mogue jednostavnijem obliku, ali pri
tom ne znamo kako to uiniti, odnosno koju transformaciju ili niz transformacija primijeniti. Za tu svrhu
koristi se funkcija Simplify. Ona pokuava da pronae takve transformacije koje e dovesti do to je god
mogue jednostavnijeg izraza koji je ekvivalentan izrazu na koji je primijenjena. Slijedi nekoliko
primjera:
3

In[49] := x + 3x + 3x + 1
3
Out[49] = (1 + x)
In[50] := (x y)(x
3
3
Out[50] = x y

// Simplify

+ x y + y2) // Simplify
+2z+1] Sin[(xy)(x+y)] Sin[z2+2z+1] // Simplify

In[51] := Cos[(xy)(x+y)] Cos[z


2
2
2
Out[51] = Cos[x y +(1+z) ]
x

In[52] := a a a
x+y+z
Out[52] = a

// Simplify

U prva dva primjera bismo isti efekat dobili primjenom funkcija Factor odnosno Expand, ali
primjena funkcije Simplify nas oslobaa od potrebe da se brinemo koju transformaciju primijeniti da
ostvarimo eljeni cilj. U treem primjeru, prikazano pojednostavljenje je mogue dobiti samo
kombiniranjem raznih transformacija, dok pojednostavljenje prikazano u etvrtom primjeru nije mogue
izvesti ni jednom do sada opisanom funkcijom (osim Simplify). Treba napomenuti da zbog sloenosti
procesa pojednostavljivanja u opem sluaju, primjena funkcije Simplify esto zahtijeva dosta vremena
za izraunavanje.
29

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

Postoji i pojaana verzija funkcije Simplify, nazvana FullSimplify. Ova funkcija isprobava znatno
vie transformacija nego funkcija Simplify, to moe rezultirati efikasnijim pojednostavljenjem.
Nedostatak funkcije FullSimplify je to njemo izraunavanje esto traje predugo, tako da moramo
prekinuti izraunavanje (na ve opisani nain) prije nego to doekamo rezultat. Stoga, funkciju
FullSimplify treba primjenjivati samo ukoliko vidimo da funkcija Simplify ne daje zadovoljavajue
rezultate. Na primjer, funkcija Simplify se ne snalazi najbolje sa sloenijim iracionalnim izrazima. S
druge strane, funkcija FullSimplify se sa njima dosta dobro snalazi, kao to pokazuje sljedei primjer:
2 3

In[53] :=
Out[53] =
In[54] :=

2 3 // Simplify

2 3

2 3

% // FullSimplify

Out[54] =

Takoer, treba znati da funkcije Simplify i FullSimplify imaju razliit osjeaj za to ta znai
jednostavniji izraz, tako da se njihovi rezultati i zbog toga mogu razlikovati, kao to je vidljivo iz
sljedeeg primjera (podsjetimo se da promjenljiva rac sadri racionalni izraz koji smo definirali ranije):
In[55] :=

rac // Simplify
2

Out[55] =

In[56] :=

( 3 x ) (1 x )
5 x

4 x 2
1 x 2

(1 x ) 2

rac // FullSimplify

Out[56] =

11 x (7 (3 x ) 2 x (1 x ))
(5 x ) (1 x ) 2 (1 x 2 )

6. Uvjeti i njihova upotreba


Pod uvjetima ili logikim izrazima smatramo bilo koji izraz iji rezultat eventualnog izraunavanja
moe biti jedino tano ili netano. Da bismo mogli formirati uvjete, neophodni su nam operatori koji
kao rezultat izraunavanja daju iskljuivo rezultat tipa tano/netano. Mathematica poznaje itavo
mnotvo takvih operatora. Tu na prvom mjestu spadaju relacioni operatori < (manje), > (vee),
<= (manje ili jednako), >= (vee ili jednako), = = (jednako) i != (razliito):
In[1] := 2 < 3
Out[1] = True
In[2] := 2 > 3
Out[2] = False
In[3] := Sqrt[2] <= Log[3]
Out[3] = False
In[4] := 1/2+1/3 == 5/6
Out[4] = True
In[5] := x < 5
Out[5] = x < 5

Simbol True predstavlja vrijednost tano, a simbol False vrijednost netano. U posljednjem
primjeru ne moe se rei da li je x < 5 ili nije bez konkretne vrijednosti za x, tako da je izraz ostao
neizraunat. Tek uz konkretnu vrijednost za x moe se rei da li je izraz taan ili netaan:
In[6] := % /. x -> 3
Out[6] = True

30

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

Ovakvi izrazi, koji se zapravo najvie i koriste u radu sa paketom Mathematica, nazivaju se otvoreni
uvjeti ili predikati.
Operatore <=, >= i != editor automatski pretvara u znakove , i , koji se mogu i
neposredno unijeti sa tastature pomou kombinacije tipki |Esc| <= |Esc|, |Esc| >= |Esc| i |Esc| != |Esc|.
Relacioni operatori imaju nii prioritet od aritmetikih operatora +, , *, / i ^, tako da se izraz
poput x + y > a + b ispravno interpretira kao (x + y) > (a + b).
Bitno je uoiti razliku izmeu operatora dodjele = i operatora jednakosti = = (pie se sa dva
znaka =). Izraz sa operatorom dodjele poput x = y predstavlja imperativni iskaz nakon kojeg lijeva
strana (tj. x) zaista postaje jednaka desnoj strani (tj. y), ak i ukoliko to nije vrijedilo prije. Takoer,
rezultat takvog iskaza je upravo dodijeljena vrijednost (tj. y). S druge strane, izraz poput x = = y samo
vri provjeru da li su lijeva i desna strana jednake, i daje rezultat True odnosno False ukoliko se
odgovor moe ustanoviti (ukoliko ne, izraz ostaje neizraunat). Na primjer:
In[7] := a=3
Out[7] = 3
In[8] := a= =4
Out[8] = False
In[9] := a= =3
Out[9] = True
In[10] := a= =b
Out[10] = a = = b
In[11] := a= =b
Out[11] = True

/. b a

In[12] := 2= =3
Out[12] = False
In[13] :=

2= 3
Set::setraw : Cannot assign to raw object 2.

Out[13] =

U posljednjem sluaju izraz 2=3 predstavlja imperativni iskaz koji bi trebao da uini da objekat 2
postane jednak objektu 3, to je jasno nemogue, jer je 2 nepromjenljiv (sirov) objekat. Poznavaoci
jezika C i C++ mogu primijetiti da je razlikovanje operatora = i = = (kao i operator !=) preuzeto
upravo iz ovih jezika.
Mathematica esto ne moe da utvrdi eventualnu tanost jednakosti ili nejednakosti direktno kako
je napisana, pogotovo ukoliko jednakost ili nejednakost sadre ope brojeve. U takvim sluajevima,
primjena funkcije Simplify odnosno FullSimplify moe pomoi da se utvrdi tanost zadane jednakosti
ili nejednakosti:
2

In[14] := (a+b) = = a + 2a b + b
2
2
2
Out[14] = (a+b) = = a + 2a b + b
In[15] := % // Simplify
Out[15] = True

Pomou operatora konjukcije, disjunkcije i negacije mogu se od prostijih uvjeta formirati sloeniji
uvjeti. Ovi operatori se, kao i u jezicima C i C++, piu kao && (konjukcija), || (disjunkcija) i !
(negacija). Na primjer:

31

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

In[16] := 2 < 3 &&


Out[16] = False
In[17] := 2 < 3 ||
Out[17] = True

4>5

4>5

In[18] := ! 4 > 5
Out[18] = True

Operatori &&, || i ! imaju nii prioritet od relacionih operatora, tako da se izrazi poput
a < b && c < d i ! a < b ispravno interpretiraju kao (a < b) && (c < d) i ! (a < b). Negacija ima vii prioritet
od konjukcije, a konjukcija od disjunkcije, tako da se izraz poput x || y && z interpretira kao x || (y && z) a
ne kao (x || y) && z.. Za razliku od jezika C i C++ u kojima operator negacije ima veoma veliki prioritet,
u paketu Mathematica je prioritet ovog operatora nii od prioriteta relacionih operatora.
Umjesto operatora &&, || i ! mogu se koristiti i operatori , i istog znaenja, a ija
je notacija prilagoenija uobiajenoj matematskoj notaciji. Ovi operatori se mogu unijeti pomou
tastature kao kombinacije |Esc| && |Esc|, |Esc| || |Esc| i |Esc| ! |Esc| ili, alternativno, kao |Esc| and |Esc|,
|Esc| or |Esc| i |Esc| not |Esc|. Pored ova tri operatora podran je i operator implikacije, koji se pie kao
znak , a koji se moe dobiti pomou kombinacije tipki |Esc| => |Esc|. U sutini, izraz poput x y
ekvivalentan je izrazu !x || y.
Za razliku od veine programskih jezika, Mathematica doputa kaskadno kombiniranje relacionih
operatora, tj. pisanje izraza poput x < y < z, x y > z t, x y = = z, itd. koji su respektivno ekvivalentni
izrazima poput (x < y) && (y < z), (x y) && (y > z) && (z t) i (x y) && (y = = z). U klasinim
programskim jezicima ovakvi kaskadni izrazi ili nisu sintaksno ispravni (npr. u Pascal-u), ili su
sintaksno ispravni ali ne daju oekivane rezultate (npr. u C-u i C++-u).
U uvjetima se moe koristiti i operator pripadnosti skupu , koji se koristi u obliku
element skup. Znak moemo dobiti koristei kombinaciju tipki |Esc| elem |Esc|. Ovaj operator se
ne moe koristiti sa proizvoljnim skupovima, nego su podrani neki karakteristini beskonani brojevni
skupovi poput Primes (skup prostih brojeva), Integers (skup cijelih brojeva), Rationals (skup
racionalnih brojeva), Algebraics (skup algebarskih brojeva), Reals (skup realnih brojeva) i Complexes
(skup kompleksnih brojeva). Upotrebu ovog operatora moemo ilustrirati na sljedeim primjerima:
In[19] := 3/7 Integers
Out[19] = False
In[20] := 19 Primes
Out[20] = True

Kao i kod svih ostalih uvjeta, u sluaju kada valjanost uvjeta koji sadri operator nije oigledna
na prvi pogled, funkcije Simplify odnosno FullSimplify mogu pomoi da se utvrdi valjanost:
2

In[21] := 2 3

2 3 Integers

Out[21] = 2 3

2 3 Integers

In[22] := % // Simplify
Out[22] = True

I zaista, uvjet je taan, jer se, nakon pojednostavljenja, izraz sa lijeve strane operatora svodi na
prirodan broj 6.

32

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

Uvjeti se veoma esto koriste u kombinaciji sa funkcijama Simplify odnosno FullSimplify. Naime,
esto se neki izrazi mogu efektnije pojednostaviti ukoliko znamo da je neki uvjet ispunjen. Na primjer,
kvadratni korijen iz x2 moe se pojednostaviti samo na x ukoliko je x 0, odnosno na | x | ukoliko je x
realan (za kompleksno x, takvo pojednostavljenje ne vrijedi). Ukoliko elimo pojednostaviti izraz izraz
uz pretpostavku da je uvjet uvjet ispunjen, koristimo sintaksu
Simplify[izraz, uvjet]
Isto vrijedi i za funkciju FullSimplify. Slijedi nekoliko primjera (primijetimo da uvjet poput x > -5
implicitno podrazumijeva da je x realan, s obzirom da se kompleksni brojevi ne mogu porediti po
veliini):
In[23] :=

x 2 // Simplify

Out[23] =

x2

In[24] := Simplify[
Out[24] = x

x 2 , x 0]

In[25] := Simplify[
Out[25] = Abs[x]

x 2 , x 5]

In[26] := Simplify[
Out[26] = Abs[x]

x 2 , x Reals]

In[27] := Sin[2k ] // Simplify


Out[27] = Sin[2k ]
In[28] := Simplify[%,
Out[28] = 0

k Integers]

In[29] := ArcSin[Sin[x]] //
Out[29] = ArcSin[Sin[x]]
In[30] := Simplify[%,
Out[30] = x

Simplify

/2 < x < /2]

In[31] := Log[x] + Log[y] // Simplify


Out[31] = Log[x] + Log[y]
In[32] := Simplify[%,
Out[32] = Log[x y]

x > 0 && y > 0]

Posljednji primjer je naroito interesantan. Naime, ljudi esto zaboravljaju da jednakost


log x + log y = log x y vrijedi samo za x > 0 i y > 0. I zaista, recimo za x < 0 i y < 0, lijeva strana ove
jednakosti nije definirana u skupu realnih brojeva, a desna strana jeste!
Konano, Simplify i FullSimplify se mogu uspjeno iskoristiti za dokazivanje tanosti odnosno
netanosti nekih jednakosti ili nejednakosti. Na primjer:
2

In[33] := Simplify[x
Out[33] = True
In[34] :=

Simplify[

0, x Reals]

a b c
3 , a > 0 && b > 0 && c > 0]
b c a

Out[34] = True

U posljednjem primjeru, dokazali smo da je zbir razlomaka a/b, b/c i c/a uvijek vei ili jednak od 3 pod
uvjetom da su a, b i c pozitivni.
33

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

7. Rjeavanje jednaina, nejednaina i sistema


U paketu Mathematica postoje brojne funkcije za rjeavanje jednaina, nejednaina i sistema
jednaina odnosno nejednaina, u zavisnosti od sloenosti problema koji elimo da rijeimo, i onoga to
elimo da dobijemo. Razmotrimo prvo ta uope znai rijeiti jednainu, odnosno tvrditi da rjeenje
jednaine 3 x + 2 = 17 glasi x = 5. Oba izraza 3 x + 2 = 17 i x = 5 moemo posmatrati kao otvorene uvjete
(predikate) koji mogu biti tani ili netani, u zavisnosti kakva je vrijednost x (tani su samo ukoliko je ta
vrijednost 5). Meutim, predikat x = 5 zahtjev da x mora imati vrijednost 5 iskazuje eksplicitno. Stoga,
rijeiti jednainu (ili nejednainu) znai transformisati je u takav oblik u kojem se promjenljiva po kojoj
rjeavamo jednainu (ili nejednainu) pojavljuje eksplicitno. To upravo radi funkcija Roots, u kojoj prvi
argument predstavlja jednainu koja se rjeava, a drugi argument promjenljivu po kojoj se rjeava.
Demonstrirajmo ovo na primjeru rjeavanja jednaine x2 + 5 x + 6 = 0:
Roots[x2 + 5x + 5 = = 0, x]
1
1
Out[1] = x = = 5 5 || x = = 5 5
2
2
In[1] :=

U sluaju da vie volimo aproksimativna rjeenja, moemo primijeniti numeriku aproksimaciju:


2

In[2] := Roots[x + 5x + 5 = = 0, x] // N
Out[2] = x = = 3.61803 || x = = 1.38197

Jednaine mogu zavisiti i od drugih promjenljivih ili parametara u odnosu na promjenljivu po kojoj
vrimo rjeavanje:
Roots[x2 + 5x + a = = 0, x]
1
1
Out[3] = x = = 5 25 4 a || x = = 5 25 4 a
2
2
In[3] :=

Numerika aproksimacija u ovakvim sluajevima pretvara u decimalne brojeve samo one dijelove izraza
nad kojima se moe izvriti takva pretvorba:
Roots[x2 + 5x + a = = 0, x] // N
Out[4] = x = = 0.5.5 1. 25. 4. a || x = = 0.55. 25. 4. a
In[4] :=

Naravno, nita nas ne spreava da jednainu x2 + 5x + a = 0 rijeimo tako da smatramo da je a


nepoznata koju treba izraziti preko x:
2

In[5] := Roots[x + 5x + a
2
Out[5] = a = = 5x x

= = 0, a]

Bez obzira na prividnu snagu, funkcija Roots je prilino ograniena. Na prvom mjestu, ona je
ograniena iskljuivo na rjeavanje polinomskih jednaina, tj. jednaina kod kojih lijeva i desna strana
predstavljaju polinome po nepoznatoj promjenljivoj. U sluaju da jednaina nije takvog oblika bie
prijavljena greka (za takve jednaine postoje druge funkcije). Dalje, u sluaju jednaina koje sadre
parametre, funkcija Roots ne vri nikakvu diskusiju, odnosno pretpostavlja da parametri imaju takve
vrijednosti da su rjeenja precizno definirana. Na primjer, posmatrajmo jednainu a x = b. Njeno rjeenje
je x = b/a, ali samo ukoliko je a 0. Za a = 0 rjeenje ne postoji, osim ako je i b = 0. U tom sluaju,
jednaina je identitet, bez obzira na x. O svemu ovome, funkcija Roots, kao to slijedi iz prikazanog
primjera, nema pojma:
Roots[a x = = b, x]
b
Out[6] = x = =
a
In[6] :=

34

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

Za rjeavanje irih klasa jednaina, kao i za diskusiju rjeenja u ovisnosti od parametara, koristi
se funkcija Reduce. Rezultat sljedeeg primjera treba tumaiti da je jednaina zadovoljena ako su b i a
nule, ili ako je a razliit od nule, i pri tome x jednak b/a:
In[7] :=

Reduce[a x = = b, x]

Out[7] =

b = = 0 && a = = 0 || a 0 && x = =

b
a

S druge strane, rjeenja koja generira funkcija Reduce mogu biti prilino glomazna, s obzirom da se
vri detaljna analiza svih mogunosti. Tako, recimo, pri rjeavanju kvadratne jednaine a x2 + b x + c = 0,
Roots ignorira injenicu da se za a = 0 jednaina svodi na linearnu, dok Reduce uzima u obzir i tu
injenicu (kao i mogunost da su svi koeficijenti nule):
In[8] :=

Roots[a x2 + b x + c = = 0, x]

Out[8] =

In[9] :=

x ==

b b2 4 a c
2a

|| x = =

b b2 4 a c
2a

Reduce[a x2 + b x + c = = 0, x]

Out[9] =

b b2 4 a c
b b2 4 a c
a 0 && x = =
|| x = =
||
2a
2a

c
a = = 0 && b 0 && x = = || c = = 0 && b = = 0 && a = = 0
b

Za razliku od Roots, funkcija Reduce pored jednaina, moe rjeavati i nejednaine. Treba voditi
rauna da rjeenja i najprostijih nejednaina koje sadre ope parametre mogu biti veoma glomazna, jer
treba diskutirati brojne mogunosti razliitih vrijednosti parametara. S porastom broja parametara
sloenost rjeenja drastino raste:
2

In[10] := Reduce[x
Out[10] = x < 6 || x

+ 5x > 6, x]
>1

Reduce[a x > 1, x]
1
1
Out[11] = a < 0 && x <
|| a > 0 && x >
a
a
In[11] :=

In[12] :=

Reduce[a x > b, x]

Out[12] =

x Reals && b 0 && a 0 && x || a 0 || a 0 && x

b
a
b
b
b 0 && a 0 && x || a 0 && x
a
a

b
||
a

Funkcija Reduce moe da rjeava i sisteme jednaina odnosno nejednaina. Postoje dva naina da
zadamo sistem. Jedan nain je da sve jednaine odnosno nejednaine koje tvore sistem poveemo
operatorom konjukcije u jedan sloeni uvjet. Drugi nain je da jednaine odnosno nejednaine koje tvore
sistem ubacimo kao elemente liste. U oba sluaja, kao drugi argument funkcije Reduce treba navesti
listu promjenljivih po kojima elimo da bude iskazano rjeenje. Slijede primjeri koji pokazuju oba
naina za rjeavanje sistema jednaina x + y = 5 i x y = 6:
In[13] := Reduce[x + y = = 5 && x y = = 6, {x, y}]
Out[13] = {x = = 2 || x = = 3} && y = = 5 x
In[14] := Reduce[{x + y = = 5, x y = = 6}, {x, y}]
Out[14] = {x = = 2 || x = = 3} && y = = 5 x

U oba sluaja, vidimo da rjeenje za x moe biti 2 odnosno 3, dok za obje vrijednosti x vrijednost za y
mora biti 5x, to znai 3 odnosno 2.

35

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

U sluaju sistema koji ovise od parametara, Reduce takoer ispituje sve mogunosti. Tako, na
primjer sistem jednaina x + a y = b i 3x + a = 2 ima klasino rjeenje ukoliko je a 0. Meutim, i za
a = 0 postoji specijalno rjeenje, pod uvjetom da je b = 2/3, kod kojeg je x = 2/3 a y moe biti bilo
kakav. Reduce uspjeno detektira sve ove sluajeve:
Reduce[{x + a y = = b, 3x + a = = 2}, {x, y}]
2a
2 a 3b
2
2
Out[15] = b = = && a = = 0 && x = =
|| x = =
&& a 0 && y = =
3
3
3
3a
In[15] :=

Ve je reeno da Roots moe rjeavati samo polinomske jednaine. S druge strane, Reduce
uspjeno rjeava sve jednaine koje se algebarskim transformacijama mogu svesti na polinomske, to
ukljuuje sve racionalne i iracionalne jednaine, kao i veliki broj eksponencijalnih, logaritamskih i
trigonometrijskih jednaina. Slijedi primjer jednaine log2 (x + 3) + log2(x + 1) = 3 koju Roots ne moe da
rijei, dok je Reduce rjeava bez problema:
In[16] :=

Roots[Log[2, x+3] + Log[2, x+1] = = 3, x]


Roots::neq: 3

Out[16] =

Log[1 x ] Log[ 3 x ]
Log[ 2]
Log[ 2]
2

is expected to be a polynomial in the variable x.

Roots[Tan[x] +5Tan[x] + 6, x]

Reduce[Log[2, x+3] + Log[2, x+1] = = 3, x]


Out[17] = x = = 1
In[17] :=

Trigonometrijske jednaine obino imaju beskonano mnogo rjeenja, koja najee zavise od neke
proizvoljne cjelobrojne konstante. Tako, na primjer, jednaina tg2 x + 5 tg x + 6 = 0 ima rjeenja
x = arc tg 2 + k ili x = arc tg 3 + k , gdje je k proizvoljan cijeli broj. Mathematica eventualne
proizvoljne konstante koje se mogu pojavljivati u rjeenjima imenuje respektivno sa C[1], C[2], itd.
Pogledajmo kako Reduce prikazuje rjeenje ove jednaine:
2

In[18] := Reduce[Tan[x] +5Tan[x] + 6 = = 0, x]


Out[18] = C[1] Integers && (x = = ArcTan[2] + C[1]

|| x = = ArcTan[3] + C[1])

Eksponencijalne jednaine takoer esto imaju beskonano mnogo rjeenja, ali od kojih su samo
neka realna. Kompleksna rjeenja eksponencijalnih jednaina nas obino ne zanimaju. Nezgoda je to se
Reduce uvijek trudi da pronae sva rjeenja, tako da se dobijaju vrlo nepregledni izrazi:
Reduce[3x+3 3x+1 = = 6561, x]
2 i C[1] Log[9]
2 i C[1] i Log[9]
Out[19] = C[1] Integers && x = =
|| x = =

Log[3] Log[3]
Log[3]
Log[3]
In[19] :=

Sreom, kod eksponencijalnih jednaina se realna rjeenja dobijaju gotovo iskljuivo kada proizvoljna
konstanta koja figurira u njima ima vrijednost 0, tako da to moemo iskoristiti da malo preistimo
rjeenje:
% /. C[1] 0
i Log[9]
Log[9]
Out[20] = x = =
|| x = =
Log[3]
Log[3]
In[20] :=

Ovim smo situaciju znaajno popravili i sveli na dva rjeenja: jedno realno (koje je ujedno i jedino
realno) i jedno kompleksno. Druga mogunost je da prilikom rjeavanja jednaine eksplicitno zadamo da
nas interesiraju samo realna rjeenja:
Reduce[3x+3 3x+1 = = 6561 && x Reals, x]
Log[9]
Out[21] = x = =
Log[3]
In[21] :=

36

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

Ipak, na taj nain moemo osjetno produiti trajanje izraunavanja, jer Mathematica mora odreivati
koje vrijednosti proizvoljne konstante daju realan rezultat. Interesantno je da paket Mathematica nije
primijetio da se rezultat moe pojednostaviti (rjeenje je, zapravo x = 2, to zaista jeste isto to i
ln 9 / ln 3, ali Mathematica to, zaudo, nije uoila). Primjena funkcije FullSimplify e pomoi:
In[21] := % // FullSimplify
Out[21] = x = = 2

Funkcija Reduce zna da rjeava ak i Diofantske jednaine, tj. jednaine u kojima se trae
iskljuivo cjelobrojna rjeenja:
In[22] := Reduce[3 x + 2 y = = 7 && x Integers && y Integers]
Out[22] = C[1] Integers && x = = 1 + 2 C[1] || y = = 2 3 C[1]

Funkcija Reduce je oigledno jako mona. Meutim, ona esto daje rjeenje u dosta nepreglednoj
formi (to je esto uvjetovano i previe opsenim diskusijama raznih sluajeva). Stoga je uvedena i
funkcija Solve, koja nije tako mona i univerzalna kao funkcija Reduce, ali daje rjeenja prikazana u
mnogo preglednijoj formi. Njena sintaksa slina je kao za funkciju Reduce. Ovdje je, kao demonstracija,
prikazano rjeavanje sistema x + y = 5 i x y = 6, kao i sistema x + a y = b i 3x + a = 2, na dva naina:
In[23] := Solve[x + y = = 5 && x y = = 6]
Out[23] = {{x 2, y 3}, {x 3, y

2}}

Solve[x + a y = = b && 3x + a = = 2, {x, y}]


2a
2 a 3b
Out[24] = {{ x
,y
}}
3
3a
In[24] :=

Solve[{x + a y = = b, 3x + a = = 2}, {x, y}]


2a
2 a 3b
Out[25] = {{ x
,y
}}
3
3a
In[25] :=

Vidimo da Solve daje rjeenja iskazana u vidu smjena, koje prikazuju sa im treba smijeniti traene
nepoznate da bi jednaine bile zadovoljene, to je mnogo itljivije u odnosu na logike izraze koje daje
funkcija Reduce. Meutim, iz posljednjeg primjera je takoer vidljivo da Solve ne vri diskusiju u
odnosu na slobodne parametre, jer nije razmotren specijalan sluaj za a = 0 koji je funkcija Reduce
razmotrila (niti je uope istaknuto da a mora biti razliito od nule). Takoer, treba istai da Solve rjeava
samo jednaine i sisteme jednaina, ali ne i nejednaine.
Za polinomske jednaine koje sadre samo jednu promjenljivu (opti broj), mogue je izostaviti
promjenljivu po kojoj se jednaina rjeava i koristiti Solve kao funkciju samo sa jednim argumentom
(ovo ne vai za funkcije Roots ili Reduce):
x2 + 5x + 5 = = 0 // Solve
1
1
Out[26] = {{x 5 5 }, {x 5 5 }}
2
2
In[26] :=

Kod sistema jednaina se takoer moe koristiti verzija funkcije Solve sa samo jednim
argumentom, pod uvjetom da su sve jednaine polinomske, i da ne sadre nikakve promjenljive niti
parametre osim promjenljivih po kojima se sistem rjeava:
In[27] := x + y = = 5 && x y = = 6 // Solve
Out[27] = {{x 2, y 3}, {x 3, y 2}}

U sluaju da nam numerika aproksimacija rjeenja vie odgovara, moemo je uvijek zahtijevati
primjenom funkcije N. Meutim, postoji i funkcija NSolve, koja je slina Solve, ali odmah daje
numerika aproksimativna rjeenja, ne pokuavajui uope nai tana rjeenja, to za sluaj sloenijih
jednaina moe biti efikasnije:

37

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi
2

In[28] := x + 5x + 5 = = 0 // Solve // N
Out[28] = {{x 3.61803}, {x 1.38197}}
2

In[29] := x + 5x + 5 = = 0 // NSolve
Out[29] = {{x 3.61803}, {x 1.38197}}

Kada god znamo da nas zanimaju numerike vrijednosti, mnogo je bolje odmah koristiti NSolve, a
ne prvo traiti tana rjeenja sa Solve, a zatim ih aproksimirati. Naime, ukoliko su tana rjeenja vrlo
glomazna, u postupku njihove aproksimacije moe se vie izgubiti na tanosti nego u sluaju kada
neposredno traimo aproksimativna rjeenja. Uzmimo kao primjer jednainu x3 6 x2 2 x + 3 = 0, ija su
tana rjeenja vrlo nezgrapna i glomazna:
In[30] :=

x3 6x2 2x + 3 = = 0 // Solve

Out[30] =

{{x 2
{x 2
{x 2

12 153 i

1 i

9519

1/ 3

2/3

3 12 153 i
23

1 i

14

153 i
1/ 3
9519
3
2

2/3

3 12 153 i 9519

1/ 3

2 32 / 3

9519

1/ 3

},

7 1 i 3

},

153 i 9519 1 / 3
7 1 i 3
}}
3
153 i 9519 1 / 3
2
3
2

Probajmo aproksimirati ova rjeenja:


In[31] := % // N
17
Out[31] = {{x 6.24338 + 5.55112 10

}, {x 0.5821 4.44089 1016 },


{x 0.825476 + 2.22045 1016 }}

Rjeenja izgledaju kao da su kompleksna. Meutim, ako paljivije pogledamo ova rjeenja,
primijetiemo da im je imaginarni dio izuzetno mali (reda veliine 1016 odnosno 1017), to navodi na
pomisao da ovaj imaginarni dio potie od nesavreno izvedene numerike aproksimacije tanih rjeenja,
u kojima je figurirala imaginarna jedinica. Funkcija Chop moe se koristiti da preisti ovakva rjeenja.
Ona zaokruuje na nulu sve dijelove broja (realne ili imaginarne) koji su po apsolutnoj vrijednosti manji
od 1010 (takvi dijelovi obino su posljedica netanosti raunanja):
In[32] := % // Chop
Out[32] = {{x 6.24338}, {x

0.5821}, {x 0.825476}}

Ovo ve izgleda mnogo razumnije. Meutim, da smo na polaznu jednainu primijenili funkciju NSolve,
odmah bismo dobili ovakva rjeenja, bez nepotrebnih komplikacija:
In[33] := x 6x 2x + 3 = = 0 // NSolve
Out[33] = {{x 6.24338}, {x 0.5821}, {x
3

0.825476}}

Ukoliko verziju funkcije Solve sa samo jednim argumentom primijenimo na jednainu ili sistem u
kojima se javljaju jo neke promjenljive ili parametri, pored onih promjenljivih po kojima elimo dobiti
rjeenje, Solve e rijeiti jednainu ili sistem po onim promjenljivim po kojima se dobija najprostije
rjeenje, uz poruku upozorenja da to ne mora biti ono to smo eljeli. Izlaz iz takve situacije je koritenje
funkcije Solve sa dva parametra, gdje emo pomou drugog argumenta eksplicitno naznaiti po kojoj
promjenljivoj elimo dobiti rjeenje:
In[34] :=

x2 + a x + 5 = = 0 // Solve
Solve::svars : Equations may not give solutions for all "solve" variables.

Out[34] =

{{a

5 x 2
}}
x

38

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

Solve[x2 + a x + 5 = = 0, x]
1
1
2
2
Out[35] = {{x a 20 a }, {x a 20 a }}
2
2
In[35] :=

U sluaju kada jednaina nije polinomska, verzija funkcije Solve sa jednim argumentom moe
generirati manje ili vie nedovrena rjeenja, ak i u sluaju kada jednaina sadri samo jednu
promjenljivu. Za sluaj kada su rjeenja veoma nedovrena (kao u drugom od dva primjera koja slijede),
pa samim tim i neupotrebljiva, moe se pojaviti i poruka upozorenja:
2

In[36] := Tan[x] + 5Tan[x] + 6 = = 0 // Solve


Out[36] = {{Tan[x] 3}, {Tan[x] 2}}
In[37] :=

1 + Sin[2x] = = Cos[x] // Solve


Solve::svars : Equations may not give solutions for all "solve" variables.

Out[37] =

{{Cos[x] 1 + Sin[2 x]}}

Djelimino rjeenje u tim situacijama je eksplicitno naglaavanje da elimo rjeenje eksplicitno


izraeno po nepoznatoj promjenljivoj. Meutim, ak i u tom sluaju, Solve esto nee biti u stanju da
pronae sva rjeenja. To se najee deava kod trigonometrijskih jednaina, koje obino imaju
beskonano mnogo rjeenja. U takvom sluaju, Solve obino pronae samo rjeenja na osnovnom
periodu, uz prateu poruku upozorenja, koja nas upuuje da za kompletno rjeenje trebamo koristiti
funkciju Reduce:
In[38] :=

Solve[Tan[x]2 + 5Tan[x] + 6 = = 0, x]
Solve::ifun: Inverse functions are being used by Solve, so some solutions may not be found; use Reduce for complete
solution information.

Out[38] =
In[39] :=

{{x ArcTan[2]}, {x ArcTan[3]}}

Solve[1 + Sin[2x] = = Cos[x], x]


Solve::ifun: Inverse functions are being used by Solve, so some solutions may not be found; use Reduce for complete
solution information.

Out[39] =

{{x 0}, {x ArcCos

1 1
1
1/ 3
1/ 3
224 24 87 28 3 87 },
3 12
6
1 1
{x ArcCos
1 i 3 224 24 87 1 / 3 1 1 i 3 28 3 87 1 / 3 },
3 24
12
1 1
{x ArcCos
1 i 3 224 24 87 1 / 3 1 1 i 3 28 3 87 1 / 3 }}
3 24
12

Kako su rjeenja u posljednjem primjeru svakako preglomazna, uputno je traiti njihovu numeriku
aproksimaciju (ili, jo bolje, koristiti NSolve umjesto Solve):
In[40] := % // N
Out[40] = {{x

0.}, {x 1.21556}, {x 2.17858 0.591541 }, {x 2.17858 + 0.591541 }}

to se tie logaritamskih jednaina, njih Solve obino rjeava podjednako dobro kao i Reduce. Isto
vrijedi i za racionalne, kao i za iracionalne jednaine. Kod eksponencijalnih jednaina, Solve tipino
pronae sva realna i pokoje kompleksno rjeenje, tako da Solve obino daje mnogo pregledniji rezultat
nego Reduce za sluaj eksponencijalnih jednaina (kompleksna rjeenja ovakvih jednaina nas obino
ne zanimaju):
Solve[Log[2, x+3] + Log[2, x+1] = = 3, x]
Out[41] = {{x 1}}
In[41] :=

Solve[3x+3 3x+1 = = 6561, x]


i 2 Log[3] Log[81]
Out[42] = {{x 2}, {x
}}
Log[3]
In[42] :=

39

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

Bez obzira da li koristimo funkciju Roots, Reduce ili Solve, Mathematica e uvijek uspjeti pronai
tana rjeenja u sluaju polinomskih jednaina iji stepen ne prelazi 4, odnosno, pri primjeni funkcija
Reduce ili Solve, drugih tipova jednaina koje se algebarskim postupcima mogu svesti na polinomske
jednaine iji stepen ne prelazi 4. Meutim, kod polinomskih jednaina iji stepen prelazi 4, kao i
jednaina koje se svode na polinomske jednaine stepena veeg od 4, u opem sluaju nije mogue
izraziti tana rjeenja preko elementarnih funkcija. Mathematica tana rjeenja takvih jednaina izraava
preko takozvanih Root objekata, kao to je vidljivo iz sljedeeg primjera:
7

In[43] := x + x + 1 = = 0 // Solve
7
Out[43] = {{x Root[1+#1+#1 &, 1]},

{x Root[1+#1+#17&, 2]}, {x Root[1+#1+#17&, 3]},


{x Root[1+#1+#1 &, 4]}, {x Root[1+#1+#17&, 5]}, {x Root[1+#1+#17&, 6]},
{x Root[1+#1+#17&, 7]}}
7

Root objekte treba shvatiti kao specijalnu vrstu simbola, kao to 2 nije nita drugo nego simbol
za broj iji je kvadrat jednak 2, odnosno kao to log2 3 nije nita drugo nego simbol za broj koji daje 3
kada se 2 digne na taj broj. Mathematica zna izvoditi razne raunske operacije sa Root objektima, pri
emu se kao rezultat mogu dobiti drugi Root objekti, a ponekad i obini brojevi (za to je obino
potrebno izvriti funkciju FullSimplify). Meutim, za nas je mnogo bitnije da Mathematica zna
izraunati njihove numerike aproksimacije:
In[44] := % // N
Out[44] = {{x

0.796544}, {x 0.705298 0.637624 }, {x 0.705298 + 0.637624 },


{x 0.123762 1.05665 }, {x 0.123762 + 1.05665 },
{x 0.979808 0.516677 }, {x 0.979808 0.516677 }}

Ve smo vidjeli da funkcija Solve daje rezultate u vidu pravila (preciznije, liste listi pravila). Ovi
nije uvedeno sluajno. Naime, ako se sjetimo kako se primjenjuju pravila na izraze, ovo svojstvo se
moe veoma efektno iskoristiti. Slijede tri interesantna primjera, koje je lako analizirati. Prvi kreira listu
iji su elementi rjeenja jednaine x2 + 5x + 6 = 0, drugi primjer kreira listu iji su elementi reciprone
vrijednosti kvadrata rjeenja te iste jednaine, dok trei primjer kreira listu iji su elementi vrijednosti
izraza x2 + y3, pri emu su x i y rjeenja sistema jednaina x + y = 5 i x y = 6 (lista ima dva elementa, jer
ovaj sistem ima dva para rjeenja):
2

In[45] := x /. Solve[x
Out[45] = {3, 2}

+ 5x + 6 = = 0, x]

1
/. Solve[x2 + 5x + 6 = = 0, x]
2
x
1 1
Out[46] = { , }
9 4
In[46] :=

In[47] := x + y /. Solve[{x + y
Out[47] = {31, 17}

= = 5, x y = = 6}, {x, y}]

U nekim sluajevima nas ne zanima kompletno rjeenje sistema jednaina, nego samo elimo iz
sistema jednaina eliminirati jednu ili vie promjenljivih, odnosno dobiti novi sistem ili jednainu u
kojima se ne javljaju neke promjenljive. Za tu svrhu koristimo funkciju Eliminate, sa dva argumenta.
Prvi argument je sistem, zadan u vidu liste jednaina ili konjukcije jednaina, dok je drugi argument
promjenljiva ili lista promjenljivih koje elimo eliminirati. Na primjer, eliminirajmo promjenljivu x iz
sistema jednaina x5 + y5 = 1, x + y = 2:
5

In[48] := Eliminate[{x + y = = 1, x + y = = 2}, x]


2
3
4
Out[48] = 80 y + 80 y 40 y + 10 y = = 31

Vidimo da smo kao rezultat dobili jednainu u kojoj ne figurura x. Eliminate se moe koristiti i za
eliminaciju promjenljivih iz sistema koji se inae ne mogu rijeiti do kraja nikakvim tanim postupcima.

40

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

Na kraju treba istai da postoje tvrdokorne jednaine koje se, mada imaju rjeenja, ne mogu
egzaktno rijeiti nikakvim algebarskim postupcima, ve samo priblinim numerikim metodama (npr.
lociranjem intervala koji sadri traeno rjeenje putem isprobavanja, a zatim postupnim suavanjem tog
intervala do postizanja zadovoljavajue tanosti). Primjer takve jednaine je cos x = 2 x, za koju se
crtanjem grafika funkcija y = cos x i y = 2 x lako vidi da se presjecaju u jednoj taki (koja predstavlja
rjeenje). Ovakve jednaine ne moe da rijei ni Solve ni Reduce. Solve konstatira da se jednaina
vjerovatno ne moe rijeiti algebarskim postupcima, dok Reduce prosto konstatira da pomou metoda
koje su raspoloivi ovoj funkciji ne zna rijeiti ovakve jednaine:
In[49] :=

Solve[x + Cos[x] = = 2, x]
Solve::tdep : The equations appear to involve the variables to be solved in an essentially non-algebraic way.

Out[49] =
In[50] :=

Solve[x + Cos[x] = = 2, x]

Reduce[x + Cos[x] = = 2, x]
Reduce::nsmet : This system cannot be solved with the methods available to Reduce.

Out[50] =

Reduce[x + Cos[x] = = 2, x]

Ovakve jednaine se ipak mogu rijeiti pomou funkcije FindRoot koja ima slinu sintaksu kao i
Reduce, samo se sa promjenljivom po kojoj se rjeava jednaina u listi navodi i poetna pretpostavka za
rjeenje u okolini koje se trai rjeenje. Jasno je da se u ovom sluaju moe oekivati samo
aproksimativno rjeenje (funkcija FindRoot za nalaenje rjeenja koristi pozati numeriki Newtonov
metod tangente):
In[51] := FindRoot[x + Cos[x]
Out[51] = {x 2.98827}

= = 2, {x, 1}]

Funkciju FindRoot treba koristiti samo ukoliko nita drugo ne pomogne, zbog nekoliko razloga.
Prvo, ova funkcija moe nalaziti samo aproksimativna rjeenja, i zbog toga je neupotrebljiva za
jednaine koje ovise od parametara (s obzirom da se rjeenje trai isto numeriki). Drugo, ovoj funkciji
se mora zadati poetna aproksimacija rjeenja, pri emu se ne garantira nalaenje rjeenja ukoliko je ova
poetna aproksimacija isuvie daleko od pravog rjeenja (mada se u primjeru gornje jednaine ispravno
rjeenje dobija za praktino bilo kakvu poetnu aproksimaciju). Tree, funkcija FindRoot uvijek nalazi
najvie jedno rjeenje, ak i u sluaju kada jednaina ima vie rjeenja. Obino biva pronaeno rjeenje
koje je najblie poetnoj aproksimaciji. Slijedi da u sluaju jednaina sa vie rjeenja, pronaeno rjeenje
moe ovisiti od poetne aproksimacije:
In[52] := FindRoot[Tan[x] = =
Out[52] = {x 1.13227}

x + 1, {x, 0}]

In[53] := FindRoot[Tan[x] = =
Out[53] = {x 10.9118}

x + 1, {x, 10}]

Stoga se FindRoot najee koristi tako da se jednaina prvo prikae grafiki (o tome emo govoriti
kasnije), nakon ega se sa grafika grubo oita mogua lokacija rjeenja, i nakon toga iskoristi FindRoot
za nalaenje preciznijih rjeenja u okolici grubo oitanih vrijednosti.

8. Manipulacije sa listama, vektorima i matricama


U Poglavlju 3. ve su prikazane neke operacije koje djeluju nad listama. Pored njih, postoji mnotvo
funkcija koje kao svoje argumente primaju liste, i koje kao rezultat daju nove liste. Tako, funkcija Join
nadovezuje meusobno liste koje joj se proslijede kao argumenti u jednu veu listu, zadravajui isti
poredak elemenata kakav je bio u pojedinanim listama. Slino djeluje i funkcija Union, ali ona iz
novoformirane liste uklanja elemente koji se ponavljaju (ona zapravo posmatra liste kao skupove, i
formira njihovu uniju), i sortira njene elemente u rastui ili u abecedni poredak. Funkcija Union se moe
primijeniti i nad samo jednom listom, pri emu se vri odstranjivanje elemenata koji se ponavljaju i
sortiranje (ovim se lista zapravo pretvara u skup). Funkcija Intersection daje listu elemenata koji su
41

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

zajedniki u svim listama koje su navedene kao njeni argumenti (odnosno, formira njihov presjek).
Funkcija Reverse kreira listu sa obrnutim poretkom elemenata u odnosu na listu zadanu kao argument.
Konano, funkcija Sort kreira listu sa istim elementima, ali u poretku sortiranom u rastui ili abecedni
poredak. Pri tome, za razliku od funkcije Union, ne dolazi do odstranjivanja elemenata koji se
ponavljaju. Slijedi nekoliko primjera koji ilustriraju ove funkcije:
In[1] :=

a = {4, 9, 6, 4, 7, 3, 6, 2, 8};
b = {7, 1, 6, 4, 6, 0};

In[2] := Join[a, b]
Out[2] = {4, 9, 6, 4, 7, 3, 6, 2, 8, 7, 1, 6, 4, 6, 0}
In[3] := Union[a, b]
Out[3] = {0, 1, 2, 3, 4, 6, 7, 8, 9}
In[4] := Union[a]
Out[4] = {2, 3, 4, 6, 7, 8, 9}
In[5] := Intersection[a, b]
Out[5] = {4, 6, 7}
In[6] := Reverse[a]
Out[6] = {8, 2, 6, 3, 7, 4, 6, 9, 4}
In[7] := Sort[a]
Out[7] = {2, 3, 4, 4, 6, 6, 7, 8, 9}
In[8] := Sort[a] // Reverse
Out[8] = {9, 8, 7, 6, 6, 4, 4, 3, 2}

Postoje funkcije koje izdvajaju pojedine elemente iz liste. Funkcija Take izdvaja podlistu
uzastopnih elemenata iz liste. Njen prvi parametar je lista iz koje izdvajamo elemente, a drugi parametar
lista od dva elementa koji predstavljaju indekse (redne brojeve) prvog i posljednjeg elementa koji se
izdvajaju. Ukoliko se umjesto liste kao drugi parametar upotrijebi broj n, tada se iz liste izdvaja prvih n
elemenata:
In[9] := Take[a, {3, 6}]
Out[9] = {6, 4, 7, 3}
In[10] := Take[a, {3, 3}]
Out[10] = {6}
In[11] := Take[a, 3]
Out[11] = {4, 9, 6}

Primijetimo da u drugom primjeru rezultat nije broj 6, nego jednolana lista iji je element broj 6.
Funkcija First daje prvi element liste, funkcija Last daje posljednji element liste, dok funkcija Rest
daje listu koja sadri sve elemente osim prvog. Funkcija Part daje element liste iji se indeks zadaje kao
drugi argument funkcije. Umjesto Part[a, n] skraeno se moe pisati a[[n]]:
In[12] := First[a]
Out[12] = 4
In[13] := Last[a]
Out[13] = 8
In[14] := Rest[a]
Out[14] = {9, 6, 4, 7, 3, 6, 2, 8}

42

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

In[15] := Part[a, 3]
Out[15] = 6
In[16] := a[[3]]
Out[16] = 6

Funkcija Drop moe se koristiti na dva naina. Njen prvi parametar je u svakom sluaju neka lista.
Ukoliko je drugi parametar neki broj n, ona vraa listu iz koje je izbaeno prvih n elemenata. Ukoliko je
drugi parametar lista od dva broja oblika {m, n} ona vraa listu iz koje su izbaeni elementi sa indeksima
od m do n. Specijalno, ukoliko je drugi parametar samo lista sa jednim elementom oblika {n}, tada se iz
liste izbacuje samo n-ti element:
In[17] := Drop[a, 3]
Out[17] = {4, 7, 3, 6, 2, 8}
In[18] := Drop[a, {4, 7}]
Out[18] = {4, 9, 6, 2, 8}

Funkcija Length daje kao rezultat broj elemenata u listi:


In[19] := Length[a]
Out[19] = 9

Funkcija Table je izuzetno korisna za kreiranje veih listi, iji se elementi ponaaju po nekom
zakonu, odnosno liste kod kojih je vrijednost i-tog elementa data nekim izrazom koji ovisi od i. Ova
funkcija se koristi u obliku
Table[izraz, iterator]
Ovdje je izraz izraz koji definira elemente liste, dok iterator moe imati jedan od sljedea etiri oblika
(uz prikazano znaenje):
{promjenljiva, poetak, kraj, korak}

{promjenljiva, poetak, kraj}

{promjenljiva, kraj}

{broj_ponavljanja}

Daje listu koja se sastoji od vrijednosti izraza izraz za sve


vrijednosti promjenljive promjenljiva od vrijednosti poetak do
vrijednosti kraj sa korakom korak
Daje listu koja se sastoji od vrijednosti izraza izraz za sve
vrijednosti promjenljive promjenljiva od vrijednosti poetak do
vrijednosti kraj sa korakom 1
Daje listu koja se sastoji od vrijednosti izraza izraz za sve
vrijednosti promjenljive promjenljiva od vrijednosti 1 do
vrijednosti kraj sa korakom 1
Daje listu koja se sastoji od vrijednosti izraza izraz izraunatog
broj_ponavljanja puta

Slijede tri primjera koji redom generiraju listu kvadrata svih neparnih brojeva od 5 do 99, zatim listu
prvih 10 prostih brojeva (primijetimo upotrebu funkcije Prime), kao i listu koja se sastoji od 30 nula:
2

In[20] := Table[i , {i, 5, 99, 2}]


Out[20] = {25, 49, 81, 121, 169, 225, 289, 361, 441, 529, 625, 729, 841, 961, 1089, 1225, 1369, 1521,

1681, 1849, 2025, 2209, 2401, 2601, 2809, 3025, 3249, 3481, 3721, 3969, 4225, 4489,
4761, 5041, 5329, 5625, 5929, 6241, 6561, 6889, 7225, 7569, 7921, 8281, 8649, 9025,
9409, 9801}
In[21] := Table[Prime[i], {i, 10}]
Out[21] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29}
In[22] := Table[0, {30}]
Out[22] = {0, 0, 0, 0, 0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}

43

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

Interesantan je i sljedei primjer, koji koristi Table da generira listu koeficijenata u binomnom
razvoju oblika (x + y)7. U njemu je iskoritena ranije spomenuta funkcija Binomial, za raunanje
binomnih koeficijenata:
In[23] := Table[Binomial[7, i], {i, 0, 7}]
Out[23] = {1, 7, 21, 35, 35, 21, 7, 1}

Za razna eksperimentiranja, kao i za statistike simulacije, zgodno je imati mogunost kreiranja listi
iji su elementi, na izvjestan nain, sluajni brojevi. To se moe izvesti takoer pomou funkcije Table,
samo nam je potreban izraz koji kao rezultat daje sluajan broj. Za tu svrhu slui funkcija Random sa
dva argumenta. Prvi argument je tip sluajnog broja, a podrani tipovi su Integer (cijeli broj), Real
(realni broj) i Complex (kompleksni broj). Drugi argument je lista od dva elementa koji definiraju opseg
u kojem se generirani sluajni broj mora nalaziti. Slijede dva primjera (s obzirom da su rezultati sluajni,
ovo je samo jedan mogui scenario, Vai rezultati e se gotovo sigurno razlikovati, ali navedeni opseg
mora biti ispotovan):
In[24] := Random[Integer, {1, 100}]
Out[24] = 39
In[25] := Random[Real, {1, 100}]
Out[25] = 85.1689

Sad nije teko zakljuiti kako bismo mogli generirati, recimo, listu od 100 sluajnih brojeva u
opsegu od 1 do 6. Ovo moe biti korisno, na primjer, za simulaciju ishoda 100 bacanja igrae kockice:
In[26] := Table[Random[Integer, {1, 6}, {100}]
Out[26] = {4, 3, 6, 1, 5, 5, 4, 2, 1, 2, 1, 3, 1, 5, 5, 1, 2, 2, 6, 4, 1, 2, 5, 2, 1, 4, 1, 4, 5, 5, 5, 3, 6, 3, 2, 5, 4, 1,

4, 6, 6, 3, 6, 5, 1, 4, 1, 2, 1, 2, 3, 3, 5, 6, 4, 2, 6, 3, 2, 6, 4, 4, 4, 1, 4, 2, 2, 6, 6, 6, 5, 4, 3, 3, 4, 2,
5, 3, 5, 6, 2, 5, 5, 3, 6, 4, 6, 6, 2, 2, 4, 1, 5, 4, 1, 4, 2, 5, 5, 6}
Razumije se, i ovdje su rezultati sluajni, pa je prikazani rezultat samo jedan od moguih ishoda.
Znaaj listi u paketu Mathematica je u tome to se pomou njih reprezentiraju vani matematski
objekti, kao to su vektori i matrice. Tako, Mathematica sve vektore posmatra kao liste. Da bismo
formirali neki vektor zadan koordinatama, prosto njegove koordinate stavimo u listu. Operatori +,
i * slobodno se smiju koristiti za sabiranje i oduzimanje vektora, kao i za mnoenje vektora sa
skalarom, jer su te operacije definirane na isti nain kao to Mathematica tretira te operacije nad listama.
Meutim, za mnoenje vektora ne smije se koristiti operator *, s obzirom da se mnoenje listi izvodi
element po element, a tako se vektori ne mnoe. Poznato je da se vektori mogu mnoiti na dva naina:
skalarno i vektorsko mnoenje. Skalarno mnoenje dva vektora izvodi se pomou operatora . (taka), a
vektorsko pomou operatora (krsti), koji se sa tastature moe dobiti pomou kombinacije
|Esc| cross |Esc|.
In[27] := {3, 4, 2}*{2, 8, 5}
Out[27] = {6, 32, 10}

(Ovo nije produkt vektora)

In[28] := {3, 4, 2} {2, 8, 5}


Out[28] = {6, 32, 10}

(Ni ovo nije)

In[29] := {3, 4, 2} . {2, 8, 5}


Out[29] = 48

(Skalarni produkt)

In[30] := {3, 4, 2} {2, 8, 5}


Out[30] = {4, 11, 6}

(Vektorski produkt)

Alternativno, umjesto operatora . odnosno , mogu se koristiti funkcije Dot i Cross sa dva
argumenta:

44

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

In[31] := Dot[{3, 4, 2}, {2, 8, 5}]


Out[31] = 48
In[32] := Cross[{3, 4, 2}, {2, 8, 5}]
Out[32] = {4, 11, 6}

Ve smo rekli da u paketu Mathematica liste mogu sadravati druge liste. Ova osobina se koristi za
potrebe rada sa matricama. Naime, Mathematica tretira matrice kao liste iji su elementi liste koje
respektivno predstavljaju redove matrice. Pri tome, broj elemenata u svakoj listi lanici treba biti isti,
inae Mathematica nee smatrati da se radi o matrici. Recimo, lista {{1, 2}, {1, 3, 5}, {4}} nije matrica,
dok lista {{1, 3, 4, 2}, {5, 3, 2, 2}, {{0, 7, 3, 9}} jeste. Neka, na primjer, elimo definirati matricu
3 4 2

a 1 8 5
3 4 7

U paketu Mathematica to moemo uiniti ovako:


In[33] :=

a = {{3, 4, 2}, {1, 8, 5}, {3, 4, 7}};

Meutim, ukoliko ne kaemo drugaije, Mathematica e ovakvu listu listi prikazivati upravo u onom
obliku to ona jeste lista listi:
In[34] := a
Out[34] = {{3, 4, 2}, {1, 8, 5}, {3, 4, 7}}

Da bi Mathematica listu listi prikazala u obliku matrice, potrebno je zadati funkciju MatrixForm:
In[35] := a // MatrixForm
Out[35] // MatrixForm =

3 4 2

1 8 5
3 4 7

Prilikom kreiranja matrica, moemo dobiti na preglednosti ukoliko svaki od redova matrice
definiramo u posebnom redu, kao u sljedeem primjeru:
b = {{2, 1, 5},
{4, 4, 3},
{1, 0, 2}}
Out[36] = {{2, 1, 5}, {4, 4, 3}, {1, 0, 2}}
In[36] :=

Funkcija MatrixForm moe se primijeniti i na obine liste prostih elemenata, odnosno vektore. U
tom sluaju, elementi liste (vektora) prikazuju se u formi vektor-kolone (odnosno matrice sa samo
jednom kolonom), kao to je vidljivo iz sljedeeg primjera:
In[37] :=

c = {2, 8, 5};

In[38] := c // MatrixForm
Out[38] // MatrixForm =

2

8
5

esta greka prilikom definiranja matrica je zaboravljanje zareza koji razdvaja pojedine redove
matrice. Ukoliko to uinimo, Mathematica e shvatiti da elimo obaviti mnoenje listi koje bi trebale
formirati redove matrice:

45

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

In[39] := {{2, 1, 5} {4, 4, 3} {1, 0, 2}}


Out[39] = {{8, 0, 30}}

S obzirom na nain kako se izvode operacije sabiranja, oduzimanja i mnoenja sa listama, lako
zakljuujemo da operacije sabiranja matrica, oduzimanja matrica i mnoenja skalara sa matricom
moemo izvoditi koristei uobiajenu sintaksu za sabiranje, oduzimanje i mnoenje. Pri tome, naravno,
rezultat u formi matrice dobijamo samo ukoliko to eksplicitno naglasimo primjenom funkcije
MatrixForm:
In[40] := a+b
Out[40] = {{5, 5, 7}, {5, 12, 8}, {4, 4, 9}}
In[41] := % // MatrixForm
Out[41] // MatrixForm =

5 5 7

5 12 8
4 4 9

In[42] := 2a b // MatrixForm
Out[42] // MatrixForm =

4 7 1

2 12 7
5 8 12

S druge strane, mnoenje matrica se ne smije obavljati koristei uobiajenu sintaksu za mnoenje, s
obzirom da e se na taj nain obaviti mnoenje element po element (u skladu sa nainom kako mnoenje
djeluje na liste), a matrice se tako ne mnoe:
In[43] := a b // MatrixForm
Out[43] // MatrixForm =

6 4 10

4 32 15
3 0 14

Stoga, za matrino mnoenje koristimo operator ., odnosno isti operator kao za skalarno mnoenje
vektora:
In[44] := a . b // MatrixForm
Out[44] // MatrixForm =

24 19 31

39 33 39
29 19 41

Vidimo da operator . moe imati dvije razliite uloge: skalarno mnoenje dva vektora, i matrino
mnoenje dvije matrice. Ovaj operator ima i treu ulogu mnoenje matrice sa vektorom. Pri tome se
vektor tretira kao vektor kolona, odnosno matrica sa samo jednom kolonom:
In[45] := a . c // MatrixForm
Out[45] // MatrixForm =

48

91
73

Na ovom mjestu treba ukazati na jednu greku (bag) u paketu Mathematica. Naime, nije mogue
iskoristiti funkciju MatrixForm prilikom dodjeljivanja matrice nekoj promjenljivoj s ciljem da se u
promjenljivu smjesti matrica koja e se uvijek prikazivati u matrinoj formi. Ukoliko uradimo tako
neto, prividno e sve izgledati kako treba, ali e sa tako dodijeljenom matricom Mathematica odbijati

46

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

da obavlja bilo kakve dalje operacije (jedino e se ona sama prikazivati pravilno). Ovo moe djelovati
veoma frustrirajue, s obzirom da se ova greka teko uoava. Ukoliko ipak elimo prikazati rezultat
dodjele u matrinoj formi, a da pri tome sama dodjela ispravno funkcionira, itavu dodjelu moramo
pisati unutar zagrade (na taj nain, funkcija MatrixForm e se primijeniti samo na rezultat dodjele, a ne
na ono to se dodjeljuje):
In[46] := (mat = {{1, 3, 6}, {1, 0, 4}, {2, 3, 0}}) // MatrixForm
Out[46] // MatrixForm =

1 3 6

1 0 4
2 3 0

Za nalaenje inverzne matrice koristi se funkcija Inverse:


In[47] := Inverse[a] //
Out[47] // MatrixForm =
9
25
2
25
1
5

15
3
20

MatrixForm

25
13
100

1
5

Vidimo da Mathematica zna izraunati inverznu matricu u tanoj formi, pod uvjetom da su svi
elementi matrice tani brojevi. U sluaju potrebe, nije nikakav problem dobiti rezultate u decimalnom
obliku:
In[48] := a // Inverse //
Out[48] // MatrixForm =

N // MatrixForm

0.36 0.2 0.04

0.08 0.15 0.13


0.2
0.
0.2

Naravno, inverzna matrica pomnoena sa samom matricom mora dati jedininu matricu:
In[49] := Inverse[a] . a
Out[49] // MatrixForm =

// MatrixForm

1 0 0
0 1 0

0 0 1

Funkcija Transpose nalazi transponiranu matricu date matrice. Ova funkcija sama za sebe nije
osobito korisna, ali se lijepo moe iskoristiti unutar sloenijih matrica. Na primjer, naimo prvo
transponiranu matricu matrice a iz dosadanjih primjera, a nakon toga produkt aT a, pri emu aT
oznaava transponiranu matricu matrice a:
In[50] := Transpose[a] // MatrixForm
Out[50] // MatrixForm =

3 1 3

4 8 4
2 5 7

In[51] := a . Transpose[a] // MatrixForm


Out[51] // MatrixForm =

29 45 39

45 90 70
39 70 74

Za stepenovanje matrice u matrinom smislu nije mogue koristiti klasinu sintaksu za


stepenovanje, jer e se uz primjenu klasine sintakse obaviti stepenovanje element po element (s
obzirom da su matrice interno predstavljene kao liste), to nije u skladu sa definicijom stepena matrice:
47

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi
5

In[52] := a // MatrixForm
Out[52] // MatrixForm =

32
243 1024
1 32768 3125

243 1024 16807

Stoga, da bismo obavili stepenovanje matrice u matrinom smislu, moramo koristiti funkciju
MatrixPower sa dva argumenta: matricom koja se stepenuje, i eksponentom:
In[53] := MatrixPower[a, 5] // MatrixForm
Out[53] // MatrixForm =

40955 110900 102714

71613 193084 179137


66295 178420 165359

Eksponent u funkciji MatrixForm nije ogranien iskljuivo na cijele brojeve. Na primjer, za


eksponent 1 dobijamo inverznu matricu, za eksponent 1/2 dobijamo kvadratni korijen matrice (odnosno
matricu koja matrino pomnoena sama sa sobom daje polaznu matricu), itd.
injenica da se sintaksa za izvjesne matrine operacije u paketu Mathematica razlikuje od
uobiajene, est je uzrok greaka pri radu sa matricama. Pretpostavimo, na primjer, da elimo izraunati
vrijednost sljedeeg matrinog izraza:
3

1 3 3 5 4 2 2 0
0 2 3 2 4 1 3 1 3

Mnogi bi naivno pokuali ovaj izraz izraunati na sljedei nain:


In[54] := {{1, 3}, {0, 2}} + ( 3 {{3, 5}, {2, 4}} {{4, 2}, {1, 3}}
Out[54] // MatrixForm =
25
24
1
5

{{1, 3}, {0, 2}}3 )1 // MatrixForm

91

30
19
9

Ovaj rezultat je, meutim, netaan, s obzirom da su sve operacije obavljene element po element.
Ispravan nain da se izrauna ovaj izraz je sljedei:
In[55] :=

{{1, 3}, {0, 2}} + Inverse[3 {{3, 5}, {2, 4}} . {{4, 2}, {1, 3}}
MatrixPower[{{1, 3}, {0, 2}}, 3]] // MatrixForm

Out[55] // MatrixForm =

78
17

168

27

8
293
168

Funkcije Det i MatrixRank raunaju, respektivno, determinantu i rang matrice:


In[56] := Det[a]
Out[56] = 100
In[57] := {{1, 2}, {3, 4}} //
Out[57] = 2

Det

In[58] := MatrixRank[a]
Out[58] = 3

Za nalaenje sopstvenih vrijednosti i sopstvenih vektora neke matrice koriste se funkcije


Eigenvalues i Eigenvectors. Eigenvalues vraa listu sopstvenih vrijednosti matrice, dok Eigenvectors
vraa listu sopstvenih vektora matrice koji odgovaraju sopstvenim vrijednostima naenim sa
Eigenvalues. S obzirom da je svaki vektor takoer lista, Eigenvectors kao rezultat daje listu listi:

48

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

In[59] :=

Eigenvalues[{{1, 2}, {3, 4}}]

Out[59] =
In[60] :=

1
5 33 , 1 5 33 }
2
2

Eigenvectors[{{1, 2}, {3, 4}}]

Out[60] =

{{

4 1
4 1
5 33 , 1}, { 5 33 , 1}}
3 6
3 6

Treba napomenuti da su tane sopstvene vrijednosti i sopstveni vektori za matrice iole veih
dimenzija esto vrlo glomazni izrazi. Mathematica radi utede prostora takve izraze obino predstavlja u
vidu ve razmatranih Root objekata, ak i u sluajevima kada bi se oni mogli izraziti preko korijena. To
vidimo u sljedeem primjeru, gdje pokuavamo nai sopstvene vrijednosti jedne 3 3 matrice:
mat = {{1, 2, 1}, {2, 3, 1}, {5, 4, 2}};
Eigenvalues[mat]
2
2
2
3
3
3
Out[61] = {Root[3 2 #1 6 #1 + #1 &, 3], Root[3 2 #1 6 #1 + #1 &, 1], Root[3 2 #1 6 #1 + #1 &, 2]}
In[61] :=

Uz pomo funkcije ToRadicals mogue je Root objekte pretvoriti u izraze sa korijenima, pod
uvjetom da je to uope mogue. Meutim, dobijeni izrazi su tipino veoma glomazni:
In[62] :=

% // ToRadicals

Out[62] =

{2
2

12 153 i

1 i

9519

1/ 3

2/3

3 12 153 i
23

14

153 i
1/ 3
9519

9519

1/ 3

3
2

2/3

,2

1 i

153 i

9519

1/ 3

7 1 i 3

1/ 3

23

7 1 i 3

3
2

3 12 153 i 9519
2/3

3
2

153 i

9519

1/ 3

Mnogo je korisnije traiti numeriku aproksimaciju ovakvih rjeenja. U navedenom primjeru, imaginarni
dio oito potie od raunskih greaka, pa emo rjeenje dodatno preistiti funkcijom Chop:
In[63] := % // N
17
Out[63] = {6.24338 + 5.55112 10
In[64] := % // Chop
Out[64] = {6.24338, 0.825476,

, 0.825476 + 2.22045 1016 , 0.5821 4.44089 1016 }

0.5821}

Meutim, ukoliko odmah znamo da elimo aproksimativne numerike vrijednosti sopstvenih


vrijednosti ili sopstvenih vektora matrice, mnogo je bolje obrnuti redoslijed funkcija Eigenvalues
(odnosno Eigenvectors) i N, odnosno prvo primijeniti funkciju N, pa tek onda funkciju Eigenvalues ili
Eigenvectors. Pored toga to taj redoslijed daje tanija rjeenja, rjeenje se i bre nalazi. To vidimo iz
sljedeeg primjera (u kojem nam funkcija Chop uope nee trebati):
In[65] := mat // N //
Out[65] = {6.24338,

Eigenvalues
0.825476, 0.5821}

Funkcije IdentityMatrix i DiagonalMatrix korisne su za formiranje matrica specijalne strukture.


Tako, funkcija IdentityMatrix[n] daje jedininu matricu formata n n, dok DiagonalMatrix[d] pri
emu je d lista daje dijagonalnu matricu formata n n pri emu je n duina liste d, a dijagonalni elementi
rezultujue matrice predstavljaju elemente liste d. Ove funkcije lijepo se mogu iskoristiti u sloenijim
izrazima. Na primjer, podsjetimo se da se karakteristini polinom neke matrice A definira kao
determinanta od izraza A x I, gdje je I jedinina matrica istog formata kao i matrica A. Iskoristimo
sada funkcije Det i IdentityMatrix da pomou ove formule naemo karakteristini polinom ranije
definirane matrice mat:
In[66] := Det[mat x IdentityMatrix[3]]
2
3
Out[66] = 3 + 2 x + 6 x x

49

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

Sve do verzije 5.0, ovo je ujedno bio i jedini nain da u programskom paketu Mathematica naemo
karakteristini polinom neke matrice. U verziji Mathematica 5.0 uvedena je nova funkcija
CharacteristicPolynomial koja direktno rauna karakteristini polinom matrice:
In[67] := CharacteristicPolynomial[mat, x]
2
3
Out[67] = 3 + 2 x + 6 x x

Po definiciji, nule karakteristinog polinoma su upravo sopstvene vrijednosti matrice. Provjerimo ovo:
In[68] := % = = 0 // NSolve
Out[68] = {x 6.24338, x 0.5821,

x 0.825476}

Vidimo da smo dobili praktino isto rjeenje kao i direktnom primjenom funkcije Eigenvalues.
Matrini raun nam moe pomoi i za rjeavanje sistema linearnih jednaina. Pretpostavimo da
elimo rijeiti sistem jednaina x + 2 z = 5, x + y + z = 6 i 2 y z = 9. Svakako, jedan od naina da to
uinimo je pomou funkcije Solve:
In[69] := Solve[{x + 2 z = = 5, x + y + z = =
Out[69] = {{x 3, y 4, z 1}}

6, 2 y z = = 9}, {x, y, z}]

Moemo, meutim, postupiti i drugaije. Neka je A matrica koeficijenata sistema, b vektor slobodnih
lanova, a x vektor koji sadri nepoznate sistema. Iz linearne algebre je poznato da se tada sistem
linearnih jednaina moe napisati u obliku A x = b, odakle slijedi x = A1 b. Dakle, rjeenje sistema
linearnih jednaina moe se nai preko matrine inverzije i matrinog mnoenja:
a = {{1, 0, 2},
{1, 1, 1},
{0, 2, 1}};
b = {5, 6, 9};
Inverse[a] . b
Out[70] = {3, 4, 1}
In[70] :=

S druge strane, poznato je da je problem nalaenja inverzne matrice tei od problema rjeavanja
sistema linearnih jednaina. To zapravo znai da mi laki problem svodimo na tei. Zbog toga je
uvedena funkcima LinearSolve, koja direktno rjeava sistem linearnih jednaina na osnovu poznate
matrice koeficijenata i vektora slobodnih lanova sistema, bez potrebe za raunanjem inverzne matrice
(umjesto toga, koristi se Gausov metod eliminacije):
In[71] := LinearSolve[a, b]
Out[71] = {3, 4, 1}

Za sluaj velikih sistema linearnih jednaina, funkcija LinearSolve najbre dovodi do rjeenja, znatno
bre nego recimo Solve ili Reduce. Naravno, funkciju LinearSolve moemo koristiti i bez definiranja
pomonih promjenljivih koje opisuju koeficijente i slobodne lanove sistema:
LinearSolve[{{1, 0, 2},
{1, 1, 1},
{0, 2, 1}},
{5, 6, 9}]
Out[72] = {3, 4, 1}
In[72] :=

U sluaju da sistem linearnih jednaina nema rjeenje, funkcija LinearSolve daje kao rezultat
praznu listu, dok u sluaju neodreenih sistema linearnih jednaina (koji imaju beskonano mnogo
rjeenja), funkcija LinearSolve daje kao rezultat samo jedno od mnotva moguih rjeenja. Sva rjeenja
(tj. rjeenja u obliku koji zavisi od jedne ili vie proizvoljnih konstanti) moemo nai jedino pomou
funkcije Reduce.

50

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

Jo jedna funkcija koja ima veliku primjenu u linearnoj algebri je funkcija NullSpace. Ona je u
tijesnoj vezi sa homogenim sistemima linearnih jednaina. Naime, poznato je da takvi sistemi uvijek
imaju trivijalno rjeenje u kojima su sve promjenljive jednake nuli, ali pod odreenim uvjetima mogu
imati i netrivijalna rjeenja. NullSpace moe posluiti za nalaenje takvih rjeenja. Razmotrimo, na
primjer, sljedei homogeni sistem:
x 1 + 2 x2 + 4 x3 + 3 x4 = 0
3 x1 + x2 + 2 x3 + x4 = 0
2 x1 + 4 x2 + 8 x3 + 6 x4 = 0
Sva rjeenja ovog sistema mogu se prikazati u obliku x1 = k1, x2 = 8 k1 2 k2, x3 = k2 i x4 = 5 k1, gdje su k1
i k2 proizvoljne konstante (ovakvo rjeenje se nekad iskazuje i u obliku x2 = 8 x1 2 x3, x4 = 5 x1, x1 i x3
proizvoljni, to se svodi na isto). Pogledajmo ta e se dogoditi ukoliko primijenimo funkciju NullSpace
na matricu ovog sistema:
In[73] := NullSpace[{{1, 2, 4, 3}, {2, 4, 8, 6}, {3, 1, 2, 1}}]
Out[73] = {{1, 8, 0, 5}, {0, 2, 1, 0}}

Nije lako odmah prepoznati ta predstavlja dobijeni rezultat, i kako ga ispravno interpretirati.
Meutim, stvari postaju mnogo jasnije ako uoimo da se rjeenje ovog sistema u matrinoj notaciji moe
napisati na sljedei nain:
x1

x 2 = k1
x3
x
4

1

8 + k2
0
5

0

2
1
0

Sad stvari postaju jasnije: vektor rjeenja izraava se kao proizvoljna linearna kombinacija vektora koje
vraa funkcija NullSpace kao rezultat. Za bolje poznavaoce algebre, recimo da NullSpace u stvari vraa
bazne vektore nul-prostora vektorskog prostora generiranog matricom koja joj je ponuena kao
argument, odakle i potie njeno ime.
S obzirom da su matrice predstavljene kao liste, sve funkcije koje djeluju nad listama mogu se
primijeniti i na matrice.Posebno, izdvajanje i-tog elementa iz matrice izdvojie zapravo njen i-ti red (s
obzirom da su matrice definirane kao liste njihovih redova). Na primjer, sljedea transakcija izdvaja
drugi red iz ranije definirane matrice a:
In[74] := a[[2]]
Out[74] = {1, 8, 5}

Kako je dobijeni element ponovo lista, na njega moemo ponovo primijeniti izdvajanje da bismo
izdvojili neki specifini element matrice. Na primjer, element koji se nalazi u drugom redu i treoj
koloni moemo izdvojiti na sljedei nain:
In[75] := a[[2]][[3]]
Out[75] = 5

Poto je ovakva sintaksa pomalo nezgrapna, Mathematica dozvoljava da se izdvajanje pojedinanih


elemenata iz matrice vri prostim zadavanjem eljenog broja reda i kolone razdvojenih zarezom, unutar
dvojnih uglastih zagrada:
In[76] := a[[2, 3]]
Out[76] = 5

Funkcija Length, primijenjena na matricu, daje broj redova matrice, s obzirom da je to zaista broj
elemenata liste kojom se matrica opisuje. Ukoliko elimo saznati broj kolona matrice, moemo
primijeniti funkciju Length na jedan red matrice (svejedno koji, s obzirom da svi imaju isti broj redova),
s obzirom da je broj elemenata jednog reda matrice ujedno i broj njenih kolona:
51

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

In[77] := Length[a]
Out[77] = 3
In[78] := Length[a[[1]]]
Out[78] = 3

Alternativno, moemo koristiti i funkciju Dimensions koja vraa kao rezultat listu oblika {m, n},
gdje su m i n dimenzije matrice (broj redova odnosno broj kolona):
In[79] := Dimensions[a]
Out[79] = {3, 3}

Funkcija Table se moe iskoristiti i za kreiranje matrica iji elementi podlijeu izvjesnim
zakonitostima. To moemo uiniti na vie naina. Jedan od naina je da iskoristimo jednu Table
funkciju unutar druge, pri emu unutranja Table funkcija generira jedan red matrice, dok spoljanja
Table funkcija ponavlja generiranje redova sa ciljem da se generira cijela matrica. Na primjer, sljedea
transakcija kreira tablicu mnoenja za brojeve od 1 do 5, odnosno matricu iji se koeficijenti aij mogu
opisati zakonom aij = i j, i = 1..5, j = 1..5:
In[80] := Table[Table[i
Out[80] // MatrixForm =
1 2 3 4

2 4 6 8
3 6 9 12

4 8 12 16
5 10 15 20

j, {j, 5}], {i, 5}] // MatrixForm


5

10
15

20
25

Meutim, mnogo laki nain je da upotrijebimo Table funkciju sa dva iteratora, pri emu se prvi iterator
odnosi na redove, a drugi na kolone:
In[81] := Table[i j, {i, 5}, {j, 5}]
Out[81] // MatrixForm =
1 2 3 4 5

2 4 6 8 10
3 6 9 12 15

4 8 12 16 20
5 10 15 20 25

// MatrixForm

Na slian nain moemo formirati i, recimo, matricu formata 3 4, iji su elementi sluajni brojevi
u opsegu od 1 do 10:
In[82] := Table[Random[Integer, {1, 10}],
Out[82] // MatrixForm =

{3}, {4}] // MatrixForm

3 5 2 6

5 1 1 3
2 7 6 9

Naravno, prikazani rezultat je samo jedan od moguih, s obzirom da su sve vrijednosti sluajne.
Opisana forma funkcije Table moe se koristiti za bilo koje strukture koje imaju formu liste listi, a
koje ne moraju nuno biti matrice. Ovo je ilustrirano u sljedeem primjeru koji koristi funkciju Table i
funkciju Binomial da formira prvih 8 redova Paskalovog trougla:
In[83] := Table[Random[Integer, {1, 10}], {3}, {4}] // MatrixForm
Out[83] = {{1}, {1, 1}, {1, 2, 1}, {1, 3, 3, 1}, {1, 4, 6, 4, 1}, {1, 5, 10, 10, 5, 1},{1, 6, 15, 20, 15, 6, 1},

{1, 7, 21, 35, 35, 21, 7, 1}}

52

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

9. Definiranje vlastitih funkcija


Mathematica poznaje veliki broj ugraenih funkcija. Meutim, esto se javlja potreba za
definiranjem vlastitih funkcija. U paketu Mathematica razlikuje se postupak definiranja funkcija u
zavisnosti da li je domen funkcije konaan ili beskonaan skup. Za sluaj kada je domen funkcije
konaan, funkcija se definira prostim pobrojavanjem. Na primjer, neka elimo definirati funkciju f iji je
domen skup X = {1, 5, a, kupus}, a kodomen skup Y = {12, xyz, lopata, sarma}, i koja vri preslikavanje
u skladu sa pravilima f(1) = lopata, f(5) = 12, f(a) = xyz i f(kupus) = 12. Ovu funkciju moemo definirati
pomou sljedeeg skupa dodjela:
In[1] := f [1]

=lopata;
f [5] = 12;
f [a] = xyz;
f [kupus] =lopata;

Moemo isprobati da vidimo kako uvedena definicija djeluje:


In[2] := f[1]
Out[2] = lopata
In[3] := f[kupus]
Out[3] = 12
In[4] := 3 f[kupus]
Out[4] = 37

+1

In[5] := f[65]
Out[5] = lopata
In[6] := f[64]
Out[6] = f [2]

Ovi primjeri ujedno pokazuju da se novodefinirana funkcija moe koristiti kao i svaka druga
funkcija. Posljednja dva primjera takoer pokazuju da se argumenti korisniki definiranih funkcija
izraunavaju na isti nain kao i kod ugraenih funkcija. Rezultat posljednje funkcije je ostao neizraunat,
u formi f [2], s obzirom da vrijednost 2 ne pripada domenu funkcije f.
Funkcije koje definira korisnik mogu imati bilo kakvo ime koje je dozvoljeno za promjenljive, i
takoer mogu sadravati velika i mala slova. Ipak, uobiajeno je da se imena korisniki definiranih
funkcija piu iskljuivo malim slovima, da bi se razlikovala od imena funkcija ugraenih u paket
Mathematica.
Bitno je napomenuti da, za razliku od definiranja promjenljivih, nova dodjela istoj funkciji ne
ponitava prethodne dodjele, ve samo nadopunjuje ve postojeu definiciju. Stoga, ukoliko elimo
izvriti novu definiciju neke funkcije, potrebno je pomou funkcije Clear izbrisati prethodnu definiciju.
Najbolje je svaku ulaznu eliju koja definira neku funkciju uvijek zapoeti naredbom Clear. Na taj nain
emo biti sigurni da je eventualno postojea prethodna definicija u potpunosti izbrisana, i izbjei vrlo
nezgodne probleme koji bi mogli nastati usljed mijeanja starih i novih definicija.
Funkcije definirane pobrojavanjem treba koristiti samo u sluajevima kada je pobrojavanje jedini
nain za definiranje funkcije. Na primjer, ukoliko elimo definirati funkciju nad skupom gradova Bosne
i Hercegovine koja daje kao rezultat broj stanovnika nekog grada, jasno je da takvu funkciju moemo
definirati samo pobrojavanjem. Meutim, pobrojavanje je nemogue ukoliko je domen funkcije
beskonaan skup. U tom sluaju, koristimo definiranje funkcija pomou formula. Na primjer, neka
elimo definirati funkciju g sa
u
koja je opisana formulom g(x) = x2 + 3 x + 1. Pokuaj da ovu
funkciju definiramo slino kao pri definiranju pobrojavanjem, dovodi do neuspjeha, kao to slijedi iz
prikazanog primjera:
53

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

In[7] :=

Clear[g];
[x] = x2 + 3 x + 1

In[8] := g[x]
2
Out[8] = 1 + 3 x + x
In[9] := g[y]
Out[9] = g[y]
In[10] := g[3]
Out[10] = g[3]

Iz ovog primjera vidimo ta je zapravo problem. Ova definicija je shvaena kao da se neki
konkretan element nazvan x koji se nalazi u domenu funkcije preslikava u izraz x2 + 3x + 1. Stoga,
definicija zna ta je f(x), ali ne zna ta je f(y) (jer smatra da je y neki drugi element, za koji nije
reeno da je u domenu), a pogotovo ne ta je f(3). S druge strane, kada kaemo da je g(x) = x2 + 3 x + 1,
mi obino ne mislimo tako, nego mislimo da je x samo formalno ime za argument funkcije koji biva
zamijenjen nekom drugom konkretnom vrijednou prilikom upotrebe funkcije!
Da bismo rijeili ovaj problem, moramo se upoznati sa pojmovima formalnog parametra i ablona.
Razmotrimo jedan konkretan problem koji e nas dovesti do ovih pojmova. Pretpostavimo da imamo
izraz poput x2 + 2 y2 + (x + y)2 u kojem elimo da smijenimo sve kvadrate kubovima. Kako definirati
pravilo za smjenu? Navoditi posebno tri smjene x2 x3, y2 y3 i (x + y)2 (x + y)3 oito nije elegantno,
niti je primjenljivo za sluaj jo sloenijih izraza. Smjena poput 2 3 takoer nije dobra, jer bi smijenila
svaku pojavu broja 2 brojem 3 (a ne samo u eksponentu), to takoer nije ono to nam treba. Pravo
rjeenje je prikazano u primjeru koji slijedi:
2

In[11] := x + 2 y + (x + y) /. t_
3
3
3
Out[11] = x + 2 y + (x + y)

t3

U ovom primjeru, konstrukcija t_2 predstavlja tzv. ablon, koji u konkretnom primjeru moemo
tumaiti kao bilo ta na kvadrat, pri emu se to bilo ta prilikom vrenja smjene privremeno imenuje
imenom t. Kada se god uoi bilo ta dignuto na kvadrat, vri se njegovo imenovanje privremenim
imenom, nakon ega se obavlja njegova transformacija u skladu sa zadanim pravilom. Stoga se, u
konkretnom primjeru, t naziva formalni parametar ablona t_2. Dakle, znak _ iza imena govori da ime
predstavlja formalni parametar, koji e biti smijenjen nekim stvarnim izrazom u odgovarajuem
kontekstu. Pri tome je bitno naglasiti da je ime formalnog parametra posve nebitno (ono slui samo da se
na njega moe pozivati u definiciji pravila) i da se ak moe poklapati sa imenom nekih od simbola koji
zaista postoje u izrazu koji se transformira. Drugim rijeima, sljedea smjena se takoer obavlja na isti
nain kao i prethodna:
2

In[12] := x + 2 y + (x + y) /. x_
3
3
3
Out[12] = x + 2 y + (x + y)

x3

abloni i formalni parametri su vrlo mono sredstvo paketa Mathematica. Na primjer, abloni i
smjene koje ih koriste mogu zavisiti od vie formalnih parametara. Recimo, mogue je upotrijebiti
smjenu poput u_ + v_ u v, u kojoj se javlja ablon u_ + v_ koji zavisi od dva formalna parametra.
Sljedei primjer pokazuje nain upotrebe ovakvog ablona:
2

2 3

In[13] := x y + 2x y /.
2
2 3
Out[13] = x y 2x y

u_ + v_ u v

Na alost, prostor nam ne dozvoljava da se detaljno bavimo ablonima, pogotovo zbog injenice da
njihovo potpuno shvatanje trai detaljniji opis naina interne reprezentacije izraza u paketu
Mathematica. Stoga emo samo objasniti ono zbog ega smo ablone i uveli ovdje: kako napraviti
funkciju definiranu formulom. Rjeenje je jednostavno: samo treba kao argument funkcije upotrijebiti
ablon, ime argument u njenoj definiciji postaje formalni parametar. Pored toga, trenutnu dodjelu treba
zamijeniti zakanjelom dodjelom:
54

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

In[19] :=

Clear[g];
g[x_] := x2 + 3x + 1

Ovakva definicija sada radi u skladu sa oekivanjima, kao to slijedi iz primjera:


In[20] := g[x]
2
Out[20] = 1 + 3x + x
In[21] := g[y]
2
Out[21] = 1 + 3y + y
In[22] := g[3]
Out[22] = 19

Nije teko shvatiti kako ova definicija radi: formalni parametar prilikom poziva funkcije se
privremeno identificira sa konkretnim argumentom koji je upotrijebljen prilikom poziva funkcije.
Zakanjela dodjela je neophodna zbog toga to se to uvrtavanje treba da obavi tek kada se funkcija
upotrijebi, a ne u trenutku kada se ona definira.
Prilikom definiranja funkcija preko ablona i formalnih parametara, za domen funkcije se
podrazumijeva da obuhvata skup svih objekata koje Mathematica poznaje, to ukljuuje ne samo realne,
nego i kompleksne brojeve, liste, matrice, i jo mnoge druge objekte. U nekim sluajevima ovakav
domen je preirok, pa je prilikom definiranja funkcija preko ablona i formalnih parametara mogue
pomou operatora /; suziti domen funkcije na skup onih elemenata koji zadovoljavaju uvjet naveden
iza ovog operatora. Slijedi jedan primjer:
In[23] :=

Clear[g];
g[x_] := x2 + 3x + 1 /; x > 1

In[24] := g[3]
Out[24] = 19
In[25] := g[0]
Out[25] = g[0]

Vrijednost g[0] ostala je neizraunata, jer je u definiciji domen funkcije ogranien iskljuivo na brojeve
koji su vei od 1.
Mogue je mijeati definicije sa formalnim parametrima i konkretnim parametrima. Prilikom
izvravanja funkcije, prvo se provjerava postoji li definicija sa upotrijebljenim konkretnim parametrom,
pa tek ukoliko ne, tada se primjenjuju definicije sa formalnim parametrima:
In[26] :=

Clear[f];
f [0] = 5;
f [x_] := x2

In[27] := f [3]
Out[27] = 9
In[28] := f[7]
Out[28] = 49
In[29] := f[0]
Out[29] = 5

Funkcije mogu imati vie parametara, pri emu je mogue slobodno mijeati konkretne i formalne
parametre, kao u sljedeem primjeru:

55

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

In[30] :=

Clear[h];
h[1, x_, y_] := x + y;
h[2, x_, y_] := x y;

In[31] := h[1, 7, 3]
Out[31] = 10
In[32] := h[2, 7, 3]
Out[32] = 4
In[33] := h[3, 7, 3]
Out[33] = h[3, 7, 3]

Vrijednost h[3, 7, 3] ostala je neizraunata, s obzirom da ne postoji definicija iz koje se moe zakljuiti
kako se rauna vrijednost ove funkcije kada prvi argument nije niti 1 niti 2.
Funkcija moe imati vie definicija na razliitim domenima. Na primjer, poznata matematika
funkcija signum definirana je kao sgn x = 1 ako je x > 0, sgn x = 1 ako je x < 0, i sgn x = 0 ako je x = 0.
Definirajmo i testirajmo ovu funkciju u paketu Mathematica:
In[34] :=

sgn[x_] := 1 /; x > 0
sgn[x_] := 1 /; x < 0
sgn[0] =1;

In[35] := sgn[5]
Out[35] = 1
In[36] := sgn[5]
Out[36] = 1
In[37] := sgn[0]
Out[37] = 0

Primijetimo da je vrijednost funkcije signum za x = 0 lake definirati koristei konkretnu vrijednost


parametra nego preko restrikcije domena uz uvjet x = 0, te smo tako i uinili. U sluaju da se domeni
dati definicijama preklapaju, za one vrijednosti argumenata koje upadaju u vie domena kao relevantna
se uzima prva definicija po redu koja zadovoljava ogranienje dato argumentom.
Funkcija se moe definirati tako da se poziva na samu sebe. Takve funkcije nazivaju se rekurzivne
funkcije. Na primjer, matematika operacija faktorijel data izrazom n! = 1 2 ... n moe se definirati i
rekurzivno, na sljedei nain:
1, za n 1
n! =
n (n 1), za n 1

Na primjer, izraunavanje 4! po ovoj definiciji tee ovako:


4! = 4 3! = 4 (3 2!) = 4 [3 (2 1!)] = 4 [3 (2 1)] = 4 (3 2 ) = (4 6) = 24
Napiimo sada rekurzivnu funkciju fakt koja rauna faktorijel svog argumenta, i testirajmo je:
In[38] :=

Clear[fakt]
fakt[1] =1;
fakt[n_] := n fakt[n1];

In[39] := fakt[5]
Out[39] = 120

56

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

Izgleda kao da sve radi dobro. Problemi, meutim, nastaju upotrijebimo li ovu funkciju sa necjelobronim
argumentom (slian problem nastaje i ukoliko argument nije konkretan broj, nego izraz koji sadri
simbole):
In[40] := fakt[1.5]
$RecursionLimit::reclim : Recursion depth of 256 exceeded.
Out[40] =

1.3756016026411 10498Hold[fakt[252.51]]

U emu je problem, lako moemo vidjeti ukoliko pokuamo runo izraunati faktorijel od 3.5
prema navedenoj rekurzivnoj definiciji:
1.5! = 1.5 0.5! = 1.5 [0.5 (0.5!)] = 1.5 {0.5 [0.5 (1.5)!]} = ...
Ovaj proces se oito moe nastaviti bez kraja. Ukoliko se rekurzivni pozivi ne razrijee u 256 pokuaja,
paket Mathematica smatra da sa definicijom neto nije u redu i prekida izraunavanje (granica 256 se po
potrebi moe promijeniti). Prikazani besmisleni rezultat zapravo prikazuje stanje izraunavanja u
trenutku kada je proces prekinut. Problem se lako rjeava ukoliko domen definicije funkcije ograniimo
samo na prirodne brojeve (faktorijel zaista i jeste definiran samo za prirodne brojeve):
In[41] :=

Clear[fakt];
fakt[n_] := n fakt[n1] /; n Integers && n > 1
fakt[1] =1;

In[42] := fakt[4]
Out[42] = 24
In[43] := fakt[1.5]
Out[43] = fakt[1.5]

Sad je, kao to vidimo, sve u redu.


Za kreiranje funkcija koje su predstavljene sa vie definicionih izraza, mogu se korisno upotrijebiti
funkcije If i Which. Funkcija If ima dva, tri ili etiri parametra. Prvi parametar je uvjet. Drugi parametar
predstavlja rezultat ukoliko je uvjet ispunjen. Trei parametar (ako ga ima) predstavlja rezultat ukoliko
uvjet nije ispunjen (ako treeg parametra nema, u tom sluaju se ne daje nikakav rezultat). etvrti
parametar (ako ga ima) predstavlja rezultat ukoliko se tanost uvjeta ne moe utvrditi. U sljedeem
primjeru definiramo i testiramo funkciju f za koju vrijedi f(x) = x2 ako je x > 0, a f(x) = x3 u suprotnom:
In[44] :=

Clear[f];
f[x_] := If[x > 0, x2, x3]

In[45] := f[4]
Out[45] = 16
In[46] := f[4]
Out[46] = 64

Funkcija Which mora imati paran broj argumenata, od kojih prvi, trei, peti, itd. predstavljaju
uvjete. Uvjeti se testiraju slijeva nadesno. Rezultat je izraz koji slijedi neposredno iza prvog uvjeta za
koji se ispostavi da je taan. Na primjer, sljedea definicija predstavlja alternativni nain da se definira
signum funkcija:
In[47] :=

Clear[sgn];
sgn[x_] := Which[x > 0, 1, x < 0, 1, x = = 0, 0]

In[48] := sgn[5]
Out[48] = 1

57

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

In[49] := sgn[5]
Out[49] = 1
In[50] := sgn[0]
Out[50] = 0

Vidimo da smo dobili isti efekat kao pomou viestrukih definicija uz restrikciju domena. Savjetuje se
uvijek koristiti If i Which pri definiciji sloenijih funkcija, ukoliko je to mogue.

10. Grafiki prikaz funkcija


Paket Mathematica omoguava vrlo efektnu grafiku prezentaciju raznih objekata. Ovdje emo se
ograniiti na crtanje funkcija. Za tu svrhu koristi se funkcija Plot. Njen prvi argument predstavlja izraz
koji definira funkciju koju crtamo, dok drugi argument predstavlja listu od tri elementa, koji redom
predstavljaju nezavisnu promjenljivu, kao i opseg u kojem treba da se kree nezavisna promjenljiva:
2

In[1] := Plot[x

+ Sin[3 x], {x, 3, 3}]


8
6
4
2

-3

-2

-1

Out[1] = Graphics

Ukoliko elimo nacrtati grafik vie funkcija u istom koordinatnom sistemu, sve funkcije koje
crtamo jednostavno objedinimo u listu:
In[2] := Plot[{Sin[x],

Cos[x]}, {x, 5, 5}]


1

0.5

-4

-2

-0.5

-1

Out[2] = Graphics

Evo kako se moemo uvjeriti da jednaina cos x = 2 x zaista ima jedno rjeenje u okolini take
x = 3, to smo koristili kod opisa funkcije FindRoot:
In[3] := Plot[{Cos[x],

2 x}, {x, 4, 4}]


4
3
2
1

-4

-2

-1

Out[3] = Graphics

-2

58

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

Veliinu grafika moemo po potrebi mijenjati uz pomo mia. Vidimo da Mathematica sama odredi
opseg po ordinatnoj osi, tako da glavnina grafikona bude prikazana. Ukoliko sami elimo zadati opseg
po ordinatnoj osi, moemo to uraditi postavljanjem opcije PlotRange na nain koji je jasan iz sljedeeg
primjera:
2

In[4] := Plot[x

+ Sin[3 x], {x, 3, 3}, PlotRange {5, 5}]


5
4
3
2
1

-3

-2

-1

-1

-2
-3

Out[4] = Graphics

Vrijednosti podioka po apscisnoj i ordinatnoj osi ne moraju nuno biti jednake, to zavisi od samog
grafika. Dodavanjem opcije AspectRatio Automatic postiemo da e te vrijednosti biti jednake:
2

In[5] := Plot[x

+ Sin[3 x], {x, 2, 2}, AspectRatio Automatic]


4

-2

-1

Out[5] = Graphics

Umjesto Automatic, moe se pisati i broj koji odreuje odnos izmeu duine podioka na osama.
Opcije PlotRange i AspectRatio mogu se i kombinirati:
2

In[6] := Plot[x

+ Sin[3 x], {x, 2, 2}, AspectRatio Automatic, PlotRange {1, 3}]


3
2.5
2
1.5
1
0.5

-2

-1

-0.5

Out[6] = Graphics

-1

Funkcije koje se crtaju mogu biti bilo kakve numeriki izraunljive funkcije (tj. koje za brojani
argument daju brojani rezultat), to ukljuuje i izraze koji sadre funkcije If i Which, kao i korisniki
definirane funkcije. Takoer, funkcija Plot pored opcija PlotRange i AspectRatio prihvata i na desetine
59

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

drugih opcija, koje ovdje ne moemo opisivati, pomou kojih se grafik moe estetski oblikovati i
prilagoditi svim potrebama.
Mathematica moe i crtati grafike funkcija dvije promjenljive, pri emu tada grafik predstavlja
povr u prostoru. To se postie pomou funkcije Plot3D, koja prima brojne opcije, koje ovdje ne
moemo opisivati. Ilustriraemo samo na jednostavnom primjeru crtanje funkcije z = sin x y, pri emu se
x i y kreu u intervalu od 4 do 4:
In[7] := Plot3D[Sin[x y],

{x, 4, 4}, {y, 4, 4}]

1
0.5

0
-0.5

-1
-2

0
-1
-1

0
1

Out[7] =

SurfaceGraphics

-2

Mathematica zna crtati i grafike parametarski zadanih funkcija. To su krivulje koje opisuje taka
(x, y) u koordinatnom sistemu ukoliko se x i y mijenjaju po zakonu x = (t) i y = (t) gdje su i neke
zadane funkcije, a t uzima vrijednosti iz nekog skupa. Ovakvi grafici imaju veliku primjenu u
raunarskoj grafici, jer se pomou jednostavnih funkcija mogu opisivati vrlo komplikovane krivulje. Za
crtanje parametarski zadanih funkcija moemo koristiti funkciju ParametricPlot. Sljedei primjer crta
grafik funkcije x = cos 5t i y = sin 5t za t (0, 2):
In[8] := ParametricPlot[{Cos[5 t],

Sin[7 t]}, {t, 0, 2}]

0.5

-1

-0.5

0.5

-0.5

-1

Out[8] = Graphics

Opcije PlotRange i AspectRatio mogu se koristiti i u kombinaciji sa ParametricPlot:


Sin[7 t]}, {t, 0, 2}, PlotRange {{1.2, 1.2}, {1.2, 1.2}},
AspectRatio Automatic]

In[9] := ParametricPlot[{Cos[5 t],


1.5
1
0.5

-1.5

-1

-0.5

0.5

1.5

-0.5
-1
-1.5

Out[9] = Graphics

60

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

Iz ovog primjera vidimo da se u opciji PlotRange mogu zadati i dvije liste, od kojih prva odreuje
opseg po x osi, a druga opseg po y osi. Inae, prikazane krivulje spadaju u tzv. Lisauove krivulje, koje
su openito zadane izrazima x = cos a t, y = sin (b t + c), gdje su a, b i c neke konstante. Variranjem a, b i
c mog se dobiti veoma raznolike krivulje.
Mathematica moe vriti i grafiku prezentaciju podataka koji su dati u vidu listi parova, pri emu
se za svaki element liste (par) smatra da predstavlja koordinate jedne take u ravni. Na primjer, prvo
emo, uz malo pomoi trigonometrije, generirati koordinate 20 taaka koje su ravnomjerno rasporeene
na jedininom krugu:
In[10] := Table[{Sin[k Pi/10], Cos[k Pi/10]}, {k, 1, 20}]
Out[10] = {{0.309017, 0.951057}, {0.587785, 0.809017},

{0.809017, 0.587785},
{0.951057, 0.309017}, {1., 0.}, {0.951057, 0.309017}, {0.809017, 0.587785},
{0.587785, 0.809017}, {0.309017, 0.951057}, {0., 1.}, {-0.309017, 0.951057},
{0.587785, 0.809017}, {0.809017, 0.587785}, {0.951057, 0.309017}, {1., 0.},
{0.951057, 0.309017}, {0.809017, 0.587785}, {0.587785, 0.809017},
{0.309017, 0.951057}, {0., 1.}}

Zatim emo te take grafiki prikazati uz pomo funkcije ListPlot:


In[11] :=

ListPlot[%, AspectRatio Automatic]


1

0.5

-1

-0.5

0.5

-0.5

-1

Out[11] = Graphics

U sljedeem primjeru koristimo ListPlot da grafiki prikaemo distribuciju prvih 30 prostih


brojeva:
In[12] :=

ListPlot[Table[{i, Prime[i]}, {i, 1, 30}]]

100
80
60
40
20
5

10

Out[12] = Graphics

15

20

25

30

Funkcija ListPlot prihvata iste opcije kao i Plot.

11. Neke primjene u matematikoj analizi


Mathematica poznaje brojne operacije koje se koriste u matematikoj analizi. Poeemo sa
graninim vrijednostima. Intuitivno se kae da funkcija f(x) ima graninu vrijednost ili limes jednak A
kad x tei ka x0 ukoliko vrijednosti funkcije postaju sve blie vrijednosti A kada x postaje sve blii x0,
bez obzira da li je funkcija definirana u taki x0 ili nije. Granine vrijednosti nalazimo pomou funkcije
Limit, gdje prvi argument predstavlja f(x), a drugi je oblika x x0. Slijede primjeri nekih poznatih
graninih vrijednosti:
61

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

In[1] := Limit[Sin[x] / x,
Out[1] = 1
In[2] := Limit[1 / n!,
Out[2] = 1

x 0]

n ]

In[3] := Limit[(1+1/x)
Out[3] =

, x ]

In[4] := % // N
Out[4] = 2.71828

Simbol moemo dobiti putem tastature koristei kombinaciju tipki |Esc| inf |Esc|. Umjesto
simbola moemo koristiti i naziv Infinity, sa istim znaenjem.
U nekim sluajevima, granina vrijednost moe zavisiti od toga da li se traenoj vrijednosti
pribliavamo slijeva ili zdesna. Na primjer, vrijednost izraza arc tg (1/x) kad x tei ka 0 tei ka /2
ukoliko se nuli pribliavamo zdesna, a ka /2 ukoliko se pribliavamo slijeva. Mathematica u takvim
sluajevima podrazumijeva pribliavanje zdesna:
In[5] :=

Limit[ArcTan[1/x], x 0]

Out[5] =

Ukoliko elimo pribliavanje slijeva, potrebno je dodati opciju Direction 1:


In[6] :=

Limit[ArcTan[1/x], x 0, Direction 1]

Out[6] =

Mathematica u izvjesnoj mjeri poznaje i raun sa beskonanim veliinama. Takoer, kao rezultat
raunanja se mogu pojaviti i simboli odnosno ukoliko se zna da je rezultat beskonaan ali tano
odreenog znaka. Simbol ComplexInfinity oznaava beskonanost nedefiniranog znaka,
Indeterminate predstavlja potpuno neodreenu veliinu. U sluaju kada je rezultat tipa
ComplexInfinity ili Indeterminate, pojavljuje se i poruka upozorenja. Slijedi nekoliko primjera:
In[7] := Log[0]
Out[7] =
In[8] := 1/
Out[8] = 0
In[9] := 25*
Out[9] =
In[10] :=

1/0
Power::infy : Infinite expression

Out[10] =
In[11] :=

1
0

encountered.

ComplexInfinity

25*Infinity

Out[11] =
In[12] :=

ArcTan[]

Out[12] =
In[13] :=

::indet : Indeterminate expression + encountered.

Out[13] =

Indeterminate
62

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

Mathematica u velikom broju sluajeva zna sumirati redove, bilo konane, bilo beskonane. Za tu
svrhu koristi se funkcija Sum, pri emu je prvi argument opi lan reda, a drugi argument iterator (kao
kod funkcije Table) koji odreuje granice sumiranja. Slijede dva poznata primjera. Prvi primjer ilustrira
poznatu konanu sumu 12 + 22 + 32 + ... + n2 = n (n + 1) (2n + 1) / 6, a drugi primjer ilustrira beskonanu
sumu 1/2 + 1/4 + 1/8 + 1/16 + ... = 1 koja je stvarala glavobolje grkim filozofima, koji su iz neprihvatanja
takvih suma izvodili paradokse poput uvenog Zenonovog paradoksa o Ahilu i kornjai:
Sum[i2, {i, 1, n}]
1
Out[14] = n (1 n ) (1 2n )
6
In[14] :=

In[15] := Sum[1/2 ,
Out[15] = 1

{i, 1, }]

Suma beskonanih redova, naravno, ne mora biti konana. Takvi redovi su divergentni.
Mathematica zna uoiti takve redove i prijaviti upozorenje:
In[16] :=

Sum[2i, {i, 1, }]
Sum::idiv : Sum does not converge.

Out[16] =

2i
i 1

S druge strane, beskonani redovi iji opi lan ovisi od nekog parametra, mogu za neke vrijednosti
parametra biti konvergentni (tj. imati konanu sumu), a za neke druge vrijednosti biti divergentni.
Mathematica daje sumu uz pretpostavku da su parametri takvi da red konvergira, ali bez ispitivanja za
koje vrijednosti parametara to vrijedi. Slijedi primjer u kojem je dat poznati beskonani geometrijski red,
koji konvergira za | a | < 1, a inae divergira. Mathematica ispravno nalazi sumu ovog reda pod tim
uvjetom, ali ne govori nam nita da a mora biti takav. Ovo se moe shvatiti kao nedostatak funkcije
Sum:
Sum[ai, {i, 1, }]
a
Out[17] =
1 a
In[17] :=

esto se deava da se suma nekog reda ne moe izraziti preko elementarnih funkcija. Mathematica
poznaje veliki broj matematikih funkcija koje ne spadaju u klasu elementarnih funkcija. Ukoliko se
rezultat moe izraziti preko neke od njih, Mathematica e to i uiniti. Tako se, na primjer, suma
sljedeeg reda izraava preko tzv. Rimanove zeta funkcije (x):
In[18] := Sum[1/i
Out[18] = Zeta[3]

, {i, 1, }]

ta je Rimanova zeta funkcija, to na ovom mjestu nije bitno. Bitno je da, u sluaju potrebe,
Mathematica moe aproksimativno izraunati njenu vrijednost, kao i vrijednosti svih drugih
neelementarnih funkcija koje poznaje:
In[19] := % // N
Out[19] = 1.20206

Ukoliko nas zanima samo numerika aproksimacija rjeenja, do rezultata se mnogo bre dolazi
koritenjem funkcije NSum umjesto Sum. Ovo je mogue samo za redove iji opi lan ne sadri
nikakve parametre osim promjenljive po kojoj se vri sumiranje:
In[20] := NSum[1/i
Out[20] =1.20206

, {i, 1, }]

63

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

S druge strane, kaskadno koritenje funkcija Sum i N u izvjesnim nezgodnim sluajevima moe dati
tanije rezultate, s obzirom da funkcija NSum koristi izvjesne aproksimativne numerike metode koji,
mada rade veoma brzo, mogu zakazati u izvjesnim (na sreu, veoma rijetkim) sluajevima.
Ukoliko se rezultat sumiranja ne moe iskazati ni preko kakvih poznatih funkcija, Mathematica red
ostavlja neizraunat. Meutim, numerika aproksimacija rezultata se moe traiti ak i za takve redove
(pod uvjetom da opi lan ne ovisi od dodatnih parametara):
In[21] :=

Sum[1/(i!+i2), {i, 1, }]

i 2 i!

Out[21] =

i 1

In[22] := % // N
Out[22] = 0.766777

Nalaenje izvoda funkcija ne predstavlja nikakav problem za paket Mathematica. Intuitivno reeno,
prvi izvod neke funkcije f(x) je druga funkcija f (x) koja opisuje brzinu njenog rasta. Tako, ako x
predstavlja vrijeme, a f(x) opisuje zakon promjene puta nekog tijela u vremenu, tada f (x) opisuje zakon
promjene brzine tog tijela. Precizno se izvodi definiraju preko graninih vrijednosti. Drugi izvod f (x)
predstavlja prvi izvod prvog izvoda, a fizikalno predstavlja zakon opisivanja promjene ubrzanja. Slino
se definira trei izvod kao prvi izvod drugog izvoda (ili drugi izvod prvog izvoda), itd.
Za nalaenje izvoda u paketu Mathematica postoji vie naina. Prvi nain zasniva se na injenici da
ukoliko smo definirali neku vlastitu funkciju, recimo f, Mathematica automatski definira i njene izvode,
koji se zovu f ', f '', f ''', itd. Ovdje je ' znak apostrof (oprez: na nekim tastaturama ima vie razliitih
apostrofa; pravi je onaj koji nije nakoen niti nalijevo niti nadesno). Slijedi primjer:
In[23] := f [x_]
In[24] := f

:= ArcTan[x2]2 Cos[x]

'[x]
4 x ArcTan[ x 2 ] 2

Out[24] =

1 x4

In[25] := f

ArcTan[ x 2 ] 2 Sin [ x ]

''[x]

Out[25] = ArcT an[ x 2 ] 2 Sin [ x ]

8x2

4 2
(1 x )

16 x 2 ArcT an[ x 2 ]
(1 x 4 ) 2

4 ArcT an[ x 2 ]
Cos[ x ]
1 x4

8 x ArcT an[ x 2 ] Sin [ x ]


1 x4

Drugi nain za nalaenje izvoda ne trai prethodno definiranje funkcije. Funkcija D nalazi izvod
svog prvog argumenta, smatrajui da je nezavisna promjenljiva ona koja je zadana kao drugi argument
(ovo je bitno ukoliko funkcija zavisi od vie promjenljivih). Ukoliko elimo izvode vieg reda, zajedno
sa nezavisnom promjenljivom eljeni red stavimo u listu. Slijedi isti primjer, samo bez prethodnog
definiranja pomone funkcije:
In[26] :=

D[ArcTan[x2]2 Cos[x], x]

Out[26] =
In[27] :=

4 x ArcTan[ x 2 ] 2
1 x

ArcTan[ x 2 ] 2 Sin [ x ]

D[ArcTan[x2]2 Cos[x], {x, 2}]

Out[27] = ArcT an[ x 2 ] 2 Sin [ x ]

8x2

4 2
(1 x )

16 x 2 ArcT an[ x 2 ]
(1 x 4 ) 2

8 x ArcT an[ x 2 ] Sin [ x ]


1 x4

64

4 ArcT an[ x 2 ]
Cos[ x ]
1 x4

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

Interesantno je da se mogu nalaziti i izvodi izraza koji sadre nedefinirane funkcije. Rezultat se tada
izraava u openitom obliku:
In[28] :=

D[u[v[x]] u[x], x]

Out[28] = u[v[x]] u'[x] + u[x] u'[v[x]] v'[x]


In[29] :=

D[u[x] v[x], {x, 2}]

Out[29] = 2 u'[x] v'[x] + v[x] u''[x] + u[x] v'[x]

Vrlo je vano napomenuti da Mathematica ne pojednostavljuje automatski izraze koji nastaju nakon
diferenciranja, ve samo rutinski primjenjuje pravila diferenciranja na polazni izraz. Stoga je veoma
korisno pokuati dodatno pojednostaviti rezultat diferenciranja pomou funkcija Simplify odnosno
FullSimplify. U mnogo sluajeva ovo e dovesti do znatnog pojednostavljenja rezultata:
In[30] :=

D[2 ArcTan[x] + Log[x 1] Log[x + 1], x]

Out[30] =

1
1
2

1 x 1 x 1 x 2

% // Simplify
4
Out[31] =
1 x 4
In[31] :=

Za nalaenje razvoja funkcije u Tejlorov polinom koristi se funkcija Series. Prvi argument
predstavlja izraz koji se razvija, dok je drugi argument lista koja sadri ime nezavisne promjenljive,
taku oko koje se vri razvoj, i traeni stepen polinoma:
Series[Sin[x], {x, 0, 9}]
x3 x5
x7
x9
Out[32] = x

O[ x ]10
6 120 5040 362880
In[32] :=

Series[Log[x], {x, 1, 5}]


1
1
1
1
2
3
4
5
6
Out[33] = ( x 1) ( x 1) ( x 1) ( x 1) ( x 1) O[ x 1]
2
3
4
5
In[33] :=

Izrazi poput O[x]10 u rezultatu govore da je greka koja nastaje usljed aproksimacije funkcije dobijenim
polinomom istog reda veliine kao x10.
Mathematica zna da nalazi i neodreene i odreene integrale. Neodreeni integral predstavlja
operaciju obrnutu od nalaenja izvoda, a postie se pomou funkcije Integrate. Prvi argument
predstavlja izraz koji se integrira, a drugi argument predstavlja nezavisnu promjenljivu:
2

In[34] := Integrate[x Sin[x], x]


2
Out[34] = (2+x ) Cos[x] + 2 x Sin[x]

Ovaj rezultat bi se, koritenjem standardne matematike notacije prikazao kao

sin x dx = (2+x2) cos x + 2 x sin x

Slijedi jedan neto sloeniji primjer, u kojem izraz koji se integrira zavisi od parametra:
In[35] :=

Integrate[

Out[35] =

1
, x]
x a4
4

2 ArcTan1
4 2a
1

2x
2 ArcTan1
a

2x
Loga 2 2 a x x 2
a

Loga 2 2 a x x 2

65

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

Slino kao kod diferenciranja, Mathematica nee automatski pokuavati da pojednostavi dobijeni
rezultat integracije. Stoga je primjena funkcija Simplify odnosno FullSimplify na rezultat integracije
obino vrlo dobra ideja.
Rezultati integracije mogu biti izuzetno rogobatni u sluajevima kada se integracija svodi na
integraciju racionalnih izraza, iji se nazivnik ne da lako faktorizirati. Mathematica radi utede prostora
rezultate takvih integracija prikazuje u vidu tzv. RootSum objekata, koji predstavljaju kompaktni nain
zapisa nekih inae vrlo rogobatnih iracionalnih izraza (isto kao to je simbol uveden u matematiku radi
kompaktnijeg naina zapisivanja suma):
In[36] :=

Integrate[

Out[36] =

1
, x]
x 3x 3x3
3

Log[ x #1]
1
RootSum3 3 #1 3 #12 #13 &,
&
3
1 2 #1 #12

Ukoliko ba insistiramo, razvijeni oblik ovakvih rjeenja moemo dobiti pomou ranije spominjane
funkcije ToRadicals. Meutim, korisnije je pomou funkcije N izvriti numeriku aproksimaciju
iracionalnih veliina koje se javljaju u dobijenom izrazu:
In[37] :=

% // ToRadicals

Log1 12i / 33 x
Log1 12i / 33 x
Log[1 21 / 3 x ]
1

2
2
Out[37] =

3 1 2 (1 21 / 3 ) (1 21 / 3 ) 2 1 2 1 12i / 33 1 12i / 33 2 1 2 1 12i / 33 1 12i / 33 2


2

In[38] := % // N
Out[38] = 0.333333 (0.629961 Log [2.25992 + x] (0.31498 0.545562 ) Log [(0.370039 1.09112 ) + x]

(0.31498 + 0.545562 ) Log [(0.370039 + 1.09112 ) + x]

U dobijenom rezultatu i dalje moemo primijetiti neto veoma runo: on je izraen preko
kompleksnih brojeva (to je jo gore, kompleksni brojevi se javljaju pod znakom logaritma). Ovaj
rezultat se sigurno moe izraziti bez upotrebe kompleksnih brojeva (i to pomou kombinacije funkcija
logaritam i arkus tangens), s obzirom da je funkcija koja se integrira isto realna, ali naalost,
Mathematica takvu transformaciju ne zna da izvri. U ovom primjeru ne pomae niti Simplify, niti
FullSimplify, niti ikakva druga specifina transformacija. Mathematica jednostavno ne vidi nita toliko
runo u rezultatku koji koristi kompleksne brojeve, mada njihova upotreba ovdje nije nuna!
U mnogim sluajevima, rezultat integracije ne moe se izraziti preko elementarnih funkcija.
Mathematica e ponekad izraziti rezultat u vidu nekih neelementarnih funkcija koje poznaje (kao, npr.
pomou funkcije erf u primjeru koji slijedi). Ukoliko ni to ne uspije, Mathematica ostavlja problem
neizraunat:
Integrate[Exp[x2], x]
1
Out[39] =
Erf[ x ]
2
1
In[40] := Integrate[
, x]
x Sin[x]
In[39] :=

Out[40] =

x Sin [x] dx

Pored neodreenih, Mathematica moe raunati i odreene integrale. Za razliku od neodreenog


integrala koji kao rezultat daje funkciju, odreeni integral kao rezultat daje broj. Geometrijski, odreeni
integral od f(x) u granicama od a do b daje povrinu lika omeenog funkcijom y = f(x) i pravcima y = 0,
x = a i x = b. Odreeni integral takoer raunamo pomou funkcije Integrate, pri emu granice
integracije a i b stavljamo u listu sa nezavisnom promjenljivom. Slijedi primjer koji rauna odreeni
integral funkcije (x + 1) / (x2 + 1) u granicama od 1 do 2:

66

Dr. eljko Juri : Interaktivna raunanja u programskom paketu Mathematica /skraena verzija/
Prirunik za laboratorijske vjebe na predmetu Raunarski sistemi

In[41] :=

Integrate[

Out[41] =

x 1
x2 1

, {x, 1, 2}]

1
5
ArcT an[2] Log
4
2
2

In[42] := % // N
Out[42] = 0.779896

Interesantno je da Mathematica moe nai numeriku aproksimaciju ak i onih odreenih integrala


koji se ne mogu tano izraunati, kao to je vidljivo iz sljedeeg primjera:
In[43] :=

Integrate[
2

Out[43] =

1
, {x, 1, 2}]
x Sin[x]

x Sin [x] dx
1

In[44] := % // N
Out[44] = 0.414085

Ovo je mogue samo ukoliko niti funkcija koja se integrira niti granice integracije ne zavise od nekih
parametara razliitih od promjenljive po kojoj se integrira. Ukoliko odmah znamo da elimo numeriku
aproksimaciju, umjesto funkcije Integrate moemo koristiti funkciju NIntegrate, uz iste primjedbe koje
vrijede i za odnos izmeu funkcija Sum i NSum.
Nesvojstveni integrali takoer nisu problem za paket Mathematica, bez obzira da li se radi o
integralu koji je nesvojstven zbog beskonane oblasti integracije, ili integralu koji je nesvojstven zbog
toga to podintegralna funkcija odlazi u beskonanost:
In[45] :=

Integrate[Exp[x2], {x, 0, }]

Out[45] =
In[46] :=

Integrate[

, {x, 0, 1}]

x
Out[46] =

Nesvojstveni integrali mogu biti i divergentni. Mathematica zna prepoznati ovakve situacije i
prijaviti upozorenje:
In[47] :=

Integrate[1/x, {x, 0, 1}]


Integrate :: idiv : Integral of

Out[47] =

1
x

does not converge on {0, 1}

11

0 x dx

Nesvojstveni integrali koji ovise od parametara mogu konvergirati ili divergirati, ovisno od
vrijednosti parametara. Za razliku od beskonanih redova, Mathematica zna utvrditi za koje vrijednosti
parametara integral konvergira:
Integrate[x n, {x, 0, 1}]
1
Out[48] = If Re [n ] 1,
, Integrate[ x n , {x, 0,1}, Assumptions Re[ n ] 1]
1 n
In[48] :=

Bez obzira na rogobatnost prikazanog rjeenja, na osnovu znaenja funkcije If moe se prepoznati
osnovna ideja: integral funkcije x n u granicama od 0 do 1 jednak je 1/(1n), ali samo pod uvjetom da
vrijedi Re{n}<1 (odnosno da je realni dio od n manji od jedinice). U protivnom, integral se ne da
izraunati.
67

You might also like