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.

{2.3,Pi,4}

Lista duljine 4 čiji su elementi brojevi i funkcije.

{12/5, Sin[x], x^2, 8.}

Lista duljine 4 čiji su elementi brojevi i liste

{5.6,E, {1.3, 5}, {Cos[x], 4, 5.}}

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

{5.6,E^2., {1.3, 5}, {Cos[Pi/6], 4, 5.}}

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:

a=3

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

a^5-a^4+3

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

a=2

a^5-a^4+3

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

Clear[a]

a

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

a=3

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

var=a^2-a

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 (a^2)-a.
To se vidi iz sljedećeg:

a=15

var

Clear[a]

a

var

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

Clear[var]

onda varijabla var gubi svoju pridruženu vrijednost.

var

Značenje znaka    ;

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

a=10;

a^2

Clear[a]

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

x=1;y=2;z=3;x+y+z

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

x=1;y=2;z=3;x+y+z
x-y-z

Clear[x]
Clear[y]
Clear[z]
Clear[a]

Računanje s listama

Operacije s listama zapisuju se prirodno.

lista1={1,2,3,4};
lista2={a,b,c,d};
lista3={x,y,z};

lista2-4

3*lista1

lista1+3*lista2

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

lista1+lista3

lista1^2

2^lista1

lista1^lista2

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

lista1^lista3

Cos[Pi*lista1]

Clear[lista1];Clear[lista2];Clear[lista3]

Značenje znaka    //

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

N[E^2]

možemo pisati

E^2//N

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}

a={1, 2, 4, 8, 16};

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

Cos[Last[a]] // N

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

a^Length[a]

◼  Kvadrirajte sve elemente liste a osim prvog.

Rest[a]^2

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

a[[3]]^a[[4]]

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

a[[{5,3,2}]]

Clear[a]

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:

TableForm[{1,2,3}]

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

{1,2,3}//TableForm

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

{{1,2,3},{a,b,c}}//TableForm

{{1,2,3},{a,b,c},{x,y,z}}//TableForm

{{1,2,3},{a,b},{x,y,z,w},{Sin[Pi/4]}}//TableForm

Table

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

Funkcija Table ima slijedeću sintaksu:
	•	Table[f(i), {i, imax}] 
daje listu funkcijskih vrijednosti f(i), kada i poprima vrijednosti prirodnih brojeva od 1 do imax, s korakom 1.

Table[i^2,{i,10}]

Table[i^2,{i,10.3}]

•	Table[f(i), {i,imin, imax}] 
daje listu funkcijskih vrijednosti f(i), kada i poprima vrijednosti realnih brojeva od imin do imax, s korakom 1.

Table[i^2,{i,0.3,10.3}]

•	Table[f(i), {i,imin, imax,d  i}] 
daje listu funkcijskih vrijednosti f(i), kada i poprima vrijednosti realnih brojeva od imin do imax, s korakom d  i.

Table[Tan[i],{i,0,Pi,Pi/6}]

•	Table[f(i,j), {i,imin, imax,d  i},{j,jmin, jmax,d  j}] 
daje dvodimenzionalnu listu funkcijskih vrijednosti f(i,j), kada i poprima vrijednosti realnih brojeva od imin do imax, s korakom d  i, a  j poprima vrijednosti realnih brojeva od jmin do jmax, s korakom d  j,

TABLICA MNOŽENJA

Table[i*j,{i,1,10},{j,1,10}]

%//TableForm

TABLICA BINOMNIH KOEFICIJENATA (Pascalov trokut)

Table[Binomial[i,j],{i,0,7},{j,0,i}]//TableForm

Table[{(a+b)^i, Expand[(a+b)^i]},{i,0,7}]//TableForm

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 (OverVector[a]) i (OverVector[b]) vektori u prostoru
  (OverVector[a]) = 4(OverVector[i]) + 3(OverVector[j]) - (OverVector[k]) 
  (OverVector[b])= -(OverVector[i]) + 6(OverVector[j]) +2(OverVector[k])
 U Mathematici ćemo ih zadati listama njihovih skalarnih komponenata.

a={4,3,-1};
b={-1,6,2};

Množenje vektora skalarom (realnim brojem)

Množenje vektora   (OverVector[a]) sa skalarom (na primjer 1.5) izračunati ćemo na sljedeći način

1.5a

ili

1.5*a

ili

1.5{4,3,-1}

i očitati rješenje
  1.5(OverVector[a]) = 6(OverVector[i]) + 4.5(OverVector[j]) - 1.5(OverVector[k])

Linearna kombinacija vektora

Vektor   (OverVector[c]) = 6(OverVector[a]) - 1.5(OverVector[b]) izračunati ćemo

6a-1.5b

i očitati rješenje
 (OverVector[c]) = 25.5(OverVector[i]) + 9(OverVector[j]) - 9(OverVector[k])

Skalarni produkt vektora

Operacija skalrnog množenja vektora u Mathematici se označava točkom ( . ).
Stoga skalrni produkt vektora  (OverVector[a]) i  (OverVector[b]) računamo:

a.b

Vektorski produkt vektora

Mathematica naredba za operaciju vektorskog množenja vektora je Cross.
Stoga vektorski produkt   (OverVector[a]) × (OverVector[b]) računamo

Cross[a,b]

i očitavamo rješenje rješenje
 (OverVector[a]) × (OverVector[b]) = 12(OverVector[i]) -7(OverVector[j])+27(OverVector[k])

Modul vektora

Budući da je  |(OverVector[a])| =(Sqrt[ (OverVector[a]) · (OverVector[a])]), modul vektora (OverVector[a]) u Mathematici računamo:

Sqrt[a.a]

Kut između vektora

Budući je  cos∢((OverVector[a]),(OverVector[b]))=(((OverVector[a]) · (OverVector[b]))/(|(OverVector[a])||(OverVector[b])|)), kut između vektora (OverVector[a]) i (OverVector[b]) u Mathematici računamo:

ArcCos[a.b/Sqrt[a.a*b.b]]

%//N

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

%*180/Pi

Clear[a,b]

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.

{{1,2},{2,3},{3,4}}

Output u uobičajenom zapisu dobivamo naredbom MatrixForm.

%//MatrixForm

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

Table[i*j,{i,4},{j,4}]//MatrixForm

Neke naredbe

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

Table[i*j,{i,4},{j,4}]//MatrixForm

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

IdentityMatrix[6]//MatrixForm

•	DiagonalMatrix[{(Subscript[a, 1]),....,(Subscript[a, n])}]
tvori n×n matricu s elementima liste {(Subscript[a, 1]),....,(Subscript[a, n])} na glavnoj dijagonali, a ostalima elementima jednakim 0.

DiagonalMatrix[{1,2,3,6}]//MatrixForm

Računanje s matricama

Clear[a,b,c,d,e,f]

m1={{1,2,3},{4,5,6},{7,8,9}};
m2={{a,b,c},{d,e,f},{g,h,i}};

m1//MatrixForm
m2//MatrixForm

(({{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}))

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

3*m1-2*m2//MatrixForm

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

m1.m2//MatrixForm

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.

m1*m2//MatrixForm

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

Det[m1]
Det[m2]

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

Inverse[m2]//MatrixForm

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

MatrixPower[m1,2]//MatrixForm

•	Transpose[m1] daje transponiranu matricu matrice m1.

Transpose[m1]//MatrixForm

Notebook izradili: Sonja Gorjanc, Vladimir Benić