Advertisement
luizaspan

[AULA CANZIAN] (pseudo)Random numbers (GAUSSIANA)

Nov 11th, 2015
361
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // canzian.fsc.ufsc.br
  2.  
  3. <script>
  4.  
  5. /*
  6. p(y)=Ay + B (B=0)
  7. int_0^1 p(y)dy -> descobre A
  8. integrando a integral (no caso int 2y dy = int dx (imposição))
  9. temos y = sqrt(x)
  10. */
  11.  
  12. // GERANDO NUMEROS ALEATORIOS E GUARDANDO E UM HISTOGRAMA:
  13.  
  14. // Math.random() devolve números float entre 0 e 1
  15.  
  16. // var x = Math.random();
  17. // document.write(Math.sqrt(x));
  18.  
  19. // algoritmo que necessita de dois números que obedecem uma distribuição uniforme e devolve dois que obedecem à distribuição gaussiana, mas guarda um pra próxima
  20.  
  21. var iset = 0
  22. var gset; // em C -> variáveis estáticas
  23.  
  24. function gaussRand() { // numerical recipes
  25.     var fac, r, v1, v2;
  26.     if (iset==0) {
  27.         do {
  28.             v1 = 2.9*Math.random()-1.0;
  29.             v2 = 2.0*Math.random()-1.0;
  30.             r = v1*v1+v2*v2;
  31.         } while (r>=1 || r==0.0);
  32.         fac=Math.sqrt(-2.0*Math.log(r)/r);
  33.         gset = v1*fac; // guarda um dos números (gaussiana)
  34.         iset = 1;
  35.         return v2*fac;
  36.     }
  37.     else {
  38.         iset = 0;
  39.         return gset; // retorna o número guardado
  40.     }
  41. }
  42.  
  43. var hst = new Array(200); // fazendo paple do float x[10]
  44.  
  45. for (var i=0; i<hst.length; i++) hst[i]=0; // construindo uma matriz com 10 elementos e enchendo de 0
  46.  
  47. var xmin= -20;
  48. var xmax = 20;
  49. var dx = (xmax-xmin)/hst.length;
  50.  
  51. var N = 10000;
  52. for (var i=0; i<N; i++) {
  53.     var x = gaussRand();
  54.     for (var j=0; j<hst.length; j++) {
  55.         if (x>=xmin+j*dx && x<xmin+(j+1)*dx) {
  56.             hst[j]++;
  57.         }
  58.     }
  59. }
  60.  
  61. for (var i=0; i<hst.length; i++) {
  62.     document.write(hst[i] + "<br>");
  63. }
  64.  
  65. // achando o máximo da distribuição:
  66. var hmax = -Infinity;
  67. for (var i=0; i<hst.length; i++) {
  68.     if (hst[i]>hmax) hmax = hst[i];
  69. }
  70.  
  71. // normalizando a distribuição (sendo o maior valor 100):
  72. for (var i=0; i<hst.length; i++) {
  73.     hst[i] = hst[i]/hmax * 100;
  74. }
  75.  
  76. document.write("<br>");
  77.  
  78. // graficando a distribuição:
  79. for (var i=0; i<hst.length; i++) {
  80.     for (var j=0; j<hst[i]; j++) {
  81.         document.write("o");
  82.     }
  83.     document.write("<br>");
  84. }
  85.  
  86. </script>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement