Está en la página 1de 5

Ejercicios de Simulaci on

Investigaci on Operativa Ingenier a Inform atica, UC3M Curso 07/08


1. Escribe un c odigo (por ejemplo en Matlab, Fortran, C, . . . ) que genere m secuencias de n n umeros Bernoulli con probabilidad p. Usa este c odigo para escribir otro que genere una secuencia de m n umeros binomiales de par ametros n y p. Soluci on. C odigo Matlab para la distribuci on Bernoulli: function X = B(p,n,k) % X = B(p,n,k) % genera una muestra de tama\{n}o nxk % de una Bernoulli de par\{a}metro p if nargin==2, k = 1; end

% solamente una muestra

X = rand(n,k); I = find(X <= p); X = zeros(n,k); X(I) = ones(size(I)); Por denici on, una variable aleatoria X sigue una distribuci on Binomial de par ametros n y p, X B (n, p), si X es suma de n variables Bernoulli de par ametro p e independientes. Por tanto la funci on en Matlab que genera n umeros B (n, p) es function X = Bin(n,p,m) % X = Bin(n,p,m) % genera una muestra de tama\{n}o m de una Binomial % de parametros n y p Y = B(p,n,m); X = (sum(Y)); 1

2. Escribe un c odigo que genere una secuencia de n n umeros Poisson con par ametro . Una distribuci on de Poisson de par ametro se dene como X P () si P (X = k ) = e Soluci on. C odigo Matlab: function X = poisson(lambda,n) % Generacion de una muestra de tama\{n}o n de % una distribucion de Poisson de media lambda c = exp( - lambda); X = []; for i = 1:n, p = 1; N = 0; while (p >= c), unif = rand(1); p = p * unif; N = N + 1; end; X = [X ; N-1]; end; Otro c odigo utilizando comandos vectoriales de Matlab que aceleran la generaci on: function X = poisson(lambda,n) % Generacion de una muestra de tama\{n}o n de % una distribucion de Poisson de media lambda X = rand(n,1); i = 0; p = exp(-lambda); F = p; bool = (zeros(n,1)); while ((all(bool))), if (any((X<F) & (X>=(F - p)))) m = find((X<F) & (X>=(F - p))); X(m) = ones(length(m),1)*i; bool(m) = ones(length(m),1); end 2 k k! para k = 0, 1, . . .

p = lambda*p/(i + 1); F = F + p; i = i + 1; end 3. Escribe un c odigo que genere una secuencia de n n umeros con par ametros y . Una variable X se dene como de par ametros y , X G (, ), si f (x) = Soluci on. C odigo Matlab: function X = gamma(a,b,n) % X = gamma(a,b,n) % genera una muestra de tama\{n}o n de una gamma % de parametros a y b, con a entero positivo if a==1 X = expon(1/b,n,1);return; end U = rand(n,a); X = -(1/b)*log(prod(U)); X = X; 4. Escribe un c odigo que genere una secuencia de n n umeros Weibull con par ametros y . La variable X se dene Weibull de par ametros (, ), X W (, ), si f (x) = x
x ( 1) exp(( ) )

1 x1 ex ( 1)!

para x > 0.

para x > 0.

La generaci on de una muestra Weibull se realiza a trav es de una distribuci on de Valores Extremos. Esta distribuci on tiene la propiedad de que es invertible anal ticamente. Soluci on. C odigo Matlab: function X = weibull(alpha,beta,n) % X = weibull(alpha,beta,n) % genera una muestra de tama\{n}o n de una distribucion Weibull % de parametros (alpha,beta). La funcion de densidad es: % f(t;a,b) = (b/a)*(t/a)(b-1)*exp(-(t/a)b) % Generacion de los numeros aleatorios X = rand(n,1); 3

% Generacion de una Extreme Value Standard X = log(-log(X)); % Generacion de una Extreme Value de parametros (u,b) b = 1/beta; u = log(alpha); X = b*X + u; % Generacion de la Weibull X = exp(X); 5. Comprobar con simulaciones el Teorema Central del L mite: Si X1 , X2 , . . . , Xn es una muestra aleatoria simple de una distribuci on N (, 2 ), entonces 2 ). la distribuci on de X n es N (, n Soluci on. C odigo Matlab: sigma = 0.5; X = randn(100)*sigma; medias = mean(X); hist(medias)

% Normal(0,sigma2)

En este programa se generan 100 medias de una N (0, 0.52 ). A continuaci on se muestra el histograma de la muestra. Se puede comprobar como el histograma tiene la forma de campana de una densidad normal.
25

20

15

10

0 0.2

0.15

0.1

0.05

0.05

0.1

0.15

Figura 1: TCL 6. Se sabe que el tiempo medio entre fallos en un disco duro de un ordenador es de 3000 horas y que los fallos se distribuyen exponencialmente. Escribe un c odigo que genere estos sucesos de fallo hasta que ocurran 25 de ellos. Escribe el n umero de horas que transcurren entre los sucesivos fallos del experimento. Soluci on. 4

7. Escribe un c odigo que genere n umeros aleatorios con distribuci on (2, 2) (f (x) = 6x(1 x), 0 x 1) mediante el m etodo de aceptaci on-rechazo simple. Soluci on. c = m ax{f (x) = 6x(1 x) : 0 x 1} = 1.5. function b = beta22(n) c = 1.5; b = []; for i = 1:n, x = rand; while (c*rand > 6*x*(1-x)), x = rand; end; b = [b;x]; end; 8. Escribe un c odigo que genere n umeros aleatorios con distribuci on N (, 2 ) mediante el m etodo de aceptaci on-rechazo generalizado a partir de n umeros exponenciales. Soluci on. Nos basamos en la normal est andar. Hay que notar que el soporte de la normal no est a incluido dentro del soporte de la exponencial, por tanto, es conveniente tomar el valor absoluto de la distribuci on. Es decir, se puede usar la distribuci on exponencial para generar el valor absoluto de la normal y una distribuci on Bernoulli para determinar el signo. Para el valor absoluto de la normal est andar y para la exponencial de par ametro 1, se tiene a = f ( x) 2 supx0 { g(x) } = 2 .

También podría gustarte