Não foi possível enviar o arquivo. Será algum problema com as permissões?
Diferenças
Aqui você vê as diferenças entre duas revisões dessa página.
Ambos lados da revisão anterior Revisão anterior | |||
disciplinas:ce718:atividades2011:pi [2011/06/20 22:08] fernandomayer [section 3] |
disciplinas:ce718:atividades2011:pi [2011/06/21 00:56] (atual) fernandomayer [section 4] |
||
---|---|---|---|
Linha 164: | Linha 164: | ||
==== Comparação dos algorítmos ==== | ==== Comparação dos algorítmos ==== | ||
+ | |||
+ | === Executando e armazenando tempos e resultados === | ||
+ | |||
+ | <code R> | ||
+ | ## Define um n comum | ||
+ | n1 <- 1:1e+4 | ||
+ | n2 <- seq(0, 1e+6, 1000)[-1] | ||
+ | |||
+ | ##---------------------------------------------------------------------- | ||
+ | ## Tempo Eder com n1 | ||
+ | res.eder.n1 <- matrix(NA, ncol=2, nrow=length(n1)) | ||
+ | con <- 1 | ||
+ | eder.n1 <- system.time( | ||
+ | for (i in n1){ | ||
+ | res.eder.n1[con,] <- buffon.eder(i) | ||
+ | con <- con+1 | ||
+ | } | ||
+ | ) | ||
+ | |||
+ | ## Tempo Walmes com n1 | ||
+ | walmes.n1 <- system.time( | ||
+ | bf <- buffon.walmes(max(n1)) | ||
+ | ) | ||
+ | res.walmes.n1 <- bf$rho/(cumsum(bf$R)/c(1:length(bf$R))) | ||
+ | |||
+ | |||
+ | ## Tempo Fernando com n1 | ||
+ | fernando.n1 <- system.time( | ||
+ | res.fernando.n1 <- buffon.fernando(n1) | ||
+ | ) | ||
+ | |||
+ | ## Tempo Stuart com n1 | ||
+ | stuart.n1 <- system.time( | ||
+ | res.stuart.n1 <- buffon.stuart(max(n1)) | ||
+ | ) | ||
+ | ##---------------------------------------------------------------------- | ||
+ | |||
+ | ## Tempo Eder com n2 | ||
+ | res.eder.n2 <- matrix(NA, ncol=2, nrow=length(n2)) | ||
+ | con <- 1 | ||
+ | eder.n2 <- system.time( | ||
+ | for (i in n2){ | ||
+ | res.eder.n2[con,] <- buffon.eder(i) | ||
+ | con <- con+1 | ||
+ | } | ||
+ | ) | ||
+ | |||
+ | ## Tempo Walmes com n2 | ||
+ | walmes.n2 <- system.time( | ||
+ | bf <- buffon.walmes(max(n2)) | ||
+ | ) | ||
+ | res.walmes.n2 <- bf$rho/(cumsum(bf$R)/c(1:length(bf$R))) | ||
+ | |||
+ | |||
+ | ## Tempo Fernando com n2 | ||
+ | fernando.n2 <- system.time( | ||
+ | res.fernando.n2 <- buffon.fernando(n2) | ||
+ | ) | ||
+ | |||
+ | ## Tempo Stuart com n2 | ||
+ | stuart.n2 <- system.time( | ||
+ | res.stuart.n2 <- buffon.stuart(max(n2)) | ||
+ | ) | ||
+ | #### Parei em 3261 seg. ~ 55 min. | ||
+ | </code> | ||
+ | |||
+ | === Comparando performances === | ||
+ | |||
+ | <code R> | ||
+ | ## Usando n1 = 1:1e4 | ||
+ | ##---------------------------------------------------------------------- | ||
+ | |||
+ | ## Comparacao de tempos de execucao | ||
+ | tempo.n1 <- c(eder.n1[3], walmes.n1[3], fernando.n1[3], stuart.n1[3]) | ||
+ | names(tempo.n1) <- c("eder", "walmes", "fernando", "stuart") | ||
+ | tempo.n1 <- sort(tempo.n1) | ||
+ | ## barchart | ||
+ | require(lattice) | ||
+ | barchart(tempo.n1, xlab = "Tempo (s)", | ||
+ | panel = function(...){ | ||
+ | panel.barchart(...) | ||
+ | panel.text(x = tempo.n1, y = 1:4, | ||
+ | labels = do.call(as.character, | ||
+ | list(round(tempo.n1, 2))), pos = 2) | ||
+ | }) | ||
+ | |||
+ | ## Cria um data.frame com todos os resultados | ||
+ | res.n1 <- data.frame(n = n1, | ||
+ | eder = res.eder.n1[,2], | ||
+ | walmes = res.walmes.n1, | ||
+ | fernando = res.fernando.n1$pi.est, | ||
+ | stuart = res.stuart.n1) | ||
+ | |||
+ | ## modifica o data.frame para o lattice | ||
+ | require(reshape) | ||
+ | res.n1 <- melt(res.n1, id = 1) | ||
+ | |||
+ | ## Comparacao grafica | ||
+ | xyplot(value ~ n | variable, data = res.n1, type = "l", as.table = TRUE, | ||
+ | xlab = "Número de jogadas da agulha", | ||
+ | ylab = expression(paste("Estimativa de ", pi)), | ||
+ | panel = function(...){ | ||
+ | panel.xyplot(...) | ||
+ | panel.abline(h = pi, lty = 2) | ||
+ | }, scales = list(relation = "free")) | ||
+ | |||
+ | ## Usando n2 = seq(0, 1e+6, 1000)[-1] | ||
+ | ##---------------------------------------------------------------------- | ||
+ | |||
+ | ## Comparacao de tempos de execucao | ||
+ | tempo.n2 <- c(eder.n2[3], walmes.n2[3], fernando.n2[3]) | ||
+ | names(tempo.n2) <- c("eder", "walmes", "fernando") | ||
+ | tempo.n2 <- sort(tempo.n2) | ||
+ | ## barchart | ||
+ | barchart(tempo.n2, xlab = "Tempo (s)", | ||
+ | panel = function(...){ | ||
+ | panel.barchart(...) | ||
+ | panel.text(x = tempo.n2, y = 1:4, | ||
+ | labels = do.call(as.character, | ||
+ | list(round(tempo.n2, 2))), pos = 2) | ||
+ | }) | ||
+ | |||
+ | ## Cria um data.frame com todos os resultados | ||
+ | ## Stuart nao entra pq nao terminou a execução | ||
+ | ## Walmes fica de fora pq vai ate 1e6 | ||
+ | res.n2 <- data.frame(n = n2, | ||
+ | eder = res.eder.n2[,2], | ||
+ | fernando = res.fernando.n2$pi.est) | ||
+ | |||
+ | ## modifica o data.frame para o lattice | ||
+ | res.n2 <- melt(res.n2, id = 1) | ||
+ | |||
+ | ## Comparacao grafica | ||
+ | xyplot(value ~ n | variable, data = res.n2, type = "l", as.table = TRUE, | ||
+ | xlab = "Número de jogadas da agulha", | ||
+ | ylab = expression(paste("Estimativa de ", pi)), | ||
+ | panel = function(...){ | ||
+ | panel.xyplot(...) | ||
+ | panel.abline(h = pi, lty = 2) | ||
+ | })#, scales = list(relation = "free")) | ||
+ | |||
+ | ## Plot separado do Walmes | ||
+ | xyplot(res.walmes.n2 ~ 1:max(n2), type = "l", | ||
+ | xlab = "Número de jogadas da agulha", | ||
+ | ylab = expression(paste("Estimativa de ", pi)), | ||
+ | panel = function(...){ | ||
+ | panel.xyplot(...) | ||
+ | panel.abline(h = pi, lty = 2) | ||
+ | }) | ||
+ | </code> | ||
+ | |||