print('Zdravo svete!') # Predmet: Verovatnoca za I smer. # 2+3 predmet. # Asistent\saradnik: Tamara Milic, Danijel Subotic # e-mail: danijel_subotic@matf.bg.ac.rs # imacemo 1 kolokvijuma od 30 poena (uslov 13) # i ispit od 70 poena # Vezbe imamo sredom 16-19h u Dlabu, nazalost :(. # I. Prvi cas. # Kako ste vi ipak informaticari, planirano je da se vasi casovi uglavnom baziraju na programski jezik R. # R je programski jezik i okruzenje, koje se generalno koristi za statisticke obrade podataka. # Mislim da cete cak i u nekom drugom kursu u okviru OAS sresti R. (Vestacka inteligencija?) # R je generalno programski jezik koji mnogo bolje radi sa vektorima (vi ste informaticari razloge sigurno nate bolje od mene). # Zato ima i milion nacina za definisanje vektora; vektor1 = c(1, 2, 3, 4, 5, 6) vektor1 vektor2 <- seq(1, 6, 1 ) # seq od sequence. "=" i "<-" su oznake da dodelu. vektor2 # ili ova dva reda se mogu odmah zameniti komandom: (vektor3 = seq(1, 6, 1)) # ili vektor4 = 1:6 length(vektor2) # vraca duzinu vektora. vektor1 == vektor2 v = c(1, 2, 4, 5, 6, 10) w = 1:6 v == w # vraca vektor iste duzine sa vrednostima TRUE\FALSE na i-tom mestu, ako je i-ta koordinata ista\razlicita. # Pristupiti odredjenom clanu vektora # mozemo na sledeci nacin # (Bitno! indeksiranje pocinje od broja 1): vektor1[2] # Mozemo i da ga promenimo: vektor2[2] = 100 vektor2 # takodje mozemo da odaberemo neki podskup vektora: vektor2[2:4] vektor2[ c(2,5,4) ] vektor2[(vektor2>=2)&(vektor2<5)] # probajte da protumacite... # Operacije sa vektorima. vektor2 vektor5 = vektor2 - 60 vektor6 = vektor2 - rep(60, length(vektor2)) vektor5 == vektor6 # primenjuje se na sve elemente vektora. vektor5+vektor6 #sabira clan po clan vektor=5*vektor6+vektor5 - vektor2 vektor vektor5/vektor6 # NAPOMENA: ':' # ima veci prioritet od aritm. operacija, # npr: n = 10 v1 = 1:n-1 v1 v2 = 1:(n-1) v2 #NA vrednosti - not available v = c(1,4,6,NA,23) v sum(v) #ako hocemo da funkcija ignorise NA vrednosti sum(na.omit(v)) # Jos neke od funkcija sa vektorima: vektor1 = 1:6 length(vektor1) sum(vektor1) mean(vektor1) var(vektor1) range(vektor1) max(vektor1) min(vektor1) median(vektor1) sort(vektor1, decreasing = TRUE) sd(vektor1) v=sum((vektor1- mean(vektor1))^2)/(length(vektor1)-1) # isto sto i var - popravljena uzoracka disperzija. v # Clanovi vektora ne moraju da budu brojevi, vec mogu da budu stringovi, logicke vrednosti (T\F). vektor1=c("jedan", "dva", "tri") vektor1 (vektor2=c("Mogu i cele recenice", ",", "valjda", "...")) #logicke promenljive dobijamo i kao rezultat relacijskih izraza tipa: 3<4 3 != 3 #logicki operatori: <=, >=, ==, !=, <, >, & (AND), | (OR), ! (NOT) (2<4)&(3==3) x = (2<4)&(3==3) x # Matrice. (m1 = array(1:6, dim=c(3,2))) (m2=array(c(1,2,3,4,5,6), dim=c(2,3))) # Pristupanje elementima. m1[ 1, ] m1[ , 1] m1[2,2] # a sve to moze i primenom funkcije matrix(): m3 = matrix( 1:6, nrow = 2, ncol = 3) m3 # Crtanje grafika: x= c(110, 200, 15, 80, 90, 118, 198, 35, 80) y = 1:length(x) plot(x,y) plot(y,x, type = 'b') par(mfrow=c(1,2)) plot(y,x, type="l") plot(1:5, 5:9, type="b") x = 5 y = 6 if(x < y) { print('X je zaista manji od Y') } else print('X nije manji od Y') # Funkcija help(): # Najbitnija funkcija u R programskom jeziku. :) # Pogotovo je udobna za koriscenje u RStudio. # Funkcije # Takodje jedan od bitnijih alata u R-u su funkcije. saberi_tri_broja <- function(x, y, z) { vrednost = x + y + z return(c(x, y, z, vrednost) ) } saberi_tri_broja( y = 2, z = 109, x = 1000000) faktoriel <- function(n) { if(n>=1) { n=n*faktoriel(n-1) return(n); } else { return(1); } } # Slucajni broj # Slucajni broj na intervalu [a,b] mozemo dobiti pomocu funkcije runif(size, min=a, max=b ), gde je # size = koliko slucajnih brojeva zelimo da dobijemo, # min = pocetak intervala # max= kraj intervala runif(6, 0, 10) # vraca vektor duzine 10, sa slucajnim brojevima. # Ukoliko zelimo celobrojno, mozemo to odraditi pomocu funkcije sample(vector =v, size, replace=FALSE\TRUE, prob=p ) # gde su argumenti sledeci: # vector = saljemo vektor vrednosti medju kojima zelimo da odaberemo neki. # size = koliko tih slucajnih brojeva. # replace = da li sa ponavljanjem ili bez. Napomena: po defoltu je FALSE! # prob = vektor verovatnoca, koji dodeljujemo svakom broju. sample(1:6, 10, replace=TRUE, prob=c(1/6, 1/6, 1/6, 1/6, 1/6, 1/6)) # Ovaj poziv ukoliko zelimo da svaka vrednost bude podjednako verovatna. sample(1:6, 10, replace=TRUE, prob=c(1/2, 1/10, 1/10, 1/10, 1/10, 1/10)) # U ovom pozivu verovatnoca da se odabere 1 je 0.5, Dok za sve ostale brojeve 1/10. Stoga i ocekivano cesto dobijamo 1.