set.seed(77)
N = 10

Pour chaque figure, je crée la matrice de représentation générale de la figure ainsi que la matrice de transition avec des probas uniformes. Pour creer les figures j’ai d’abord commencé par créer les premieres matrices (1 et 0) donc je les laisse meme si elles ne sont pas directement utile ici.

Matrice du graphe d’une ligne + matrice de transition

#Generer la matrice: figure ligne (IL S'AGIT JUSTE DE LA MATRICE GENERALE)
fonction1 = function() {
  matrice = matrix(data = 0, nrow = N, ncol = N)
  for(ligne in 1:N){
    for(colonne in ligne:N){
        
      if(ligne +1 == colonne){
        matrice[ligne,colonne] = 1;
        matrice[colonne,ligne] = matrice[ligne,colonne];  #Faire la symetrie
      }
    }
  }
  return(matrice)
}


#Generer la matrice de transition
fonction1_trans = function() {
  matrice_trans = matrix(data = 0, nrow = N, ncol = N)
  for(i in 2:N) {
    matrice_trans[i,i-1] = 1
    matrice_trans[i-1,i] = 1
  }
  matrice_trans = matrice_trans * (1/rowSums(matrice_trans))
    
  return(matrice_trans)
}

Matrice du graphe d’un anneau + matrice de transition

#Generer la matrice: figure anneau (IL S'AGIT JUSTE DE LA MATRICE GENERALE)
fonction2 = function() {
  matrice = matrix(data = 0, nrow = N, ncol = N)
  for(ligne in 1:N){

    colonne = ligne%%N+1

    matrice[ligne,colonne] = 1; 
    matrice[colonne,ligne] = matrice[ligne,colonne]; 

  }
  return(matrice)
}


#Generer la matrice de transition
fonction2_trans = function() {
  matrice_trans = matrix(data = 0, nrow = N, ncol = N)
  for(ligne in 1:N){

    colonne = ligne%%N+1

    matrice_trans[ligne,colonne] = 1; 
    matrice_trans[colonne,ligne] = matrice_trans[ligne,colonne]; 

  }
  matrice_trans = matrice_trans * (1/rowSums(matrice_trans))
  
  return(matrice_trans)
}

Matrice du graphe d’une sucette + matrice de transition

#Generer la matrice: figure sucette (IL S'AGIT JUSTE DE LA MATRICE GENERALE)
fonction3 = function() {
  matrice = matrix(data = 0, nrow = Ntotal, ncol = Ntotal)
  #Cercle
  for(ligne in 1:Nrond){

    colonne = ligne%%Nrond+1

    matrice[ligne,colonne] = 1;
    matrice[colonne,ligne] = matrice[ligne,colonne]; 

  }
  #Tige
  for(ligne in 1:Ntotal){
    for(colonne in (Ntotal-1):Ntotal){
      if(ligne +1 == colonne){
        matrice[ligne,colonne] = 1; 
        matrice[colonne,ligne] = matrice[ligne,colonne]; 
      }
    }
  }
    
  return(matrice)
}


#Generer la matrice de transition
fonction3_trans = function() {
  matrice_trans = matrix(data = 0, nrow = Ntotal, ncol = Ntotal)
  for(ligne in 1:Nrond){

    colonne = ligne%%Nrond+1

    matrice_trans[ligne,colonne] = 1;
    matrice_trans[colonne,ligne] = matrice_trans[ligne,colonne];

  }
  for(ligne in 1:Ntotal){
    for(colonne in ligne:Ntotal){
      if(ligne +1 == colonne){
        matrice_trans[ligne,colonne] = 1; 
        matrice_trans[colonne,ligne] = matrice_trans[ligne,colonne]; 
      }
    }
  }
  matrice_trans = matrice_trans * (1/rowSums(matrice_trans))
  
  return(matrice_trans)
}

Methode 1: MARCHE ALEATOIRE

#Algo marche aléatoire qui prend une matrice en entrée


marche_alea = function(matrice,nbIter) {

  tab_compteur = rep(0,N) #Notre tableau de compteur
  curr_state = sample(1:N,1) #On choisit l'etat initial aléatoirement
  tab_compteur[curr_state] = tab_compteur[curr_state] +1
  for (i in 1:nbIter) {
    curr_state = sample(1:N, size = 1, prob = matrice[curr_state,]) #On choisit le prochain noeud en fonction des probas de la ligne de la matrice
    tab_compteur[curr_state] = tab_compteur[curr_state] +1
  }
  return(tab_compteur/nbIter)
}

Test

On se base sur une marche aléatoire de 1 000 000 de pas.

N = 100

Nrond = 50 #Cercle de la sucette
Ntige = 50 #Tige de la sucette
Ntotal = Nrond + Ntige

matrice1 = fonction1_trans()
matrice2 = fonction2_trans()
matrice3 = fonction3_trans()
start_time = Sys.time()
test1 = marche_alea(matrice1,1000000)
end_time <- Sys.time()
time = end_time - start_time
time
## Time difference of 11.29449 secs
test1
##   [1] 0.005307 0.010490 0.010440 0.010580 0.010716 0.010862 0.010877
##   [8] 0.010877 0.010962 0.010927 0.010838 0.010682 0.010514 0.010411
##  [15] 0.010337 0.010496 0.010694 0.010715 0.010729 0.010708 0.010596
##  [22] 0.010569 0.010748 0.010800 0.010815 0.010825 0.010907 0.010873
##  [29] 0.010585 0.010359 0.010099 0.009939 0.009788 0.009624 0.009766
##  [36] 0.009804 0.009800 0.009990 0.010072 0.010063 0.010031 0.010029
##  [43] 0.010009 0.009865 0.009703 0.009784 0.009985 0.010159 0.010122
##  [50] 0.010000 0.009935 0.009912 0.010020 0.010055 0.010039 0.010169
##  [57] 0.010339 0.010332 0.010288 0.010350 0.010391 0.010309 0.010125
##  [64] 0.010067 0.010110 0.010201 0.010371 0.010367 0.010076 0.009854
##  [71] 0.009804 0.009705 0.009524 0.009364 0.009300 0.009371 0.009265
##  [78] 0.009142 0.009302 0.009532 0.009859 0.009989 0.009810 0.009558
##  [85] 0.009468 0.009610 0.009694 0.009571 0.009658 0.009851 0.009705
##  [92] 0.009536 0.009376 0.009360 0.009564 0.009765 0.009877 0.009730
##  [99] 0.009660 0.004870
plot(test1, type="o")

Pour la ligne, on voit bien que les 2 extremités sont beaucoup moins fréquentés. Les probabilités dans la matrice de transitions sont uniformes, il est donc logique que les extremités soit moins fréquentés car ils ont qu’un voisin.

start_time = Sys.time()
test2 = marche_alea(matrice2,1000000)
end_time <- Sys.time()
time = end_time - start_time
time
## Time difference of 10.75413 secs
test2
##   [1] 0.010447 0.010351 0.010127 0.009920 0.009708 0.009530 0.009367
##   [8] 0.009340 0.009562 0.009580 0.009551 0.009678 0.009601 0.009403
##  [15] 0.009241 0.009153 0.009175 0.009365 0.009519 0.009587 0.009611
##  [22] 0.009552 0.009580 0.009711 0.009795 0.009919 0.010114 0.010117
##  [29] 0.009735 0.009331 0.009044 0.008899 0.008864 0.008899 0.009048
##  [36] 0.009238 0.009349 0.009243 0.009151 0.009210 0.009322 0.009298
##  [43] 0.009207 0.009128 0.009002 0.009100 0.009188 0.009140 0.009221
##  [50] 0.009266 0.009145 0.009115 0.009106 0.009062 0.009167 0.009308
##  [57] 0.009354 0.009437 0.009678 0.009816 0.009808 0.009820 0.009978
##  [64] 0.010179 0.010267 0.010182 0.010061 0.010045 0.010130 0.010375
##  [71] 0.010657 0.010718 0.010544 0.010615 0.010821 0.010903 0.011019
##  [78] 0.010997 0.010912 0.010814 0.010739 0.010917 0.011189 0.011367
##  [85] 0.011541 0.011631 0.011624 0.011587 0.011603 0.011552 0.011386
##  [92] 0.011399 0.011528 0.011437 0.011361 0.011392 0.011242 0.010908
##  [99] 0.010611 0.010467
plot(test2, type="o")

Pour le cercle, il y a plus de noeud aussi peu fréquentés que pour la ligne car ils sont tous réliés. La tendance est un peu désordonné. La logique voudrait que les fréquences d’apparition soit uniformement tous égale (car toutes les probas sont de 0.5). Cependant, on peut observé un pic un peu plus haut que les autres ici. Il s’agit de la zone ou se trouve la premiere valeur choisie aléatoirement.

start_time = Sys.time()
test3 = marche_alea(matrice3,1000000)
end_time <- Sys.time()
time = end_time - start_time
time
## Time difference of 11.3015 secs
test3
##   [1] 0.009939 0.010119 0.010215 0.010320 0.010445 0.010695 0.010933
##   [8] 0.010771 0.010572 0.010443 0.010347 0.010381 0.010245 0.010014
##  [15] 0.009896 0.009751 0.009795 0.010042 0.010013 0.009838 0.009760
##  [22] 0.009830 0.009999 0.010038 0.010067 0.010011 0.009728 0.009542
##  [29] 0.009625 0.009771 0.009753 0.009594 0.009586 0.009758 0.009956
##  [36] 0.010315 0.010489 0.010461 0.010422 0.010320 0.010278 0.010315
##  [43] 0.010477 0.010437 0.010305 0.010119 0.010033 0.010220 0.010088
##  [50] 0.014865 0.010125 0.010137 0.010057 0.009852 0.009672 0.009835
##  [57] 0.009922 0.009925 0.009952 0.009755 0.009616 0.009582 0.009583
##  [64] 0.009617 0.009399 0.009323 0.009440 0.009417 0.009245 0.009295
##  [71] 0.009577 0.009827 0.009946 0.009892 0.009921 0.009962 0.009972
##  [78] 0.010125 0.010140 0.009890 0.009714 0.009713 0.009753 0.009991
##  [85] 0.010222 0.010229 0.010087 0.010019 0.010191 0.010180 0.010071
##  [92] 0.009965 0.009817 0.009804 0.010015 0.010234 0.010289 0.010358
##  [99] 0.010309 0.005103
plot(test3, type="o")

Pour la sucette, on retrouve un peu des principes expliqués plus haut. Le 100eme noeud est l’extrémité de la sucette et le pic correspondant au point entre le cercle et la tige (il s’agit d’un noeud avec 3 arretes)

Methode 2: ITERATION DE LA FONCTION DE TRANSITION A PARTIR D’UN VECTEUR DE PROBA

vectAlea = function(Nb) { #Vecteur arbitraire (ici, c'est un vecteur proba uniforme)
  return(rep(1/Nb,Nb))
}
traitement_vectAlea = function(matrice, nbIter, Nb) {
  
  vectAlea = vectAlea(Nb)
  for(i in 1:nbIter) {
    
    vectAlea = vectAlea %*% matrice
  }
  return(vectAlea)
}

Test

N = 100

Nrond = 50 #Cercle de la sucette
Ntige = 50 #Tige de la sucette
Ntotal = Nrond + Ntige

matrice1 = fonction1_trans()
matrice2 = fonction2_trans()
matrice3 = fonction3_trans()
test1 = traitement_vectAlea(matrice1, 1000, N)
start_time = Sys.time()
test1_2 = traitement_vectAlea(matrice1, 10000, N)
end_time <- Sys.time()
time = end_time - start_time
time
## Time difference of 0.4773171 secs
test1
##             [,1]       [,2]       [,3]       [,4]       [,5]       [,6]
## [1,] 0.005126125 0.01000376 0.01025175 0.01000389 0.01025024 0.01000416
##            [,7]       [,8]       [,9]      [,10]      [,11]      [,12]
## [1,] 0.01024775 0.01000457 0.01024431 0.01000512 0.01023996 0.01000584
##           [,13]      [,14]      [,15]      [,16]      [,17]      [,18]
## [1,] 0.01023474 0.01000672 0.01022872 0.01000778 0.01022197 0.01000904
##           [,19]      [,20]      [,21]      [,22]      [,23]      [,24]
## [1,] 0.01021456 0.01001052 0.01020656 0.01001223 0.01019807 0.01001419
##           [,25]      [,26]      [,27]      [,28]     [,29]      [,30]
## [1,] 0.01018918 0.01001644 0.01017996 0.01001898 0.0101705 0.01002185
##          [,31]      [,32]      [,33]      [,34]      [,35]      [,36]
## [1,] 0.0101609 0.01002506 0.01015124 0.01002863 0.01014158 0.01003259
##           [,37]      [,38]      [,39]      [,40]      [,41]      [,42]
## [1,] 0.01013202 0.01003696 0.01012261 0.01004174 0.01011341 0.01004697
##           [,43]      [,44]      [,45]      [,46]      [,47]      [,48]
## [1,] 0.01010449 0.01005263 0.01009588 0.01005875 0.01008763 0.01006532
##           [,49]      [,50]      [,51]      [,52]      [,53]      [,54]
## [1,] 0.01007977 0.01007233 0.01007233 0.01007977 0.01006532 0.01008763
##           [,55]      [,56]      [,57]      [,58]      [,59]      [,60]
## [1,] 0.01005875 0.01009588 0.01005263 0.01010449 0.01004697 0.01011341
##           [,61]      [,62]      [,63]      [,64]      [,65]      [,66]
## [1,] 0.01004174 0.01012261 0.01003696 0.01013202 0.01003259 0.01014158
##           [,67]      [,68]      [,69]     [,70]      [,71]     [,72]
## [1,] 0.01002863 0.01015124 0.01002506 0.0101609 0.01002185 0.0101705
##           [,73]      [,74]      [,75]      [,76]      [,77]      [,78]
## [1,] 0.01001898 0.01017996 0.01001644 0.01018918 0.01001419 0.01019807
##           [,79]      [,80]      [,81]      [,82]      [,83]      [,84]
## [1,] 0.01001223 0.01020656 0.01001052 0.01021456 0.01000904 0.01022197
##           [,85]      [,86]      [,87]      [,88]      [,89]      [,90]
## [1,] 0.01000778 0.01022872 0.01000672 0.01023474 0.01000584 0.01023996
##           [,91]      [,92]      [,93]      [,94]      [,95]      [,96]
## [1,] 0.01000512 0.01024431 0.01000457 0.01024775 0.01000416 0.01025024
##           [,97]      [,98]      [,99]      [,100]
## [1,] 0.01000389 0.01025175 0.01000376 0.005126125
test1_2
##             [,1]      [,2]       [,3]      [,4]       [,5]       [,6]
## [1,] 0.005051162 0.0100997 0.01010232 0.0100997 0.01010231 0.01009971
##           [,7]       [,8]       [,9]      [,10]      [,11]      [,12]
## [1,] 0.0101023 0.01009973 0.01010228 0.01009975 0.01010226 0.01009978
##           [,13]      [,14]     [,15]      [,16]      [,17]      [,18]
## [1,] 0.01010223 0.01009981 0.0101022 0.01009984 0.01010216 0.01009988
##           [,19]      [,20]      [,21]      [,22]      [,23]      [,24]
## [1,] 0.01010211 0.01009993 0.01010207 0.01009998 0.01010202 0.01010003
##           [,25]      [,26]     [,27]      [,28]      [,29]      [,30]
## [1,] 0.01010196 0.01010009 0.0101019 0.01010015 0.01010184 0.01010021
##           [,31]      [,32]     [,33]      [,34]      [,35]      [,36]
## [1,] 0.01010177 0.01010028 0.0101017 0.01010035 0.01010163 0.01010043
##           [,37]     [,38]      [,39]      [,40]     [,41]      [,42]
## [1,] 0.01010156 0.0101005 0.01010148 0.01010058 0.0101014 0.01010066
##           [,43]      [,44]      [,45]      [,46]      [,47]      [,48]
## [1,] 0.01010132 0.01010074 0.01010124 0.01010082 0.01010116 0.01010091
##           [,49]      [,50]      [,51]      [,52]      [,53]      [,54]
## [1,] 0.01010107 0.01010099 0.01010099 0.01010107 0.01010091 0.01010116
##           [,55]      [,56]      [,57]      [,58]      [,59]     [,60]
## [1,] 0.01010082 0.01010124 0.01010074 0.01010132 0.01010066 0.0101014
##           [,61]      [,62]     [,63]      [,64]      [,65]      [,66]
## [1,] 0.01010058 0.01010148 0.0101005 0.01010156 0.01010043 0.01010163
##           [,67]     [,68]      [,69]      [,70]      [,71]      [,72]
## [1,] 0.01010035 0.0101017 0.01010028 0.01010177 0.01010021 0.01010184
##           [,73]     [,74]      [,75]      [,76]      [,77]      [,78]
## [1,] 0.01010015 0.0101019 0.01010009 0.01010196 0.01010003 0.01010202
##           [,79]      [,80]      [,81]      [,82]      [,83]      [,84]
## [1,] 0.01009998 0.01010207 0.01009993 0.01010211 0.01009988 0.01010216
##           [,85]     [,86]      [,87]      [,88]      [,89]      [,90]
## [1,] 0.01009984 0.0101022 0.01009981 0.01010223 0.01009978 0.01010226
##           [,91]      [,92]      [,93]     [,94]      [,95]      [,96]
## [1,] 0.01009975 0.01010228 0.01009973 0.0101023 0.01009971 0.01010231
##          [,97]      [,98]     [,99]      [,100]
## [1,] 0.0100997 0.01010232 0.0100997 0.005051162
plot(test1, x= seq(1:N), type="o", xlab="1000 itérations")

plot(test1_2, x= seq(1:N), type="o", xlab="10000 itérations")

test2 = traitement_vectAlea(matrice2, 1000, N)
start_time = Sys.time()
test2_2 = traitement_vectAlea(matrice2, 10000, N)
end_time <- Sys.time()
time = end_time - start_time
time
## Time difference of 0.479316 secs
test2
##      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13]
## [1,] 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01  0.01  0.01  0.01  0.01
##      [,14] [,15] [,16] [,17] [,18] [,19] [,20] [,21] [,22] [,23] [,24]
## [1,]  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01
##      [,25] [,26] [,27] [,28] [,29] [,30] [,31] [,32] [,33] [,34] [,35]
## [1,]  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01
##      [,36] [,37] [,38] [,39] [,40] [,41] [,42] [,43] [,44] [,45] [,46]
## [1,]  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01
##      [,47] [,48] [,49] [,50] [,51] [,52] [,53] [,54] [,55] [,56] [,57]
## [1,]  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01
##      [,58] [,59] [,60] [,61] [,62] [,63] [,64] [,65] [,66] [,67] [,68]
## [1,]  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01
##      [,69] [,70] [,71] [,72] [,73] [,74] [,75] [,76] [,77] [,78] [,79]
## [1,]  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01
##      [,80] [,81] [,82] [,83] [,84] [,85] [,86] [,87] [,88] [,89] [,90]
## [1,]  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01
##      [,91] [,92] [,93] [,94] [,95] [,96] [,97] [,98] [,99] [,100]
## [1,]  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01   0.01
test2_2
##      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13]
## [1,] 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01  0.01  0.01  0.01  0.01
##      [,14] [,15] [,16] [,17] [,18] [,19] [,20] [,21] [,22] [,23] [,24]
## [1,]  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01
##      [,25] [,26] [,27] [,28] [,29] [,30] [,31] [,32] [,33] [,34] [,35]
## [1,]  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01
##      [,36] [,37] [,38] [,39] [,40] [,41] [,42] [,43] [,44] [,45] [,46]
## [1,]  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01
##      [,47] [,48] [,49] [,50] [,51] [,52] [,53] [,54] [,55] [,56] [,57]
## [1,]  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01
##      [,58] [,59] [,60] [,61] [,62] [,63] [,64] [,65] [,66] [,67] [,68]
## [1,]  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01
##      [,69] [,70] [,71] [,72] [,73] [,74] [,75] [,76] [,77] [,78] [,79]
## [1,]  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01
##      [,80] [,81] [,82] [,83] [,84] [,85] [,86] [,87] [,88] [,89] [,90]
## [1,]  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01
##      [,91] [,92] [,93] [,94] [,95] [,96] [,97] [,98] [,99] [,100]
## [1,]  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01   0.01
plot(test2, x= seq(1:N), type="o", xlab="1000 itérations")

plot(test2_2, x= seq(1:N), type="o", xlab="10000 itérations")

test3 = traitement_vectAlea(matrice3, 1000, Ntotal)
start_time = Sys.time()
test3_3 = traitement_vectAlea(matrice3, 10000, Ntotal)
end_time <- Sys.time()
time = end_time - start_time
time
## Time difference of 0.451298 secs
test3
##      [,1]        [,2] [,3]        [,4] [,5]        [,6] [,7]        [,8]
## [1,] 0.01 0.009926874 0.01 0.009921363 0.01 0.009916343 0.01 0.009911823
##      [,9]       [,10] [,11]       [,12] [,13]       [,14] [,15]
## [1,] 0.01 0.009907807  0.01 0.009904298  0.01 0.009901295  0.01
##            [,16] [,17]       [,18] [,19]       [,20] [,21]       [,22]
## [1,] 0.009898798  0.01 0.009896804  0.01 0.009895312  0.01 0.009894318
##      [,23]       [,24] [,25]       [,26] [,27]       [,28] [,29]
## [1,]  0.01 0.009893822  0.01 0.009893822  0.01 0.009894318  0.01
##            [,30] [,31]       [,32] [,33]       [,34] [,35]       [,36]
## [1,] 0.009895312  0.01 0.009896804  0.01 0.009898798  0.01 0.009901295
##      [,37]       [,38] [,39]       [,40] [,41]       [,42] [,43]
## [1,]  0.01 0.009904298  0.01 0.009907807  0.01 0.009911823  0.01
##            [,44] [,45]       [,46] [,47]       [,48] [,49]     [,50] [,51]
## [1,] 0.009916343  0.01 0.009921363  0.01 0.009926874  0.01 0.0148993  0.01
##            [,52] [,53]       [,54] [,55]       [,56] [,57]       [,58]
## [1,] 0.009945543  0.01 0.009958644  0.01 0.009972123  0.01 0.009985927
##      [,59]       [,60] [,61]      [,62] [,63]      [,64] [,65]      [,66]
## [1,]  0.01 0.009999999  0.01 0.01001427  0.01 0.01002867  0.01 0.01004312
##      [,67]      [,68] [,69]     [,70] [,71]      [,72] [,73]      [,74]
## [1,]  0.01 0.01005753  0.01 0.0100718  0.01 0.01008584  0.01 0.01009955
##      [,75]      [,76] [,77]      [,78] [,79]      [,80] [,81]      [,82]
## [1,]  0.01 0.01011281  0.01 0.01012552  0.01 0.01013757  0.01 0.01014886
##      [,83]      [,84] [,85]      [,86] [,87]      [,88] [,89]      [,90]
## [1,]  0.01 0.01015928  0.01 0.01016874  0.01 0.01017713  0.01 0.01018439
##      [,91]      [,92] [,93]      [,94] [,95]      [,96] [,97]      [,98]
## [1,]  0.01 0.01019043  0.01 0.01019519  0.01 0.01019863  0.01 0.01020071
##      [,99]      [,100]
## [1,]  0.01 0.005100702
test3_3
##      [,1]        [,2] [,3]        [,4] [,5]        [,6] [,7]        [,8]
## [1,] 0.01 0.009999901 0.01 0.009999892 0.01 0.009999884 0.01 0.009999876
##      [,9]       [,10] [,11]       [,12] [,13]       [,14] [,15]
## [1,] 0.01 0.009999869  0.01 0.009999863  0.01 0.009999858  0.01
##            [,16] [,17]      [,18] [,19]       [,20] [,21]       [,22]
## [1,] 0.009999854  0.01 0.00999985  0.01 0.009999847  0.01 0.009999845
##      [,23]       [,24] [,25]       [,26] [,27]       [,28] [,29]
## [1,]  0.01 0.009999845  0.01 0.009999845  0.01 0.009999845  0.01
##            [,30] [,31]      [,32] [,33]       [,34] [,35]       [,36]
## [1,] 0.009999847  0.01 0.00999985  0.01 0.009999854  0.01 0.009999858
##      [,37]       [,38] [,39]       [,40] [,41]       [,42] [,43]
## [1,]  0.01 0.009999863  0.01 0.009999869  0.01 0.009999876  0.01
##            [,44] [,45]       [,46] [,47]       [,48] [,49]      [,50]
## [1,] 0.009999884  0.01 0.009999892  0.01 0.009999901  0.01 0.01499987
##      [,51]      [,52] [,53]      [,54] [,55]      [,56] [,57]       [,58]
## [1,]  0.01 0.00999993  0.01 0.00999995  0.01 0.00999997  0.01 0.009999991
##      [,59]      [,60] [,61]      [,62] [,63]      [,64] [,65]      [,66]
## [1,]  0.01 0.01000001  0.01 0.01000003  0.01 0.01000005  0.01 0.01000007
##      [,67]      [,68] [,69]      [,70] [,71]      [,72] [,73]      [,74]
## [1,]  0.01 0.01000009  0.01 0.01000011  0.01 0.01000013  0.01 0.01000015
##      [,75]      [,76] [,77]      [,78] [,79]      [,80] [,81]      [,82]
## [1,]  0.01 0.01000016  0.01 0.01000018  0.01 0.01000019  0.01 0.01000021
##      [,83]      [,84] [,85]      [,86] [,87]      [,88] [,89]      [,90]
## [1,]  0.01 0.01000022  0.01 0.01000023  0.01 0.01000024  0.01 0.01000025
##      [,91]      [,92] [,93]      [,94] [,95]      [,96] [,97]      [,98]
## [1,]  0.01 0.01000026  0.01 0.01000026  0.01 0.01000027  0.01 0.01000027
##      [,99]      [,100]
## [1,]  0.01 0.005000135
plot(test3, x= seq(1:N), type="o", xlab="1000 itérations")

plot(test3_3, x= seq(1:N), type="o", xlab="10000 itérations")

Avec cette méthode, on remarque les meme comportements qu’avec la méthode 1 mais avec des résultats qui semble beaucoup plus précis. Pour la ligne, on retrouve la meme idée. Pour le cercle, on voit bien qu’idéalement, tous les noeuds ont une fréquence d’apparition uniforme. Pour la sucette, on retrouve la meme idée.

En plus du faite que ces méthodes fournissent des résutlats plus précis, on voit que le temps de calcul est beaucoup plus rapide. Pour obtenir des résultats de cette précision, il faut environ 2 min avec la premiere méthode alors qu’avec celle-ci, il faut beaucoup moins d’une seconde.

Methode 3: CALCUL VECTEUR PROPRE DE LA MATRICE

Pour cette méthode, j’utilise la fonction statdistr du package DTMCPack.

Source: cette fonction m’a été montré par mon camarade Vincent TURRIN.

traitement_valP = function(matrice) {
  
  B = DTMCPack::statdistr(matrice)
}

Test

N = 100

Nrond = 50 #Cercle de la sucette
Ntige = 50 #Tige de la sucette
Ntotal = Nrond + Ntige

matrice1 = fonction1_trans()
matrice2 = fonction2_trans()
matrice3 = fonction3_trans()
start_time = Sys.time()
test1 = traitement_valP(matrice1)
end_time <- Sys.time()
time = end_time - start_time
time
## Time difference of 0.01200795 secs
test1
##             [,1]       [,2]       [,3]       [,4]       [,5]       [,6]
## [1,] 0.005050505 0.01010101 0.01010101 0.01010101 0.01010101 0.01010101
##            [,7]       [,8]       [,9]      [,10]      [,11]      [,12]
## [1,] 0.01010101 0.01010101 0.01010101 0.01010101 0.01010101 0.01010101
##           [,13]      [,14]      [,15]      [,16]      [,17]      [,18]
## [1,] 0.01010101 0.01010101 0.01010101 0.01010101 0.01010101 0.01010101
##           [,19]      [,20]      [,21]      [,22]      [,23]      [,24]
## [1,] 0.01010101 0.01010101 0.01010101 0.01010101 0.01010101 0.01010101
##           [,25]      [,26]      [,27]      [,28]      [,29]      [,30]
## [1,] 0.01010101 0.01010101 0.01010101 0.01010101 0.01010101 0.01010101
##           [,31]      [,32]      [,33]      [,34]      [,35]      [,36]
## [1,] 0.01010101 0.01010101 0.01010101 0.01010101 0.01010101 0.01010101
##           [,37]      [,38]      [,39]      [,40]      [,41]      [,42]
## [1,] 0.01010101 0.01010101 0.01010101 0.01010101 0.01010101 0.01010101
##           [,43]      [,44]      [,45]      [,46]      [,47]      [,48]
## [1,] 0.01010101 0.01010101 0.01010101 0.01010101 0.01010101 0.01010101
##           [,49]      [,50]      [,51]      [,52]      [,53]      [,54]
## [1,] 0.01010101 0.01010101 0.01010101 0.01010101 0.01010101 0.01010101
##           [,55]      [,56]      [,57]      [,58]      [,59]      [,60]
## [1,] 0.01010101 0.01010101 0.01010101 0.01010101 0.01010101 0.01010101
##           [,61]      [,62]      [,63]      [,64]      [,65]      [,66]
## [1,] 0.01010101 0.01010101 0.01010101 0.01010101 0.01010101 0.01010101
##           [,67]      [,68]      [,69]      [,70]      [,71]      [,72]
## [1,] 0.01010101 0.01010101 0.01010101 0.01010101 0.01010101 0.01010101
##           [,73]      [,74]      [,75]      [,76]      [,77]      [,78]
## [1,] 0.01010101 0.01010101 0.01010101 0.01010101 0.01010101 0.01010101
##           [,79]      [,80]      [,81]      [,82]      [,83]      [,84]
## [1,] 0.01010101 0.01010101 0.01010101 0.01010101 0.01010101 0.01010101
##           [,85]      [,86]      [,87]      [,88]      [,89]      [,90]
## [1,] 0.01010101 0.01010101 0.01010101 0.01010101 0.01010101 0.01010101
##           [,91]      [,92]      [,93]      [,94]      [,95]      [,96]
## [1,] 0.01010101 0.01010101 0.01010101 0.01010101 0.01010101 0.01010101
##           [,97]      [,98]      [,99]      [,100]
## [1,] 0.01010101 0.01010101 0.01010101 0.005050505
plot(test1, x= seq(1:N), type="o")

start_time = Sys.time()
test2 = traitement_valP(matrice2)
end_time <- Sys.time()
time = end_time - start_time
time
## Time difference of 0.00400281 secs
test2
##      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13]
## [1,] 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01  0.01  0.01  0.01  0.01
##      [,14] [,15] [,16] [,17] [,18] [,19] [,20] [,21] [,22] [,23] [,24]
## [1,]  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01
##      [,25] [,26] [,27] [,28] [,29] [,30] [,31] [,32] [,33] [,34] [,35]
## [1,]  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01
##      [,36] [,37] [,38] [,39] [,40] [,41] [,42] [,43] [,44] [,45] [,46]
## [1,]  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01
##      [,47] [,48] [,49] [,50] [,51] [,52] [,53] [,54] [,55] [,56] [,57]
## [1,]  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01
##      [,58] [,59] [,60] [,61] [,62] [,63] [,64] [,65] [,66] [,67] [,68]
## [1,]  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01
##      [,69] [,70] [,71] [,72] [,73] [,74] [,75] [,76] [,77] [,78] [,79]
## [1,]  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01
##      [,80] [,81] [,82] [,83] [,84] [,85] [,86] [,87] [,88] [,89] [,90]
## [1,]  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01
##      [,91] [,92] [,93] [,94] [,95] [,96] [,97] [,98] [,99] [,100]
## [1,]  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01   0.01
plot(test2, x= seq(1:N), type="o")

start_time = Sys.time()
test3 = traitement_valP(matrice3)
end_time <- Sys.time()
time = end_time - start_time
time
## Time difference of 0.005003929 secs
test3
##      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13]
## [1,] 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01  0.01  0.01  0.01  0.01
##      [,14] [,15] [,16] [,17] [,18] [,19] [,20] [,21] [,22] [,23] [,24]
## [1,]  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01
##      [,25] [,26] [,27] [,28] [,29] [,30] [,31] [,32] [,33] [,34] [,35]
## [1,]  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01
##      [,36] [,37] [,38] [,39] [,40] [,41] [,42] [,43] [,44] [,45] [,46]
## [1,]  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01
##      [,47] [,48] [,49] [,50] [,51] [,52] [,53] [,54] [,55] [,56] [,57]
## [1,]  0.01  0.01  0.01 0.015  0.01  0.01  0.01  0.01  0.01  0.01  0.01
##      [,58] [,59] [,60] [,61] [,62] [,63] [,64] [,65] [,66] [,67] [,68]
## [1,]  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01
##      [,69] [,70] [,71] [,72] [,73] [,74] [,75] [,76] [,77] [,78] [,79]
## [1,]  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01
##      [,80] [,81] [,82] [,83] [,84] [,85] [,86] [,87] [,88] [,89] [,90]
## [1,]  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01
##      [,91] [,92] [,93] [,94] [,95] [,96] [,97] [,98] [,99] [,100]
## [1,]  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.01  0.005
plot(test3, x= seq(1:N), type="o")

Avec cette méthode, les graphiques sont propres et précis et le temps de calcul est vraiment beaucoup plus rapide. Cependant, j’ai pas un petit probleme sur le graphique pour le cercle. Je pense qu’il s’agit d’un probleme de précision sur l’axe des ordonnée que je n’arrive pas à résoudre (certainement quelque chose de tres bete comme une redefinition de l’axe)

—————————————————————————————–

On voit donc qu’au niveau des performances en terme de temps de calcul, si l’on veut obtenir des résultats (avec une précision à peu pres égale), la premiere méthode est beaucoup plus longue que les deux autres. Et si on compare les deux derniere, la troisieme reste vraiment plus rapide.

Diagramme du temps (pour la sucette)

start_time = Sys.time()
test3 = marche_alea(matrice3,20000000)
end_time <- Sys.time()
time1 = end_time - start_time


start_time = Sys.time()
test3 = traitement_vectAlea(matrice3, 1000, Ntotal)
end_time <- Sys.time()
time2 = end_time - start_time


start_time = Sys.time()
test3 = traitement_valP(matrice3)
end_time <- Sys.time()
time3 = end_time - start_time
time3
## Time difference of 0.005003929 secs
cc = c(time1,time2,time3)
plot(cc, type="l", col="red", xlab="temps de calcul méthode1,2,3")