[scilab-Users] Problem with Scilab

Calixte.Denizet at ac-rennes.fr Calixte.Denizet at ac-rennes.fr
Tue Mar 2 22:16:43 CET 2010


Hello Guillaume,

Works fine for me under windows vista and scilab 5.2.1. Maybe you should load your file with the menu "Load into Scilab Ctrl+L" in the text editor... ;)

Calixte

----- Message d'origine -----
De: Guillaume GRAMPEIX <grampeix at crans.org>
Date: Mardi, Mars 2, 2010 9:52 pm
Objet: [scilab-Users] Problem with Scilab
À: users at lists.scilab.org


> Hello,
> 
> I've been worked with Scilab since few days and this evening i got a 
> problem that i don't understant. Scilab says !--error 2, Invalid 
> factor. 
> Do you know why i have this message? I send to you my file.
> 
> Cordialy
> -- 
> Guillaume Grampeix
> French student form ENPC school.
> stacksize('max');
> clear all;
> //dt utile =>0.1 à 1,7
> //-----------------------
> //  POTENTIEL UTILISE
> //-----------------------
> 
> function a = V(x)
>   a = h*((x-1).^2).*(x+1).^2;
> endfunction
> 
> function a = nablaV(x)
>   a = 2*h*( (x-1).*(x+1).^2 + (x-1).^2*(x+1) );
> endfunction
> 
> //------------------------
> //  VARIABLES A DECLARER
> //------------------------
> h = 1;
> beta = 1;
> //------------------
> // INITIALISATIONS
> //-----------------
> moy_var_v=zeros();
> var_m=zeros();
> moy_var=zeros();
> var_val=zeros();
> u=0;                           //pour obtenir un vecteur des varleurs 
> de la variance
> dt_v=zeros();
> 
>    //boucle pour different dt
>  It1=0.1;
>  for dt= 0.1 :0.2 :It1
>   u=u+1;
>   dt_v(u)=dt;                  //pour obtenir un vecteur des valeurs 
> de dt
>                    
>     //boucle pour moyenne sur N représentatif
> It2 = 20;
> for t=1:It2
>   
>   N1=14; N=2^N1;  
>   x = zeros();
>   X = x;
>   x(1) = 1;
>   V_old = V(x(1));
>   V_new = V_old; 
>   E = zeros();
>   E(1) = V_new;
>  //----------------------------------------
> //  GENERATION DE L'ENSEMBLE STATISTIQUE
> //----------------------------------------
> rejet = 0;
> for i=2:N
> 
>   V_old = V(x(i-1));
> 
>    //--------------------
>   //   PROPOSITION    
>   //--------------------
>   bruit = rand(1,'normal');
>   x_propose = x(i-1) - nablaV(x(i-1))*dt + sqrt(2*dt/beta)*bruit;
>   X(i) = x_propose;
>   V_new = V(x_propose);
>   pxy = exp(-0.5*bruit^2);
>   Bruit = ( x(i-1) - x_propose + nablaV(x_propose)*dt )/sqrt(2*dt/beta);
>   pyx = exp(-0.5*Bruit^2);
>   //-----------------------
>   //   ACCEPTION / REJET
>   //------------------------
>   p = exp(-beta*(V_new - V_old))*pyx/pxy;
>   if (p >= 1)
>     x(i) = x_propose;
>   else 
>     if (rand(1,'uniform') < p)
>       x(i) = x_propose;
>     else
>       x(i) = x(i-1);
>       rejet = rejet + 1;
>     end
>   end
> 
>   // mise a jour des observables
>   E(i) = E(i-1) + V(x(i));
>  end
> 
> // convergence de l'énergie
> //energie = E' ./ (1:N);
> //figure (1)
> //plot(energie);
> //xtitle('Energie de la particule)
> 
> //----------------------------
> //    TAUX DE REJET
> //----------------------------
> 
> rejet = rejet/N;        // valeur instantanée du rejet
> rejet_v(t)=rejet;       // valeurs du rejet pour It2 itérations
> moy_rej=mean(rejet_v);  // moyenne du rejet sur It2 itérations
> //___________________________________________________
> //         block averaging
> //___________________________________________________
> 
> //---------------
> // Initialisation
> //---------------
> 
> //n = taille du bloc
> //m = nombre de block
> 
> energie_bloc=zeros(N,1);
> var=zeros(N,1);
> moy_var=0;
> m=2;
> p=0;
> vect_m = zeros(N,1);
> vect_n = zeros(N,1);
> 
> //----------------
> // boucle
> //----------------
> 
> while m <= N;
>     n=N/m;
>     p=p+1;
> sigma_carre = 0;    
> 
>     for k=1:m
>         energie_bloc(k)= mean(x((k-1)*n+1:k*n));
>     end
>     
>     sigma_carre =n/(m-1)*sum((energie_bloc(1:m)-mean(x)).^2);
>     
>     vect_m(p)=m;
>     vect_n(p)=n;
>     var(p)=sqrt(sigma_carre);  
>     
>   m=2*m;
> end
> moy_var=sum(var)/N1;              //moyenne intantanée de la variance 
> de l'énergie
> moy_var_v(t)=moy_var;             //moyenne de la variance de 
> l'énergie pour t itérations
> //var_m(1:N1,t)=var(1:N1);          //sauvegarde des valeurs de la 
> variance de l'érnergie
> var_moy=mean(moy_var_v);          //moyenne sur It2 itérarions de la 
> variance de l'energie pour une valeur de dt
> 
>   //-------------
>   // Courbes
>   //-------------
>   
> //Energie
> set("figure_style","new");
> f = get("current_figure");
> set("current_figure",1);
> xtitle('Variance en fonction de la taille des bloc','Log de la taille 
> des blocs','Variance de l''énergie')
> plot(log(vect_n(1:p)),var(1:p),'k-+');  
> 
> //Rejet
> set("figure_style","new");
> f = get("current_figure");
> set("current_figure",2);
> xtitle('Rejet en fonction des iterations','itération It2','Rejet')
> plot(rejet_v(1:t),'-+');
> end
> 
> //------------------------------
> //    Sauvegardes de valeurs
> //------------------------------
> 
> disp(var_moy,'Variance moyenne');
> disp(moy_rej,'Rejet moyen');
> disp(dt,'dt=');
> var_m1(1:It2,u)=moy_var_v(1:It2);      // valeur de la variance de 
> l'énergie suivant It2 et dt
> var_val(u)=var_moy;                    // valeur de la variance pour 
> différent dt
> moy_rej_v(u)=moy_rej;                  // valeur du rejet pour 
> différent dt
> 
> fprintfMat('C:\\mala\\var_m1.txt',var_m1);
> fprintfMat('C:\\mala\\var_moy.txt',var_val);
> fprintfMat('C:\\mala\\rejet.txt',moy_rej_v);
> end
> 
> //-----------------------------
> //      Courbes finales
> //-----------------------------
> 
> //set("figure_style","new");
> //f = get("current_figure");
> //set("current_figure",3);
> //subplot(1,2,1);
> //xtitle('Variance de l''énergie en fonction de dt','dt','Variance de 
> l''énergie')
> //plot(dt_v,var_val(1:u),'b-+');
> //subplot(1,2,2)
> //xtitle('Taux acceptation rejet en fonction de dt','dt','Rejet')//plot(dt_v,moy_rej_v(1:u),'r-+');



More information about the users mailing list