Está en la página 1de 2

Nombre: Alvaro Miguel Naupay Gusukuma.

Código: 19962179A.

Problema: Dé un algoritmo para generar una variable aleatoria con densidad

f (x) = 30(x2 − 2x3 + x4 ) , 0≤x≤1.

Analice la eficiencia de este método.


Solución: Utilizaremos la técnica del rechazo. Esta consiste en utilizar otra función de
densidad g(x) tal que fijado un valor c ∈ R se tenga que cg(x) supere a la función de densidad
f (x), es decir f (x) < cg(x) ∀ x ∈ Df y apartir de esto crear nuestra variable aleatoria.

f (x)
15
c=
8

Re
ch
ac
e
Acepte

Figure 1: Gráfica de la función f (x).

En nuestro problema, como Df = [0, 1], consideramos g como una función de densidad
uniforme en [0, 1], es decir
g(x) = 1 , 0 ≤ x ≤ 1 .
f (x)
Para determinar nuestra constante c tal que ≤ c utilizamos el cálculo para determinar el
g(x)
f (x)
máximo de = 30(x2 − 2x3 + x4 ) al derivar esta cantidad se obtiene
g(x)
 
∂ f (x)
= 30(2x − 6x2 + 4x3 )
∂x g(x)
1
al igualar esto a cero, se tiene que el valor máximo es alcanzado cuando x = y entonces
2
 2  3  4 !
f (x) 1 1 1 15
≤ 30 −2 + = =c
g(x) 2 2 2 8

por lo tanto
f (x)
= 16(x2 − 2x3 + x4 )
cg(x)

1
y ası́, nuestro algoritmo de rechazo es el siguiente:

Paso 1: Generar números aleatorios u e y.

Paso 2: Si, u ≤ 16(y 2 − 2y 3 + y 4 ), detenerse y hacer X = y. En caso contrario, regresar al paso 1.

La eficiencia de este algoritmo se encuentra en, que tantas variables serán rechazadas en el
paso 2, esto podemos aproximar con el valor de c, es decir, el número promedio de veces que
15
se realizará el paso 2 es c = ≈ 1.875. Lo cual es una buena eficiencia en el algoritmo.
8
Escrito este algoritmo en código MATLAB tenemos:

n=10^4; % número de variables aleatorias que se desea.


x=repmat(0,n,1); % v.a. que almacenará los valores aceptados.
i=1;
iteraciones =0; % contabiliza el número de iteraciones.
while i <= n
iteraciones = iteraciones +1;
y = unifrnd(0,1); % genera número aleatorio.
u = unifrnd(0,1); % genera número aleatorio.
% aquse da la condición de rechazo.
if u <= 16*(y^2-2*y^3+y^4)
x(i)=y;
i=i+1;
end
end
% gráfica de la distribución de la v.a. generada.
hist(x)
iteraciones % número de iteraciones hechas

Al ejecutar este programa tenemos el siguiente histograma de la v.a. generada

2000

1800

1600

1400

1200

1000

800

600

400

200

0
0 0.2 0.4 0.6 0.8 1

Figure 2: Distribución de la v.a. generada con 10000 valores, para generar esta v.a. se realizaron
18756 iteraciones.

También podría gustarte