En la teoría de la probabilidad, la distribución normal (o gaussiana) es una distribución de probabilidad continua muy común. Las distribuciones normales son importantes en estadística y a menudo se usan en las ciencias naturales y sociales para representar variables aleatorias de valor real cuyas distribuciones no se conocen.
El reto
Su desafío es trazar la densidad de probabilidad de la distribución gaussiana en un plano tridimensional . Esta función se define como:
Dónde:
A = 1, σ x = σ y = σ
Reglas
- Su programa debe tomar una entrada σ , la desviación estándar.
- Su programa debe imprimir un diagrama 3D de la distribución gaussiana en la más alta calidad según lo permita su idioma / sistema.
- Su programa no puede utilizar una distribución gaussiana directa o una densidad de probabilidad incorporada.
- Su programa no tiene que finalizar.
- Su trama puede ser en blanco y negro o color.
- Su parcela debe tener líneas de cuadrícula en la parte inferior. Las líneas de cuadrícula en los lados (como se muestra en los ejemplos) son innecesarias.
- Su diagrama no necesita tener números de línea al lado de las líneas de la cuadrícula.
Puntuación
Como es habitual en code-golf , ¡el envío con la menor cantidad de bytes gana! Puede que nunca "acepte" una respuesta usando el botón, a menos que sea increíblemente pequeño e intuitivo.
Salida de ejemplo
Su salida podría verse así:
O podría verse así:
Respuestas:
Gnuplot 4,
6462616047 bytes(Atado con Mathematica ! WooHoo!)
Guarde el código anterior en un archivo llamado
A.gp
e invoque con lo siguiente:gnuplot -e 'call "A.gp" $1'>GnuPlot3D.png
donde se
$1
va a reemplazar con el valor deσ
. Esto guardará un.png
archivo llamado queGnuPlot3D.png
contiene la salida deseada en el directorio de trabajo actual.Tenga en cuenta que esto solo funciona con distribuciones de Gnuplot 4, ya que en Gnuplot 5 las
$n
referencias a los argumentos fueron desaprobadas y reemplazadas por las más desafortunadamente más detalladasARGn
.Salida de muestra con
σ = 3
:Esta salida está bien según OP .
Gnuplot 4, solución alternativa, 60 bytes
Aquí hay una solución alternativa que es mucho más larga que la anterior, pero el resultado se ve mucho mejor en mi opinión.
Esto todavía requiere Gnuplot 4 por la misma razón que la solución anterior.
Salida de muestra con
σ = 3
:fuente
I am not sure if it molds to the specifications required
¿Qué especificaciones crees que no cumple?Gnuplot
graficar la densidad de probabilidad de la distribución gaussiana con un Sigma2
sin ninguna modificación del entorno.C ++,
34773344 bytesEl recuento de bytes no incluye las nuevas líneas innecesarias.
MD XF jugó 133 bytes.
No hay forma de que C ++ pueda competir por esto, pero pensé que sería divertido escribir un procesador de software para el desafío. Arranqué y jugué algunos fragmentos de GLM para las matemáticas 3D y utilicé el algoritmo de línea de Xiaolin Wu para la rasterización. El programa genera el resultado en un archivo PGM llamado
g
.l
es la longitud de un lado de la cuadrícula en el espacio mundial.c
es el número de vértices a lo largo de cada borde de la cuadrícula.x
yz
(+ y sube) del vértice, y devuelve la posición del espacio mundial del vértice.w
es el ancho de la pgmh
es la altura de la pgmm
es la vista / matriz de proyección. Los argumentos utilizados para crearm
son ...El procesador fácilmente podría tener más funciones, un mejor rendimiento y jugar mejor al golf, ¡pero me he divertido mucho!
fuente
Mathematica, 47 bytes
toma como entrada σ
Entrada
salida
-2 bytes gracias a LLlAMnYP
fuente
E^(-(x^2+y^2)/2/#^2)
R,
1051028786 bytesToma Sigma de STDIN. Crea un vector de
-6
a6
en pasos de.1
ambosx
yy
,luego crea una121x121
matriz tomando el producto externo dex
yy
. Esto es más corto que llamarmatrix
y especificar las dimensiones. La matriz ya está llena, pero está bien, porque estamos sobrescribiendo eso.Elfor
bucle-loop recorre los valores enx
, haciendo uso de las operaciones vectorizadas enR
, creando la matriz de densidad una fila a la vez.(s)apply
de nuevo es un método más corto para operaciones vectorizadas. Como el héroe que es, maneja la creación de la matriz por sí misma, ahorrando bastantes bytes.128125110109 bytes, pero mucho más elegante:Este diagrama es creado por el
plotly
paquete. Lamentablemente, la especificación es un poco prolija, por lo que cuesta muchos bytes. Sin embargo, el resultado es realmente muy elegante. Recomiendo probarlo usted mismo.fuente
plotly
trama es lo suficientemente elegante como para garantizar que todavía se incluya aquí.s
una vez, ¿podría hacer2*scan()^2
y quitar els=scan();
al principio? Ahorraría 3 bytes.Applesoft BASIC,
930783782727719702695637 bytes-72 bytes y un programa de trabajo gracias a ceilingcat que detecta mi error y un algoritmo acortado
Versión sin golf aquí.
Cuando se le da entrada
1
:Cuando se le da entrada
2
:fuente
EXP(X)/(2*3.14159*S1*S1)
conEXP(X)*M