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
Comments
0 B
|👍
/👎
0 B
|👍
/👎
0 B
|👍
/👎