La sencilla y elegante forma de estimar la $e$ por Monte Carlo se describe en este documento. El papel es en realidad acerca de la enseñanza de $e$. Por lo tanto, el enfoque parece perfectamente adecuado para su objetivo. La idea se basa en un ejercicio de una popular ruso libro de texto sobre la teoría de la probabilidad por Gnedenko.
Ver ex.22 en la p.183
Sucede así que el $E[\xi]=e$ donde $\xi$ es una variable aleatoria que se define como sigue. Es el número mínimo de $n$ tal que $\sum_{i=1}^n r_i>1$ $r_i$ son números aleatorios de una distribución uniforme en $[0,1]$. Hermoso, ¿no?!
Ya que es un ejercicio, no estoy seguro de si es bueno para mí para publicar la solución (prueba) aquí :) Si quieres probar a sí mismo, he aquí un consejo: el capítulo se llama "Momentos", que debería apuntar en la dirección correcta.
Si desea aplicar a ti mismo, entonces no hay que leer más!
Este es un sencillo algoritmo para la simulación de Monte Carlo. Dibujar un aleatorio uniforme, luego otro y así sucesivamente hasta que la suma sea superior a 1. El número de randoms dibujado es su primer juicio. Digamos que tengo:
0.0180
0.4596
0.7920
Luego de su primer juicio prestados 3. Seguir haciendo estas pruebas, y te darás cuenta de que, en promedio, usted consigue $e$.
Código de MATLAB, resultados de simulación y el histograma de seguir.
N = 10000000;
n = N;
s = 0;
i = 0;
maxl = 0;
f = 0;
while n > 0
s = s + rand;
i = i + 1;
if s > 1
if i > maxl
f(i) = 1;
maxl = i;
else
f(i) = f(i) + 1;
end
i = 0;
s = 0;
n = n - 1;
end
end
disp ((1:maxl)*f'/sum(f))
bar(f/sum(f))
grid on
f/sum(f)
El resultado y el histograma:
2.7183
ans =
Columns 1 through 8
0 0.5000 0.3332 0.1250 0.0334 0.0070 0.0012 0.0002
Columns 9 through 11
0.0000 0.0000 0.0000
ACTUALIZACIÓN:
He actualizado mi código para deshacerse de la matriz de resultados de los ensayos para que no tome RAM. Yo también impreso el PMF estimación.
Actualización 2:
Aquí está mi solución Excel. Poner un botón en Excel y enlace a la siguiente macro de VBA:
Private Sub CommandButton1_Click()
n = Cells(1, 4).Value
Range("A:B").Value = ""
n = n
s = 0
i = 0
maxl = 0
Cells(1, 2).Value = "Frequency"
Cells(1, 1).Value = "n"
Cells(1, 3).Value = "# of trials"
Cells(2, 3).Value = "simulated e"
While n > 0
s = s + Rnd()
i = i + 1
If s > 1 Then
If i > maxl Then
Cells(i, 1).Value = i
Cells(i, 2).Value = 1
maxl = i
Else
Cells(i, 1).Value = i
Cells(i, 2).Value = Cells(i, 2).Value + 1
End If
i = 0
s = 0
n = n - 1
End If
Wend
s = 0
For i = 2 To maxl
s = s + Cells(i, 1) * Cells(i, 2)
Next
Cells(2, 4).Value = s / Cells(1, 4).Value
Rem bar (f / Sum(f))
Rem grid on
Rem f/sum(f)
End Sub
Introduzca el número de ensayos, tales como 1000, en la celda D1, y haga clic en el botón.
He aquí cómo la pantalla se verá como después de la primera carrera:
ACTUALIZACIÓN 3:
El pececillo de plata inspirado a mí de otra manera, no tan elegante como el primero pero todavía fresco. Se calculan los volúmenes de n-simplexes utilizando Sobol secuencias.
s = 2;
for i=2:10
p=sobolset(i);
N = 10000;
X=net(p,N)';
s = s + (sum(sum(X)<1)/N);
end
disp(s)
2.712800000000001
Casualmente él escribió el primer libro sobre el método de Monte Carlo me vuelva a leer en la escuela secundaria. Es la mejor introducción al método, en mi opinión.
ACTUALIZACIÓN 4:
El pececillo de plata en los comentarios sugirieron una simple fórmula de Excel implementación. Este es el tipo de resultado que se obtiene con su estrategia después de que sobre el total de 1 millón de números aleatorios y 185K ensayos:
Obviamente, esto es mucho más lento que el VBA de Excel implementación. Especialmente, si usted modificar mi código de VBA para no actualizar los valores de las celdas dentro del bucle, y sólo lo hacen una vez que todas las estadísticas son recogidos.