# 1. zadatak # Zadatak 1: Simulirati bacanje regularne kockice za igru. Izracunati # frekvenciju pojavljivanja šestice u 1000 izvodjenja eksperimenta. Nacrtati # histogram frekvencija. sample(6, 1, prob = rep(1/6,6)) s<-sample(6, 1000, prob = rep(1/6,6), replace = TRUE) mean(s==6) # ekvivalentan poziv sum(s==6)/length(s) hist(s, main = "") # Zadatak 2: Bacaju se istovremeno kocka za igru i novčić. # a) Ispisati skup svih ishoda. kocka<-c(1,2,3,4,5,6) novcic<-c("pismo", "glava") matrica.ishoda<-outer(kocka, novcic, FUN="paste", sep="") matrica.ishoda # b) Da li su svi ishodi jednako vjerovatni? Ocijeniti vjerovatnocu ishoda “5pismo”. vektor.ishoda<-as.vector(matrica.ishoda) # Pozicija ishoda pismo5 u vektoru ishoda pismo5<-which(vektor.ishoda=="5pismo") # Generisemo vektor od hiljadu elemenata iz skupa 1:12 na slucajan nacin simulacije<-sample(length(vektor.ishoda), 1000, replace = TRUE) # Ocjena vjerovatnoce na osnovu frekvencija mean(simulacije==pismo5) # Zadatak 3: IgraČ baca strelicu na tablu na kojoj se nalaze tri koncentrična # kruga poluprečnika 5, 10 i 15 cm. Najveći krug je upisan u kvadrat stranice 30 # cm. Smatra se da je svaki dio table ravnopravan. # a) Napisati funkciju strelica() koja simulira opisanu igru. (Funkcija treba da # vrati 1-ako je pogođen prvi krug, 2 za drugi i 3 za treći, -1 ako je strelica # van krugova) strelica<-function(){ # Postavljamo koordinatni pocetak u centar kruga i na slucajan nacin biramo x i # y koor- dinatu za pogodjenu tacku, (x,y) su iz [-15,15]x[-15,15] poz<-runif(2, -15, 15) # racunamo rastojanje tacke od centra r<-norm(poz, type="2") # ekvivalentno: sqrt(sum(poz^2)) if(r<=5) return(1) else if(r>5 & r<=10) return(2) else if(r>10 & r<=15) return(3) else return(-1) } # b) Ocijeniti vjerovatnocu da je da je pogodjen 1., odnosno 2. krug. # Koristimo funkciju replicate cijim pozivom # 1000 puta pozivamo funkciju strelica() i rezultate tih poziva smjestamo # u jedan vektor simulacije<-replicate(1000, strelica(), simplify = "array") # Napomena: Ako fji replicate proslijedimo argument simplify= F, vratice listu table(simulacije) frekvencije<-table(simulacije)/1000 frekvencije # Ako izracunamo vjerovatnoce teorijski, gledajuci kao gemetrijsku vjerovatnocu # po formuli: P(A)=m(A)/m(kvadrat) , dobicemo priblizno: # -1 1 2 3 # 0.21460 0.08727 0.26180 0.43633 # c) Igrači A i B naizmjenično bacaju po tri strelice na tablu. Na početku igre # imaju po 20 poena. Ako se pogodi prvi krug gubi se 1 poen, drugi 3, treci 5 i # van kruga 10 poena. Igru započinje igrač A, a završava se kada jedan od igrača # izgubi sve poene. Simulirati igru. Napisati funkciju pikado() koja vraća 1 ako # je pobijedio igrač A, odnosno 2 ako je pobijedio igrač B. # Pravimo pomocnu fju koja racuna koliko treba oduzeti poena igracu nakon jedne # partije. Prosledjujemo joj vektor sa oznakama pogodjenih polja poeni<-function(x){ # racunamo koliko je puta pogodjeno svako polje krug.1<-sum(x==1) krug.2<-sum(x==2) krug.3<-sum(x==3) kvadrat<-sum(x==-1) return(krug.1 + 3*krug.2 + 5*krug.3 +10*kvadrat) } # Hocemo da napisemo funckiju pikado() koja vraca 1 ako je pobijedio igrac A, a # 2 u suprotnom. pikado<-function(){ poeni.A<-20 poeni.B<-20 # Napomena: # Indikator da je igrac A na redu: U aritmeticki izrazima T ce imati vr 1, a F 0 A.na.potezu<-TRUE while(poeni.A*poeni.B>0){ # Oduzimamo poeni igracu koji je na potezu poeni.A<-poeni.A - A.na.potezu*poeni(replicate(3,strelica())) poeni.B<-poeni.B - (!A.na.potezu)*poeni(replicate(3,strelica())) # Mijenjamo igraca A.na.potezu<-!A.na.potezu } # Ko prvi izgubi poene izgubio je igru. ifelse(poeni.A<=0 ,return (2), return(1)) } # Ocijeniti vjerovatnocu da pobijedi igrac koji zapocinje igru, odnosno igrac A. # Sta se ocekuje? s<-replicate(1000,pikado()) mean(s==1) mean(s==2) # zadatak 4 # (a) Neka igrac ima pocetni kapital A i on baca kockicu. Ako dobije 1, 3 ili 5, # njegov kapital se uveca za 1 dinar, a u suprotnom izgubi 1 dinar. Za N # ponovljenih bacanja, nacrtati trajektoriju njegovog kapitala u zavisnosti od # trenutnog bacanja. (dozvoljeno je da igrac ide u minus) trajektorija<-function(A, N){ a<-numeric(N) s<-sample(6, N, replace = TRUE) a[1]<-A for(i in 1:N) ifelse(s[i]%%2==1, a[i+1]<- a[i]+1, a[i+1]<- a[i]-1) return(a) } # Crtamo trajektoriju za pocetni kapital 15 i broj bacanja 20 plot(trajektorija(5,20), type="o", col="blue") # 2. nacin: Hocemo da izbjegnemo petlju # Kumulativna suma vektora x=(x1,x2,...,xn) je vektor # x = (x1, x1+x2, x1+x2+x3, ... , x1+x2+x3+...+xn) trajektorija2<-function(A,N){ s<-sample(6, N, replace = T) i<-ifelse(s%%2==1, 1, -1) trajektorija<-cumsum(i)+A return(trajektorija) } plot(trajektorija2(5,20), type="o", col="red") # Primijetimo da je drugi nacin efikasniji system.time(trajektorija(1, 10000)) system.time(trajektorija2(1,10000)) # a.1) Ocijeniti vjerovatnocu da igrac zavrsi u plusu posle N partija plus<-function(A, N){ a<-trajektorija2(A, N) ifelse(a[N]>0, return(1), return(0)) } frekv.plusa<-function(A, N, broj.sim=1000){ simulacije<-replicate(broj.sim, plus(A, N)) f<-mean(simulacije) return(f) } frekv.plusa(5,20) frekv.plusa(5,100) frekv.plusa(100,1000) # ZADATAK ZA SAMOSTALAN RAD # Slijepa kornjaca se nalazi na 14.5 cm od vode i na slucajan nacin pravi korake # duzine 1cm ka vodi, odnosno od vode (krecuci se po pravoj liniji). Koraci su # medjusobno nezavisni, a vjerovatnoca da ce kornjaca napraviti korak ka vodi je # p, dok je vjerovatnoca da ce napraviti korak od vode 1-p ( 0