Qué hace este generador
Esta herramienta produce una lista de números pseudoaleatorios que siguen una distribución log-normal. Una variable aleatoria X es log-normal cuando su logaritmo natural, \(\ln(X)\), sigue una distribución normal. El generador empieza creando variables normales estándar con la clásica transformación de Box-Muller, las escala hacia la normal objetivo \(N(\mu, \sigma^2)\) y, finalmente, aplica la exponencial para obtener valores log-normales estrictamente positivos.
Importante: qué significan mu y sigma
Los parámetros \(\mu\) y \(\sigma\) describen la distribución normal subyacente de \(\ln(X)\); no son la media ni la desviación estándar de la propia X. La media real de X es \(\exp(\mu + \sigma^2/2)\), la mediana es \(\exp(\mu)\) y la varianza es \((\exp(\sigma^2) - 1)\cdot\exp(2\mu + \sigma^2)\). Estos valores de referencia aparecen junto a tu muestra para que puedas comprobar de un vistazo que el resultado tiene sentido.
$$\begin{aligned} \text{Mean} &= \exp\!\left(\mu + \tfrac{1}{2}\sigma^{2}\right) \\ \text{Median} &= \exp\!\left(\mu\right) \\ \text{Var} &= \left(e^{\sigma^{2}} - 1\right) e^{\,2\mu + \sigma^{2}} \end{aligned}$$Cómo usarlo
Introduce \(\mu\) (cualquier número real), \(\sigma\) (cero o positivo) y cuántos números quieres obtener (de 1 a 1000). Elige cuántas cifras significativas mostrar. Cada ejecución extrae nuevos números aleatorios uniformes, así que los valores cambian cada vez. Como el método de Box-Muller genera dos variables normales por cada par de uniformes, si pides una cantidad impar simplemente se descarta una variable sobrante.
La fórmula, paso a paso
Para uniformes \(U_1, U_2\) en \((0,1]\):
$$X = \exp\!\left(\mu + \sigma\, Z\right), \quad Z = \sqrt{-2\ln U_1}\,\cos(2\pi U_2)$$\(Z = \sqrt{-2\cdot\ln U_1}\cdot\cos(2\pi\cdot U_2)\) da \(Z \sim N(0,1)\). Después, \(Y = \mu + \sigma\cdot Z\) es \(N(\mu, \sigma^2)\), y \(X = \exp(Y)\) es log-normal. Para evitar \(\ln(0)\), acotamos \(U_1\) con un epsilon mínimo.
Ejemplo resuelto
Con \(\mu = 1\), \(\sigma = 2\), tomamos \(U_1 = 0.5\), \(U_2 = 0.25\). Entonces \(R = \sqrt{-2\cdot\ln 0.5} = 1.17741\). \(Z_1 = R\cdot\cos(\pi/2) = 0\) y \(Z_2 = R\cdot\sin(\pi/2) = 1.17741\). Así, \(X_1 = \exp(1) = 2.71828\) y \(X_2 = \exp(1 + 2\cdot 1.17741) = \exp(3.35482) \approx 28.64\). La media teórica \(\exp(3) = 20.0855\) y la mediana \(\exp(1) = 2.71828\) son coherentes.
Preguntas frecuentes
¿Por qué obtengo valores distintos en cada ejecución? Es un generador estocástico que usa Math.random(); sin una semilla fija, cada ejecución da resultados diferentes.
¿Qué pasa si sigma = 0? La distribución es degenerada y todos los valores son iguales a \(\exp(\mu)\).
¿Puede salir un valor negativo? No: el soporte de la log-normal es \((0, \infty)\), de modo que todos los resultados son estrictamente positivos.