Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Ambos lados da revisão anteriorRevisão anterior
disciplinas:ce718:atividades2011:pi [2011/06/20 22:08] – [section 3] fernandomayerdisciplinas:ce718:atividades2011:pi [2011/06/21 00:56] (atual) – [section 4] fernandomayer
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>
 +
  

QR Code
QR Code disciplinas:ce718:atividades2011:pi (generated for current page)