simu_pop <- function(eq, t, ni, nj, ri, rj){ # criar funcao chamada simu_pop com os argumentos eq, t, ni, nj, ri e rj # conferindo parametros if(eq != "exponential" & eq != "logistic") # verificando se o argumento eq possui as entradas corretas { stop("Erro em argumento eq. So e possivel simular dinamicas exponenciais (exponential) e logisticas (logistic)") # se eq nao for um dos modelos propostos, parar e retonar erro } if(ni < 0 || nj < 0 || ni > 1 || nj > 1) # verificando se os valores de ni e nj estao entre 0 e 1 { stop("Erro em argumentos ni ou nj. Valores devem constar entre 0 e 1") # caso esteja errado, parar simulacao e retornar erro } if(ri < 1.1 || rj < 1.1 || ri > 3.95 || rj > 3.95) # verificando se os valores de r estao entre 1.1 e 3.95 { stop("Erro em argumentos ri ou rj. Valores devem constar entre 1.1 e 3.95") # caso esteja errado, parar simulacao e retornar erro } # parametros conferidos, iniciar simulacao data <- as.data.frame(matrix(0, ncol = 3, nrow = length(seq(1, t, 1)))) # criando matrix vazia de dados colnames(data)[1] <- ("tempo") # o nome da coluna 1 e data é tempo colnames(data)[2] <- ("ni") # o nome da coluna 2 de data é ni colnames(data)[3] <- ("nj") # o nome da coluna 3 de data é nj data[,1] <- seq(1, t, 1) # primeira coluna da matriz e o tempo de simulacao data[1,2] <- ni # primeira linha da coluna ni e a populacao inicial data[1,3] <- nj # primeira linha da coluna nj e a populacao inicial if(eq == "exponential") # condicao para escolher o tipo de modelo, caso o usuario escolha exponential { for(i in 2:t) # loop para calcular densidades populacionais no modelo exponencial { data[i,2] <- data[i-1,2] + (ri * data[i-1,2]) # a partir da segunda linha de data, calcular modelo exponencial de pop i ate t data[i,3] <- data[i-1,3] + (rj * data[i-1,2]) # a partir da segunda linha de data, calcular modelo exponencial de pop j ate t } # gerar grafico com dados simulados do modelo exponencial x11() # abrir janela grafica par(bg = "gray93", bty = "l", family = "serif") # definindo parametros graficos pop_graph <- plot(x = data$tempo, y = data$ny, ylim = c(0,1.5), type = "n", main = "Gráfico da Densidade populacional de i e j", xlab = "Tempo", ylab = "Dens. populacional") # plotar grafico de densidade populacional de ni e nj pelo tempo lines(x = data$tempo, y = data$ni, col = "red", lwd = 5) # adicionando linha com dados da populacao i lines(x = data$tempo, y = data$nj, col = "blue", lwd = 5) # adicionando linha com dados da populacao j legend(1, 1.5, legend = c("População i", "População j"), col = c("red", "blue"), lty=1:1, cex=0.7, text.font=2, bg='gray85') # adicionando legenda return(pop_graph) # retornar grafico final com tempo no eixo X e densidades pop. no eixo Y } else # caso contrario, ou seja, caso o modelo escolhido seja o logistico { for(i in 2:t) # loop para calcular densidades populacionais no modelo logistico { data[i,2] <- data[i-1,2] + ((ri * data[i-1,2]) * (1 - data[i-1,2])) # a partir da segunda linha de data, calcular modelo logistico de pop i ate t data[i,3] <- data[i-1,3] + ((rj * data[i-1,3]) * (1 - data[i-1,3])) # a partir da segunda linha de data, calcular modelo logistico de pop j ate t } # gerar grafico com dados simulados do modelo logistico x11() # abrir janela grafica par(bg = "gray93", bty = "l", family = "serif") # definindo parametros graficos pop_graph <- plot(x = data$tempo, y = data$ny, ylim = c(0,1.5), type = "n", main = "Gráfico da Densidade Populacional de i e j", xlab = "Tempo", ylab = "Dens. populacional") # plotar grafico de densidade populacional de ni pelo tempo lines(x = data$tempo, y = data$ni, col = "red", lwd = 5) # adicionando linha com dados da populacao i lines(x = data$tempo, y = data$nj, col = "blue", lwd = 5) # adicionando linha com dados da populacao j legend(1, 1.5, legend = c("População i", "População j"), col = c("red", "blue"), lty=1:1, cex=0.7, text.font=2, bg='gray85') # adicionando legenda return(pop_graph) # retornar grafico final com tempo no eixo X e densidades pop. no eixo Y } }