Dans la théorie des probabilités, la distribution normale (ou gaussienne) est une distribution de probabilité continue très courante. Les distributions normales sont importantes en statistique et sont souvent utilisées en sciences naturelles et sociales pour représenter des variables aléatoires à valeur réelle dont les distributions ne sont pas connues.
Le défi
Votre défi consiste à tracer la densité de probabilité de la distribution gaussienne sur un plan tridimensionnel . Cette fonction est définie comme:
Où:
A = 1, σ x = σ y = σ
Règles
- Votre programme doit prendre une entrée σ , l'écart type.
- Votre programme doit imprimer un tracé 3D de la distribution gaussienne de la plus haute qualité possible selon votre langue / système.
- Votre programme peut ne pas utiliser une distribution gaussienne directe ou une densité de probabilité intégrée.
- Votre programme n'a pas à se terminer.
- Votre intrigue peut être en noir et blanc ou en couleur.
- Votre tracé doit avoir des lignes de grille en bas. Les lignes de quadrillage sur les côtés (comme indiqué dans les exemples) ne sont pas nécessaires.
- Votre tracé n'a pas besoin d'avoir des numéros de ligne à côté des lignes de la grille.
Notation
Comme d'habitude dans le code-golf , la soumission avec le moins d'octets gagne! Je ne pourrai jamais «accepter» une réponse à l'aide du bouton, à moins qu'elle ne soit incroyablement petite et intuitive.
Exemple de sortie
Votre sortie pourrait ressembler à ceci:
Ou cela pourrait ressembler à ceci:
Réponses:
Gnuplot 4,
6462616047 octets(Lié avec Mathematica ! WooHoo!)
Enregistrez le code ci-dessus dans un fichier nommé
A.gp
et appelez-le avec ce qui suit:gnuplot -e 'call "A.gp" $1'>GnuPlot3D.png
où le
$1
doit être remplacé par la valeur deσ
. Cela enregistrera un.png
fichier nomméGnuPlot3D.png
contenant la sortie souhaitée dans le répertoire de travail actuel.Notez que cela ne fonctionne qu'avec les distributions de Gnuplot 4 car dans Gnuplot 5 les
$n
références aux arguments ont été dépréciées et remplacées par les malheureusement plus verbeusesARGn
.Exemple de sortie avec
σ = 3
:Cette sortie est correcte selon OP .
Gnuplot 4, solution alternative, 60 octets
Voici une solution alternative qui est beaucoup plus longue que la précédente mais la sortie semble beaucoup mieux à mon avis.
Cela nécessite toujours Gnuplot 4 pour la même raison que la solution précédente.
Exemple de sortie avec
σ = 3
:la source
I am not sure if it molds to the specifications required
à quelles spécifications pensez-vous qu'il ne répond pas?Gnuplot
tracer la densité de probabilité de la distribution gaussienne avec un Sigma de2
sans aucune modification de l'environnement.C ++,
34773344 octetsLe nombre d'octets n'inclut pas les sauts de ligne inutiles.
MD XF a joué 133 octets.
Il n'y a aucun moyen que C ++ puisse rivaliser pour cela, mais j'ai pensé qu'il serait amusant d'écrire un logiciel de rendu pour le défi. J'ai arraché et joué à des morceaux de GLM pour les mathématiques 3D et j'ai utilisé l'algorithme de ligne de Xiaolin Wu pour la pixellisation. Le programme envoie le résultat dans un fichier PGM nommé
g
.l
est la longueur d'un côté de la grille dans l'espace mondial.c
est le nombre de sommets le long de chaque bord de la grille.x
etz
(et y augmente) et renvoie la position spatiale mondiale du sommet.w
est la largeur du pgmh
est la hauteur du pgmm
est la matrice de vue / projection. Les arguments utilisés pour créerm
sont ...Le moteur de rendu pourrait facilement avoir plus de fonctionnalités, de meilleures performances et être mieux joué, mais je me suis bien amusé!
la source
Mathematica, 47 octets
prend en entrée σ
Contribution
production
-2 octets grâce à LLlAMnYP
la source
E^(-(x^2+y^2)/2/#^2)
R,
1051028786 octetsPrend Sigma de STDIN. Crée un vecteur de
-6
à6
par étapes de.1
pour les deuxx
ety
,puis crée une121x121
matrice en prenant le produit externe dex
ety
. C'est plus court que d'appelermatrix
et de spécifier les dimensions. La matrice est maintenant déjà remplie, mais ce n'est pas grave, car nous l'écrasons.Lafor
boucle en boucle sur les valeurs dex
, en utilisant les opérations vectorisées dansR
, créant la matrice de densité une ligne à la fois.(s)apply
est encore une méthode plus courte pour les opérations vectorisées. Comme le héros qu'il est, il gère lui-même la création de la matrice, économisant pas mal d'octets.128125110109 octets, mais beaucoup plus sophistiqué:Ce tracé est créé par le
plotly
package. Malheureusement, la spécification est un peu verbeuse, donc cela coûte beaucoup d'octets. Mais le résultat est vraiment très chic. Je recommanderais fortement de l'essayer par vous-même.la source
plotly
intrigue est suffisamment sophistiquée pour mériter d'être incluse ici.s
qu'une seule fois, pourriez-vous faire2*scan()^2
et supprimer les=scan();
au début? Cela économiserait 3 octets.Applesoft BASIC,
930783782727719702695637 octets-72 octets et un programme de travail grâce à plafondcat repérant mon erreur et un algorithme raccourci
Version non golfée ici.
Lorsqu'une entrée est donnée
1
:Lorsqu'une entrée est donnée
2
:la source
EXP(X)/(2*3.14159*S1*S1)
parEXP(X)*M