In der Wahrscheinlichkeitstheorie ist die Normalverteilung (oder Gaußsche Verteilung) eine sehr häufige kontinuierliche Wahrscheinlichkeitsverteilung. Normalverteilungen sind in der Statistik wichtig und werden in den Natur- und Sozialwissenschaften häufig verwendet, um reelle Zufallsvariablen darzustellen, deren Verteilungen nicht bekannt sind.
Die Herausforderung
Ihre Herausforderung besteht darin, die Wahrscheinlichkeitsdichte der Gaußschen Verteilung auf einer dreidimensionalen Ebene darzustellen . Diese Funktion ist definiert als:
Wo:
A = 1, σ x = σ y = σ
Regeln
- Ihr Programm muss eine Eingabe σ , die Standardabweichung, annehmen .
- Ihr Programm muss ein 3D-Diagramm der Gaußschen Verteilung in der höchsten Qualität drucken, die Ihre Sprache / Ihr System zulässt.
- Ihr Programm verwendet möglicherweise keine direkte integrierte Gaußsche Verteilung oder Wahrscheinlichkeitsdichte.
- Ihr Programm muss nicht beendet werden.
- Ihr Plot kann in Schwarzweiß oder Farbe sein.
- Ihr Plot muss unten Gitterlinien haben. Gitterlinien an den Seiten (wie in den Beispielen gezeigt) sind nicht erforderlich.
- Ihr Plot muss keine Zeilennummern neben den Gitterlinien haben.
Wertung
Wie beim Code-Golf üblich , gewinnt die Einreichung mit den wenigsten Bytes! Ich kann niemals eine Antwort mit der Schaltfläche "akzeptieren", es sei denn, eine ist unglaublich klein und intuitiv.
Beispielausgabe
Ihre Ausgabe könnte ungefähr so aussehen:
Oder es könnte so aussehen:
Antworten:
Gnuplot 4,
6462616047 Bytes(Gebunden mit Mathematica ! WooHoo!)
Speichern Sie den obigen Code in einer Datei mit dem Namen
A.gp
und rufen Sie ihn wie folgt auf:gnuplot -e 'call "A.gp" $1'>GnuPlot3D.png
wo das
$1
durch den Wert von ersetzt werden sollσ
. Dadurch wird eine.png
DateiGnuPlot3D.png
mit dem Namen mit der gewünschten Ausgabe im aktuellen Arbeitsverzeichnis gespeichert .Beachten Sie, dass dies nur mit Distributionen von Gnuplot 4 funktioniert, da in Gnuplot 5 die
$n
Verweise auf Argumente veraltet waren und durch die leider ausführlicheren ersetzt wurdenARGn
.Beispielausgabe mit
σ = 3
:Diese Ausgabe ist laut OP in Ordnung .
Gnuplot 4, alternative Lösung, 60 Bytes
Hier ist eine alternative Lösung, die viel länger ist als die vorherige, aber die Ausgabe sieht meiner Meinung nach viel besser aus.
Dies erfordert Gnuplot 4 aus demselben Grund wie die vorherige Lösung.
Beispielausgabe mit
σ = 3
:quelle
I am not sure if it molds to the specifications required
Welche Spezifikationen erfüllen sie Ihrer Meinung nach nicht?Gnuplot
mit der die Wahrscheinlichkeitsdichte der Gaußschen Verteilung mit einem Sigma von2
ohne Umgebungsmodifikationen dargestellt wird.C ++,
34773344 BytesDie Byteanzahl enthält nicht die unnötigen Zeilenumbrüche.
MD XF spielte 133 Bytes ab.
C ++ kann auf keinen Fall damit konkurrieren, aber ich dachte, es würde Spaß machen, einen Software-Renderer für die Herausforderung zu schreiben. Ich riss einige GLM- Stücke heraus und spielte sie für die 3D-Mathematik und verwendete den Linienalgorithmus von Xiaolin Wu für die Rasterung. Das Programm gibt das Ergebnis in eine PGM-Datei mit dem Namen aus
g
.l
ist die Länge einer Seite des Gitters im Weltraum.c
ist die Anzahl der Eckpunkte entlang jeder Kante des Gitters.x
undz
(+ y geht nach oben) Weltraumkoordinaten des Scheitelpunkts und die Weltraumposition des Scheitelpunkts zurückgibt.w
ist die Breite des pgmh
ist die Höhe des pgmm
ist die Ansichts- / Projektionsmatrix. Die zum Erstellen verwendeten Argumentem
sind ...Der Renderer könnte leicht mehr Funktionen, eine bessere Leistung und ein besseres Golfspiel haben, aber ich hatte meinen Spaß!
quelle
Mathematica, 47 Bytes
nimmt als Eingabe σ
Eingang
Ausgabe
-2 Bytes dank LLlAMnYP
quelle
E^(-(x^2+y^2)/2/#^2)
R,
1051028786 BytesNimmt Sigma von STDIN. Erstellt einen Vektor aus ,
-6
um6
in Schritten von.1
sowohlx
undy
,erstellt dann eine121x121
Matrix , die durch das äußere Produkt der Einnahmex
undy
. Dies ist kürzer als das Aufrufenmatrix
und Festlegen der Dimensionen. Die Matrix ist jetzt bereits gefüllt, aber das ist in Ordnung, weil wir das überschreiben.Diefor
Schleife durchläuft die Werte inx
, wobei die vektorisierten Operationen in verwendetR
werden und die Dichtematrix zeilenweise erstellt wird.(s)apply
wieder ist eine kürzere Methode für vektorisierte Operationen. Wie der Held, der es ist, übernimmt er die Erstellung der Matrix ganz alleine und spart einige Bytes.128125110109 Bytes, aber viel ausgefallener:Dieses Diagramm wird vom
plotly
Paket erstellt. Leider ist die Spezifikation etwas wortreich, so dass dies viele Bytes kostet. Das Ergebnis ist wirklich sehr, sehr schick. Ich würde es wärmstens empfehlen, es selbst auszuprobieren.quelle
plotly
Handlung ist schick genug, um zu rechtfertigen, dass sie hier noch enthalten ist.s
einmal verwenden, können Sie2*scan()^2
dass=scan();
am Anfang tun und entfernen ? Es würde 3 Bytes sparen.Applesoft BASIC,
930783782727719702695637 Bytes-72 Bytes und ein funktionierendes Programm dank Ceilingcat, das meinen Fehler entdeckt, und eines verkürzten Algorithmus
Ungolfed Version hier.
Bei Eingabe
1
:Bei Eingabe
2
:quelle
EXP(X)/(2*3.14159*S1*S1)
mitEXP(X)*M