Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement