Les posteurs les plus actifs de la semaine
Aytan
dynamique des pop, boucle matrice et vecteur R Vote_lcapdynamique des pop, boucle matrice et vecteur R Voting_bardynamique des pop, boucle matrice et vecteur R Vote_rcap 
c@ssoulet
dynamique des pop, boucle matrice et vecteur R Vote_lcapdynamique des pop, boucle matrice et vecteur R Voting_bardynamique des pop, boucle matrice et vecteur R Vote_rcap 
Adddd
dynamique des pop, boucle matrice et vecteur R Vote_lcapdynamique des pop, boucle matrice et vecteur R Voting_bardynamique des pop, boucle matrice et vecteur R Vote_rcap 
Eric Wajnberg
dynamique des pop, boucle matrice et vecteur R Vote_lcapdynamique des pop, boucle matrice et vecteur R Voting_bardynamique des pop, boucle matrice et vecteur R Vote_rcap 
gg
dynamique des pop, boucle matrice et vecteur R Vote_lcapdynamique des pop, boucle matrice et vecteur R Voting_bardynamique des pop, boucle matrice et vecteur R Vote_rcap 


dynamique des pop, boucle matrice et vecteur R

Aller en bas

dynamique des pop, boucle matrice et vecteur R Empty dynamique des pop, boucle matrice et vecteur R

Message par Koudou le Mar 10 Déc 2013 - 13:47

Bonjour,

Étant novice en programmation j'ai quelques difficultés à coder sur R. Mon problème est le suivant :
Imaginons que j'ai une population d'une taille initiale de 2000 individus et que son taux de croissance est de 1.1. Je veux calculer les effectifs sur 100 générations et je fais donc la boucle suivante :

Pop <- 2000 ### effectif initial de la population
Gen <- 100 ### nombre de génération
for (n in 2:Gen) {
 Pop[n] <- Pop[n - 1] * 1.05
}
Popn

Maintenant je veux faire la même chose mais avec 5 classes d'âge et une matrice de transition. En gros j'ai mon vecteur avec mes effectifs initiaux:
v<- c(300,300,400,500,500) et une matrice de transition M déjà définie de taille 5 lignes, 5 colonnes. J'aimerais calculer les effectifs de chaque classe sur 100 générations par une boucle du même type que la suivante (calquée sur la 1ere), mais je n'y arrive pas.

v<- c(300,300,400,500,500) ### effectifs initiaux de chaque classe d'âge
Gen <- 100 ### nombre de génération
for (n in 2:Gen) {
 v[n] <- v[n - 1] %*% M
}
v[n]

Donc si quelqu'un a la solution ça serait super!
Merci!

Koudou

Nombre de messages : 2
Date d'inscription : 10/12/2013

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

dynamique des pop, boucle matrice et vecteur R Empty Re: dynamique des pop, boucle matrice et vecteur R

Message par droopy le Mer 11 Déc 2013 - 14:44

bonjour,
les solutions sont plus mathématiques que de la progra :
Code:
#1
Pop <- Pop*(1.05)^(0:99)

pop <- c(30,50,50)
M <- structure(c(0, 6, 10, 0.5, 0, 0, 0, 0.4, 0), .Dim = c(3L, 3L)) # la matrice de transition
# décomposition de cette matrice
eig <- eigen(M)
# matrice de passage
P <- eig$vectors
# matrice diagonale :
Md <- diag(eig$values)
# le calcul des effectifs :
cbind(pop,sapply(1:99, function(x) pop%*%P%*%Md^x%*%solve(P)))
Pour la deuxième il suffit de décomposer la matrice en une matrice de passage et en une matrice diagonale.
droopy
droopy

Nombre de messages : 1126
Date d'inscription : 04/09/2009

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

dynamique des pop, boucle matrice et vecteur R Empty Re: dynamique des pop, boucle matrice et vecteur R

Message par Koudou le Mer 11 Déc 2013 - 15:41

Comme quoi on peut souvent éviter les boucles...
C'est super, ça marche, merci! En revanche j'ai du mal à saisir le sens de la dernière ligne de code?


Koudou

Nombre de messages : 2
Date d'inscription : 10/12/2013

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

dynamique des pop, boucle matrice et vecteur R Empty Re: dynamique des pop, boucle matrice et vecteur R

Message par joyeux_lapin13 le Mer 11 Déc 2013 - 16:54

Koudou a écrit:Comme quoi on peut souvent éviter les boucles

D'autant plus que R déteste les boucles, d'où l'existence de la famille de fonctions apply.
joyeux_lapin13
joyeux_lapin13

Nombre de messages : 1925
Age : 35
Localisation : Mayotte
Date d'inscription : 21/04/2010

Voir le profil de l'utilisateur https://lemakistatheux.wordpress.com/

Revenir en haut Aller en bas

dynamique des pop, boucle matrice et vecteur R Empty Re: dynamique des pop, boucle matrice et vecteur R

Message par droopy le Mer 11 Déc 2013 - 22:16

joyeux_lapin13 a écrit:D'autant plus que R déteste les boucles, d'où l'existence de la famille de fonctions apply.
Je ne ne partage qu'à moitié cette affirmation. Parfois UNE boucle est plus rapide qu'un apply. Les apply font quand même appel à une boucle simple :
Code:
# extrait de apply
else for (i in 1L:d2) {
        tmp <- FUN(array(newX[, i], d.call, dn.call), ...)
        if (!is.null(tmp))
            ans[[i]] <- tmp
    }
La ou je te rejoins, c'est que R n'aime pas les boucles multiples.
droopy
droopy

Nombre de messages : 1126
Date d'inscription : 04/09/2009

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

dynamique des pop, boucle matrice et vecteur R Empty Re: dynamique des pop, boucle matrice et vecteur R

Message par joyeux_lapin13 le Jeu 12 Déc 2013 - 4:44

Tu as tout à fait raison Droopy, je voulais dire que R n'aime pas les boucles dans des boucles.
joyeux_lapin13
joyeux_lapin13

Nombre de messages : 1925
Age : 35
Localisation : Mayotte
Date d'inscription : 21/04/2010

Voir le profil de l'utilisateur https://lemakistatheux.wordpress.com/

Revenir en haut Aller en bas

dynamique des pop, boucle matrice et vecteur R Empty Re: dynamique des pop, boucle matrice et vecteur R

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum