Građevinski fakultet Sveučilišta u Zagrebu
Osnove inženjerske informatike II (Mathematica)
2. predavanje

Liste, vektori, matrice

LISTA je vrlo važan pojam u programu Mathematica.
Korisnik  često koristi LISTU za upis inputa, a Mathematica često daje LISTU kao output.

Pojam liste

Lista je konačni niz matematičkih objekata, međusobno odvojenih zarezima, upisanih unutar vitičastih zagrada.
Matematičke objekte koji čine listu nazivamo  elementima liste.
Broj elemenata liste nazivamo duljinom liste.
Elementi liste mogu biti razni matematički objekti, kao npr.  brojevi, funkcije, druge liste,...... itd.

Primjeri lista

Lista duljine 3 čiji su elementi brojevi.

In[1]:=

02pred-novo_1.gif

Out[1]=

02pred-novo_2.gif

Lista duljine 4 čiji su elementi brojevi i funkcije.

In[2]:=

02pred-novo_3.gif

Out[2]=

02pred-novo_4.gif

Lista duljine 4 čiji su elementi brojevi i liste

In[3]:=

02pred-novo_5.gif

Out[3]=

02pred-novo_6.gif

Ako element liste sadrži neku Mathematica naredbu, program će tu naredbu izvršiti.

In[4]:=

02pred-novo_7.gif

Out[4]=

02pred-novo_8.gif

Ono osnovno i bitno što nam Mathematica lista omogućuje jest uređeno grupiranje izraza bilo koje vrste!

    Pridruživanje vrijednosti

Mathematica naredba za pridruživanje vrijednosti nekoj varijabli je, kao što je uobičajeno u matematici, znak jednakosti =
Želimo li varijabli a  pridružiti broj 3 pišemo:

In[5]:=

02pred-novo_9.gif

Out[5]=

02pred-novo_10.gif

Kad se u daljnjem računu pojavi broj a, Mathematica ga zamjenjuje s brojem 3.

In[6]:=

02pred-novo_11.gif

Out[6]=

02pred-novo_12.gif

Želimo li sada varijabli a  pridružiti neku drugu vrijednost, npr. broj 2, pišemo:

In[7]:=

02pred-novo_13.gif

Out[7]=

02pred-novo_14.gif

In[8]:=

02pred-novo_15.gif

Out[8]=

02pred-novo_16.gif

Ako želimo da Mathematica "zaboravi" pridruženu vrijednost  koristimo  se  funkcijom Clear.

In[9]:=

02pred-novo_17.gif

In[10]:=

02pred-novo_18.gif

Out[10]=

02pred-novo_19.gif

Bitno je da korisnik ne zaboravi koju je vrijednost pridružio varijabli (pri duljem računu i većem broju varijabli to se dosta lako dogodi). Imajte stoga na umu da Mathematica "trajno pamti" vrijednost pridruženu varijabli, sve dok ju ne otklonite ili ne izađete iz programa.

VAŽNO:

Ako se, pri pridruživanju vrijednosti, s desne strane znaka jednakosti nalazi neki izraz,  tada Mathematica prvo taj izraz izračuna i tek onda  izvrši pridruživanje vrijednosti lijevoj strani.

Na primjer, neka je varijabli a ponovno pridružen broj 3

In[11]:=

02pred-novo_20.gif

Out[11]=

02pred-novo_21.gif

i definiramo novu varijablu var na sljedeći način:

In[12]:=

02pred-novo_22.gif

Out[12]=

02pred-novo_23.gif

Mathematica je, prije pridruživanja, izračunala desnu stranu i tek onda izvršila pridruživanje.
Znači varijabla var ima vrijednost 6, a ne 02pred-novo_24.gif.
To se vidi iz sljedećeg:

In[13]:=

02pred-novo_25.gif

Out[13]=

02pred-novo_26.gif

In[14]:=

02pred-novo_27.gif

Out[14]=

02pred-novo_28.gif

In[15]:=

02pred-novo_29.gif

In[16]:=

02pred-novo_30.gif

Out[16]=

02pred-novo_31.gif

In[17]:=

02pred-novo_32.gif

Out[17]=

02pred-novo_33.gif

Vrijednost varijable var je ostala 6 kao što je i bila, budući da je u trenutku pridruživanja varijabla a imala vrijednost 3.

Napišemo li

In[18]:=

02pred-novo_34.gif

onda varijabla var gubi svoju pridruženu vrijednost.

In[19]:=

02pred-novo_35.gif

Out[19]=

02pred-novo_36.gif

    Značenje znaka    ;

Završimo li input znakom ; Mathematica će izvršiti zadanu operaciju, ali neće ispisati output.

In[20]:=

02pred-novo_37.gif

In[21]:=

02pred-novo_38.gif

Out[21]=

02pred-novo_39.gif

In[22]:=

02pred-novo_40.gif

Znak ; ćemo koristiti i onda kada želimo da Mathematica izvrši više naredbi, a da  output ispiše samo za neke od njih.

In[23]:=

02pred-novo_41.gif

Out[23]=

02pred-novo_42.gif

Želimo li u istom inputu upisati više Mathematica naredbi, pisat ćemo ih prelaskom u novi red.

In[24]:=

02pred-novo_43.gif

Out[24]=

02pred-novo_44.gif

Out[25]=

02pred-novo_45.gif

In[26]:=

02pred-novo_46.gif

Računanje s listama

Operacije s listama zapisuju se prirodno.

In[30]:=

02pred-novo_47.gif

In[33]:=

02pred-novo_48.gif

Out[33]=

02pred-novo_49.gif

In[34]:=

02pred-novo_50.gif

Out[34]=

02pred-novo_51.gif

In[35]:=

02pred-novo_52.gif

Out[35]=

02pred-novo_53.gif

Linearne kombinacije lista mogu se računati samo za liste istih duljina.

In[36]:=

02pred-novo_54.gif

02pred-novo_55.gif

Out[36]=

02pred-novo_56.gif

In[37]:=

02pred-novo_57.gif

Out[37]=

02pred-novo_58.gif

In[38]:=

02pred-novo_59.gif

Out[38]=

02pred-novo_60.gif

In[39]:=

02pred-novo_61.gif

Out[39]=

02pred-novo_62.gif

Lista se može potencirati samo s listom iste duljine.

In[40]:=

02pred-novo_63.gif

02pred-novo_64.gif

02pred-novo_65.gif

Out[40]=

02pred-novo_66.gif

In[41]:=

02pred-novo_67.gif

Out[41]=

02pred-novo_68.gif

In[42]:=

02pred-novo_69.gif

    Značenje znaka    //

Znak //  u Mathematici se može upotrijebiti za izvršenje nekih naredbi, umjesto uglatih zagrada.
Na primjer, umjesto

In[43]:=

02pred-novo_70.gif

Out[43]=

02pred-novo_71.gif

možemo pisati

In[44]:=

02pred-novo_72.gif

Out[44]=

02pred-novo_73.gif

Funkcije koje djeluju na listama

Popis osnovnih funkcija koje djeluju na listama je:
Length[lista]                  -   broj elemenata liste (duljina liste)
First[lista]                     -   prvi element liste
Last[lista]                       -   zadnji element liste
Rest[lista]                       -   lista iz koje je izbačen prvi element
lista[[i]]                         -   i-ti element liste
lista[[{i,j}]]                -   i-ti i j-ti element liste
lista[[{i,j,k,...}]]   -   i-ti, j-ti, k-ti,..... element liste
Obratite pažnju na dvije lijeve i dvije desne uglate zagrade. Dvostruke uglate zagrade u Mathematici se upotrbljavaju za indeksiranje.

Primjeri

Varijabli a pridružimo listu {1, 2, 4, 8, 16}

In[45]:=

02pred-novo_74.gif

•  Izračunajte kosinus zadnjeg člana liste a (decimalni prikaz).

In[46]:=

02pred-novo_75.gif

Out[46]=

02pred-novo_76.gif

•  Potencirajte sve elemente liste a s brojem elemenata liste a.

In[47]:=

02pred-novo_77.gif

Out[47]=

02pred-novo_78.gif

•  Kvadrirajte sve elemente liste a osim prvog.

In[48]:=

02pred-novo_79.gif

Out[48]=

02pred-novo_80.gif

•  Potencirajte treći element liste a sa njenim četvrtim elementom.

In[49]:=

02pred-novo_81.gif

Out[49]=

02pred-novo_82.gif

•  Formirajte listu čiji su elementi redom: 5., 3. i 2. element liste a.

In[50]:=

02pred-novo_83.gif

Out[50]=

02pred-novo_84.gif

In[51]:=

02pred-novo_85.gif

Lista tablice vrijednosti -- naredbe TableForm i Table

TableForm

Želimo li da Mathematica ispiše listu u formi tablice, koristimo naredbu TableForm koja djeluje na sljedeći način:

In[52]:=

02pred-novo_86.gif

Out[52]//TableForm=

1
2
3

Zbog preglednosi inputa nju je, gotovo redovito, bolje zapisivati pomoću znaka //

In[53]:=

02pred-novo_87.gif

Out[53]//TableForm=

1
2
3

Ako su elementi liste druge liste, tablična forma je sljedeća:

In[54]:=

02pred-novo_88.gif

Out[54]//TableForm=

1 2 3
a b c

In[55]:=

02pred-novo_89.gif

Out[55]//TableForm=

1 2 3
a b c
x y z

In[56]:=

02pred-novo_90.gif

Out[56]//TableForm=

1 2 3
a b
x y z w
02pred-novo_91.gif

Table

Tablicu vrijednosti u Mathematici formiramo funkcijom Table.
Rezultat je lista vrijednosti.

Funkcija Table ima slijedeću sintaksu:
    ●    Table[f(i), {i, i02pred-novo_92.gif}]
daje listu funkcijskih vrijednosti f(i), kada i poprima vrijednosti prirodnih brojeva od 1 do i02pred-novo_93.gif, s korakom 1.

In[57]:=

02pred-novo_94.gif

Out[57]=

02pred-novo_95.gif

In[58]:=

02pred-novo_96.gif

Out[58]=

02pred-novo_97.gif

    ●    Table[f(i), {i,i02pred-novo_98.gif, i02pred-novo_99.gif}]
daje listu funkcijskih vrijednosti f(i), kada i poprima vrijednosti realnih brojeva od i02pred-novo_100.gif do i02pred-novo_101.gif, s korakom 1.

In[59]:=

02pred-novo_102.gif

Out[59]=

02pred-novo_103.gif

    ●    Table[f(i), {i,i02pred-novo_104.gif, i02pred-novo_105.gif,d02pred-novo_106.gif}]
daje listu funkcijskih vrijednosti f(i), kada i poprima vrijednosti realnih brojeva od i02pred-novo_107.gif do i02pred-novo_108.gif, s korakom d02pred-novo_109.gif.

In[60]:=

02pred-novo_110.gif

Out[60]=

02pred-novo_111.gif

    ●    Table[f(i,j), {i,i02pred-novo_112.gif, i02pred-novo_113.gif,d02pred-novo_114.gif},{j,j02pred-novo_115.gif, j02pred-novo_116.gif,d02pred-novo_117.gif}]
daje dvodimenzionalnu listu funkcijskih vrijednosti f(i,j), kada i poprima vrijednosti realnih brojeva od i02pred-novo_118.gif do i02pred-novo_119.gif, s korakom d02pred-novo_120.gif, a  j poprima vrijednosti realnih brojeva od j02pred-novo_121.gif do j02pred-novo_122.gif, s korakom d02pred-novo_123.gif,

TABLICA MNOŽENJA

In[61]:=

02pred-novo_124.gif

Out[61]=

02pred-novo_125.gif

In[62]:=

02pred-novo_126.gif

Out[62]//TableForm=

1 2 3 4 5 6 7 8 9 10
2 4 6 8 10 12 14 16 18 20
3 6 9 12 15 18 21 24 27 30
4 8 12 16 20 24 28 32 36 40
5 10 15 20 25 30 35 40 45 50
6 12 18 24 30 36 42 48 54 60
7 14 21 28 35 42 49 56 63 70
8 16 24 32 40 48 56 64 72 80
9 18 27 36 45 54 63 72 81 90
10 20 30 40 50 60 70 80 90 100

TABLICA BINOMNIH KOEFICIJENATA (Pascalov trokut)

In[63]:=

02pred-novo_127.gif

Out[63]//TableForm=

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

In[64]:=

02pred-novo_128.gif

Out[64]//TableForm=

1 1
a+b a+b
02pred-novo_129.gif 02pred-novo_130.gif
02pred-novo_131.gif 02pred-novo_132.gif
02pred-novo_133.gif 02pred-novo_134.gif
02pred-novo_135.gif 02pred-novo_136.gif
02pred-novo_137.gif 02pred-novo_138.gif
02pred-novo_139.gif 02pred-novo_140.gif

Naravno da indeksi NE MORAJU imati oznake i i j, već za varijablu možete koristiti bilo koju drugu odgovarajuću oznaku.

Vektorski račun

U programskom sustavu Mathematica vektori su reprezentirani listama njihovih skalarnih komponenata.
Vektori u ravnini - listama duljine 2.
Vektori u prostoru - listama duljine 3.
Mi ćemo u našim primjerima računati s vektorima u prostoru, ali se sva ona izlaganja koja nisu specifična samo za prostor, mogu primijeniti na  ravninu - ukidanjem treće skalarne komponente.

Zadavanje vektora

Neka su 02pred-novo_141.gif i 02pred-novo_142.gif vektori u prostoru
02pred-novo_143.gif = 402pred-novo_144.gif + 302pred-novo_145.gif - 02pred-novo_146.gif
  02pred-novo_147.gif= -02pred-novo_148.gif + 602pred-novo_149.gif +202pred-novo_150.gif
U Mathematici ćemo ih zadati listama njihovih skalarnih komponenata.

In[65]:=

02pred-novo_151.gif

Množenje vektora skalarom (realnim brojem)

Množenje vektora  02pred-novo_152.gif sa skalarom (na primjer 1.5) izračunati ćemo na sljedeći način

In[67]:=

02pred-novo_153.gif

Out[67]=

02pred-novo_154.gif

ili

In[68]:=

02pred-novo_155.gif

Out[68]=

02pred-novo_156.gif

ili

In[69]:=

02pred-novo_157.gif

Out[69]=

02pred-novo_158.gif

i očitati rješenje
02pred-novo_159.gif = 602pred-novo_160.gif + 4.502pred-novo_161.gif - 1.502pred-novo_162.gif

Linearna kombinacija vektora

Vektor  02pred-novo_163.gif = 602pred-novo_164.gif - 1.502pred-novo_165.gif izračunati ćemo

In[70]:=

02pred-novo_166.gif

Out[70]=

02pred-novo_167.gif

i očitati rješenje
02pred-novo_168.gif = 25.502pred-novo_169.gif + 902pred-novo_170.gif - 902pred-novo_171.gif

Skalarni produkt vektora

Operacija skalrnog množenja vektora u Mathematici se označava točkom ( . ).
Stoga skalrni produkt vektora  02pred-novo_172.gif i  02pred-novo_173.gif računamo:

In[71]:=

02pred-novo_174.gif

Out[71]=

02pred-novo_175.gif

Vektorski produkt vektora

Mathematica naredba za operaciju vektorskog množenja vektora je Cross.
Stoga vektorski produkt   02pred-novo_176.gif × 02pred-novo_177.gif računamo

In[72]:=

02pred-novo_178.gif

Out[72]=

02pred-novo_179.gif

i očitavamo rješenje rješenje
02pred-novo_180.gif × 02pred-novo_181.gif = 1202pred-novo_182.gif -702pred-novo_183.gif+2702pred-novo_184.gif

Modul vektora

Budući da je  |02pred-novo_185.gif| =02pred-novo_186.gif, modul vektora 02pred-novo_187.gif u Mathematici računamo:

In[73]:=

02pred-novo_188.gif

Out[73]=

02pred-novo_189.gif

Kut između vektora

Budući je  cos∠(02pred-novo_190.gif)=02pred-novo_191.gif, kut između vektora 02pred-novo_192.gif i 02pred-novo_193.gif u Mathematici računamo:

In[74]:=

02pred-novo_194.gif

Out[74]=

02pred-novo_195.gif

In[75]:=

02pred-novo_196.gif

Out[75]=

02pred-novo_197.gif

Dobivena vrijednost je u radijanima. Rezultat u stupnjevima dobivamo na sljedeći način:

In[76]:=

02pred-novo_198.gif

Out[76]=

02pred-novo_199.gif

In[77]:=

02pred-novo_200.gif

Matrični račun

U programskom sustavu Mathematica matrice su reprezentirane listama lista.
Prikazuju se kao liste svojih redaka, a retci kao liste svojih elemenata.
Naravno, svi retci neke matrice moraju imati isti broj elemenata
Na primjer, ovo je jedna 3×2 matrica.

In[78]:=

02pred-novo_201.gif

Out[78]=

02pred-novo_202.gif

Output u uobičajenom zapisu dobivamo naredbom MatrixForm.

In[79]:=

02pred-novo_203.gif

Out[79]//MatrixForm=

02pred-novo_204.gif

Matricu možemo dobiti pomoću naredbe Table.
Table[f(i,j),{i,n},{j,m}]      tvori n×m matricu.  

In[80]:=

02pred-novo_205.gif

Out[80]//MatrixForm=

02pred-novo_206.gif

Neke naredbe

    ●    Table[f(i,j),{i,n},{j,m}]      tvori n×m matricu.  

In[81]:=

02pred-novo_207.gif

Out[81]//MatrixForm=

02pred-novo_208.gif

    ●    IdentityMatrix[n]      tvori jediničnu matricu n×n.  

In[82]:=

02pred-novo_209.gif

Out[82]//MatrixForm=

02pred-novo_210.gif

    ●    DiagonalMatrix[{02pred-novo_211.gif,....,02pred-novo_212.gif}]
tvori n×n matricu s elementima liste {02pred-novo_213.gif,....,02pred-novo_214.gif} na glavnoj dijagonali, a ostalima elementima jednakim 0.  

In[83]:=

02pred-novo_215.gif

Out[83]//MatrixForm=

02pred-novo_216.gif

Računanje s matricama

In[84]:=

02pred-novo_217.gif

In[85]:=

02pred-novo_218.gif

In[87]:=

02pred-novo_219.gif

Out[87]//MatrixForm=

02pred-novo_220.gif

Out[88]//MatrixForm=

02pred-novo_221.gif

In[89]:=

02pred-novo_222.gif

Out[89]=

02pred-novo_223.gif

●    Matricu množimo brojem tako da listu pomnožimo s tim brojem.
●    Matrice zbrajamo i oduzimamo tako da zbrajamo i oduzimamo pripadne liste.

In[90]:=

02pred-novo_224.gif

Out[90]//MatrixForm=

02pred-novo_225.gif

●     Matrice međusobno množimo pomoću znaka . (točka). NE mogu se pomnožiti bilo koje dvije matrice.

In[91]:=

02pred-novo_226.gif

Out[91]//MatrixForm=

02pred-novo_227.gif

Imajte na umu da množenje matrica nije isto što i množenje lista pa treba obratiti pažnju na mogućunost zabune. Naime, zapis m1*m2 - NEĆE dati produkt matrica, već listu produkata elemenata liste m1 s odgovarajućim elementima liste m2.

In[92]:=

02pred-novo_228.gif

Out[92]//MatrixForm=

02pred-novo_229.gif

●     Ako je matrica kvadratna (broj redaka = broju stupaca) možemo joj izračunati determinantu funkcijom Det.

In[93]:=

02pred-novo_230.gif

Out[93]=

02pred-novo_231.gif

Out[94]=

02pred-novo_232.gif

●     Ako je delterminanta kvadratne matrice različita od nule, inverznu matricu računamo funkcijom Inverse.

In[95]:=

02pred-novo_233.gif

Out[95]//MatrixForm=

02pred-novo_234.gif

    ●    MatrixPower[m1,n] daje n-tu potenciju matrice m1.

In[96]:=

02pred-novo_235.gif

Out[96]//MatrixForm=

02pred-novo_236.gif

    ●    Transpose[m1] daje transponiranu matricu matrice m1.

In[97]:=

02pred-novo_237.gif

Out[97]//MatrixForm=

02pred-novo_238.gif

Notebook izradili: Sonja Gorjanc, Vladimir Benić

Spikey Created with Wolfram Mathematica 7.0