Criar uma função para verificar crescimento de uma população com estrutura etária utilizando uma matriz.
Argumentos definidos:
projmat=function(A,n0) { if (dim(A)[1]!=dim(A)[2] | dim(A)[2]!=dim(n0)[1]) { stop ("\n Matriz de projeção e vetor da população não possuem dimensões compatíveis \n") } resulta=matrix(n0,nrow=1) t <- 1 ## cria um contador para indexar os ciclos difprop <- 1 ## cria um valor de tolerância para a diferença no primeiro ciclo while(t<=1000 & difprop > 0.00001) ### limita os ciclos { nt <- matrix(resulta[t,],ncol=1) ntplus <- A %*% nt resulta <- rbind(resulta,t(ntplus)) Nt <- sum(resulta[t,]) Ntplus <- sum(resulta[t+1,]) difprop <- max(abs(resulta[t,]/Nt-resulta[t+1,]/Ntplus)) t <- t+1 } plot(1:nrow(resulta),resulta[,1],type="l",lwd=2,xlab="tempo",ylab="nº de indivíduos",ylim=(c(c(0,max(resulta)*1.02)))) for (i in 1:ncol(resulta)) { lines(1:nrow(resulta),resulta[,i],lwd=2,lty=i, col=i) } legend("topleft", legend=paste("classe",1:ncol(resulta)),lty=1:ncol(resulta),col=1:ncol(resulta)) diest1<- round(resulta[t,]/sum(resulta[t,]),3) cat("Distribuição de idades estável com base na projeção:\n",diest1,"\n") lambda<-sum(resulta[t,])/sum(resulta[t-1,]) cat("Lambda com base na projeção = " , round(lambda,3),"\n\n") auto<-eigen(A) lambda2<-max(abs(auto$values)) diest2<-(abs(auto$vectors[,1])/sum(abs(auto$vectors[,1]))) cat("Distribuição de idades estável com base na matrix:\n",round(diest2,3),"\n") cat("Lambda com base na matrix = " , round(lambda2,3),"\n\n") return(resulta) } #### Criando uma matrix ##A<-rbind(c( 0.5000 , 1.0 , 0.75 ),c( 0.6666 , 0 , 0 ),c( 0 , 0.3333 , 0 )) ##n0<- matrix(c(20,0,0),ncol=1) ###Analisando os dados pela função ##projmat(A,n0)