Advertisement
Bressam

Passeio Aleatório - Probabilidade

Mar 26th, 2017
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Octave 1.90 KB | None | 0 0
  1. clear ; close all; clc   %% limpando variaveis
  2.  
  3.  
  4. n = input('Informe a quantidade de passos que a particula realizara: ');
  5. fprintf('\t*obs: Considere a posicao central como 0, e posicoes \n\t       a direita como positivas e a esquerda negativas\n')
  6. k = input('Informe a posicao final em que deseja saber a probabilidade da particula parar: ');
  7. x = input('Informe a quantidade de simulacoes: ');
  8.  
  9. probA = probPasseioAleatorio(n,k,x,1);
  10. probS = probPasseioAleatorio(n,k,x,0);
  11.  
  12. fprintf('\n\nResultados:\n');
  13. fprintf('\tNumero de passos: %d\n',n)
  14. fprintf('\tPosicao final desejada: %d\n',k)
  15. fprintf('\tNumero de Simulacoes: %d\n',x)
  16. fprintf('\tProbabilidade Analitica: %f\n', probA)
  17. fprintf('\tProbabilidade Simulada: %f\n', probS)
  18.  
  19. %%----------------------------------------------------%%
  20.  
  21. function prob = probPasseioAleatorio(n,k,x,tipo)
  22.    %% numero de passos (n), a posição final da trajetoria (k), e o numero de simulações (x), analitica ou simulada(tipo)
  23.  
  24.  if(tipo == 1)
  25.   %%-------- Calculo da probabilidade analitica ------------
  26.     auxC = (n+k)/2;
  27.     if(mod(n,2)==mod(k,2))  %%se ambos sao pares
  28.       pTeorica = nchoosek(n,auxC);
  29.       div = 2^n;
  30.       probA = pTeorica/div;   %%[C(n,(n+k)/2)]/2^n
  31.       prob = probA;
  32.     else
  33.       prob = 0  ;
  34.     endif
  35.    
  36.    
  37.    
  38.   else  
  39.   %%-------- Calculo da probabilidade Simulada ------------
  40.   acertos = 0;
  41.   for i=1:x   %%executa x vezes, i++  
  42.       posicaoParticula = 0;
  43.       passos = randi(0:1,1,n);   %%gera inteiros 0(esquerda) ou 1(direita) numa matriz 1xn
  44.       passosDireita = sum(passos);
  45.       passosEsquerda = passosDireita-n;  %%valor ja sera negativo, ou zero (porque sempre sera: passosDireita<=n)
  46.       posicaoFinal = passosDireita+passosEsquerda;
  47.       posicaoParticula = posicaoFinal;
  48.       if(posicaoParticula == k)
  49.         acertos++;
  50.       endif
  51.      endfor;
  52.      prob = acertos/x;
  53.      
  54.   endif
  55.  
  56.  
  57. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement