////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////// Gradient stochastique avec intéraction : Equation de Langevin avec intéraction champ moyen //// //////// Cas : V(x)=x^2/2 et alpha>0 Simulation de la mesure invariante par un échantiullonnage de Gibbs //// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// clf(); stacksize("max"); N=100; //Nombre de particules (N=2 => tracé de la densité de pi et histogramme 3d) sigma=1; //Coefficient de diffusion alpha=1; //taux d'interaction autour de la moyenne des particules beta=1; //force du gradient sur chaque particule epsilon=1; //Attraction +1 répulsion -1 T=100; //Horizon temporel n=10000; //Pas de temps du schéma d'Euler T/n // Echantillonneur de Gibbs de la mesure invariante m=zeros(N,N+1); s=zeros(N,N+1); X=zeros(1,N); Gibbs=[X]; //////////////////////////////////////////////////////////////////////////// ////// COMPLETER la ligne rouge : EVOLUTION DES N PARTICULES //// //////////////////////////////////////////////////////////////////////////// T_gibbs=N*1000; //Iteration de l'algo de Gibbs for t_gibbs=2:T_gibbs P=Gibbs(t_gibbs-1,:); for i=1:N for j=1:N m(i,j)= P(i)+sum(P(j)-P); s(i,j)=N*sigma/sqrt(2*alpha); end s(i,N+1)=sigma/(sqrt(2*beta)); s(i,i)=(N/(N-1))*(sigma/sqrt(2*alpha)); m(i,i)=(sum(P)-P(i))/(N-1); m(i,N+1)=0; v=sum((s(i,:)^{-2})); mm=sum(s(i,:)^{-2}.*m(i,:))/v; Gibbs(t_gibbs,i)= ; end end // Affichage de l'évolution de l'échantillonnage de Gibbs des deux premières // coordonnées. clf(0);xset("window",0);show_window(); subplot(121); plot2d(1:T_gibbs,Gibbs(:,1),5) subplot(122); plot2d(1:T_gibbs,Gibbs(:,2),5) clf(1);xset("window",1);show_window(); //Histogramme des valeurs subplot(121); histplot(linspace(min(Gibbs(:,1)),max(Gibbs(:,1)),20),Gibbs(:,1),style=2); subplot(122); histplot(linspace(min(Gibbs(:,2)),max(Gibbs(:,1)),20),Gibbs(:,1),style=2); if N==2 then function f=freq2d(echant,bornex,borney) kx=length(bornex)-1; ky=length(borney)-1; for i=1:kx, for j=1:ky, f(i,j)=length(find((echant(1,:)>bornex(i))&(echant(1,:)<=bornex(i+1))&(echant(2,:)>bornex(j))&(echant(2,:)<=bornex(j+1)))) end; end; f=f/sum(f); endfunction //Histogramme des états visités par l'échantillonneur de Gibbs clf(2);xset("window",2);show_window(); bx=[-1.5:.15:1.5]; by=bx; f=freq2d(Gibbs',bx,by); hist3d(list(f,bx,by), alpha=89.7, alpha=50); //Affichage de la densité de pi(x1,x2) (à constante près) dans le cas N=2 clf(3);xset("window",3);show_window(); x=linspace(-1.5,1.5,31); y=linspace(-1.5,1.5,31); z=(exp(-(((2*beta/sigma^2)+(alpha/4))*x^2))'* exp(-(((2*beta/sigma^2)+(alpha/4))*y^2))).*exp((alpha/sigma^2)*x'*y); plot3d(x,y,z,flag=[2 4 4], alpha=60, theta=50); end // Simulation du modèle de Langevin (simple puit en 0) à champ moyen (cas V(x)=x^2/2) //////////////////////////////////////////////////////////////////////////// ////// COMPLETER la ligne rouge : EVOLUTION DES N PARTICULES //// //////////////////////////////////////////////////////////////////////////// X=zeros(1,N); //Initialisation des processus et de sa moyenne empirique for t=1:n X=[X; ]; end //AFFICHAGE DES RESULTATS clf(4);xset("window",4);show_window(); for NN=1:N plot2d((T/n)*[0:n]',X(:,NN),NN) end //Histogramme des états visités par le processus en champ moyen clf(5);xset("window",5);show_window(); bx=[-1.5:.15:1.5]; by=bx; f=freq2d(X',bx,by); hist3d(list(f,bx,by), alpha=89.7, alpha=50);