clear ; close all; clc %% limpando variaveis n = input('Informe a quantidade de passos que a particula realizara: '); fprintf('\t*obs: Considere a posicao central como 0, e posicoes \n\t a direita como positivas e a esquerda negativas\n') k = input('Informe a posicao final em que deseja saber a probabilidade da particula parar: '); x = input('Informe a quantidade de simulacoes: '); probA = probPasseioAleatorio(n,k,x,1); probS = probPasseioAleatorio(n,k,x,0); fprintf('\n\nResultados:\n'); fprintf('\tNumero de passos: %d\n',n) fprintf('\tPosicao final desejada: %d\n',k) fprintf('\tNumero de Simulacoes: %d\n',x) fprintf('\tProbabilidade Analitica: %f\n', probA) fprintf('\tProbabilidade Simulada: %f\n', probS) %%----------------------------------------------------%% function prob = probPasseioAleatorio(n,k,x,tipo) %% numero de passos (n), a posição final da trajetoria (k), e o numero de simulações (x), analitica ou simulada(tipo) if(tipo == 1) %%-------- Calculo da probabilidade analitica ------------ auxC = (n+k)/2; if(mod(n,2)==mod(k,2)) %%se ambos sao pares pTeorica = nchoosek(n,auxC); div = 2^n; probA = pTeorica/div; %%[C(n,(n+k)/2)]/2^n prob = probA; else prob = 0 ; endif else %%-------- Calculo da probabilidade Simulada ------------ acertos = 0; for i=1:x %%executa x vezes, i++ posicaoParticula = 0; passos = randi(0:1,1,n); %%gera inteiros 0(esquerda) ou 1(direita) numa matriz 1xn passosDireita = sum(passos); passosEsquerda = passosDireita-n; %%valor ja sera negativo, ou zero (porque sempre sera: passosDireita<=n) posicaoFinal = passosDireita+passosEsquerda; posicaoParticula = posicaoFinal; if(posicaoParticula == k) acertos++; endif endfor; prob = acertos/x; endif end