1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| %Le but de ce programme est de connaître le nombre de générations
%nécessaire pour qu'un allèle d'un gène diallélique se fixe ou disparaisse
%dans une population.
N=input('taille de la population d''allèle ');
A=input('proportion de l''allèle considérée ');
T=input('nombre de simulations ');
%Sauvegarde de la fréquence initiale de l'allèle A
Nsim=zeros(1,50*N);
%Création du vecteur qui compte le nombre de générations avant
%fixation/disparition de l'allèle
for k=1:T
Pa=zeros(1,50*N);
Pa(1)=A;
j=2;
%On réinitialise toutes les valeurs pour la nouvelle simulation
while (Pa(j-1)~=0)&&(Pa(j-1)~=1)
Na=0;
for i=1:N
if rand<Pa(j-1)
Na=Na+1;
end
end
Pa(j)=Na/N;
j=j+1;
%Petite différence avec précédemment : au lieu de se laisser
%dérouler la simulation jusqu'au nombre fixé de génération, on
%stoppe la boucle dès que l'allèle disparaît ou se fixe, d'où
%l'apparition d'un while et d'un espion
end
Nsim(j)=Nsim(j)+1;
end
plot(1:50*N,Nsim/T)
xlabel('Nombre de générations avant fixation')
ylabel('Fréquence du nombre de simulations')
title(['Fréquence de simulations se fixant à une génération donnée pour ' num2str(N/2) ' individus et pour un allèle ayant une fréquence initiale ' num2str(A)]) |
Partager