Na teoria da probabilidade, a distribuição normal (ou gaussiana) é uma distribuição de probabilidade contínua muito comum. Distribuições normais são importantes em estatística e são frequentemente usadas nas ciências naturais e sociais para representar variáveis aleatórias com valor real cujas distribuições não são conhecidas.
O desafio
Seu desafio é traçar a densidade de probabilidade da distribuição gaussiana em um plano tridimensional . Esta função é definida como:
Onde:
A = 1, σ x = σ y = σ
Regras
- Seu programa deve receber uma entrada σ , o desvio padrão.
- Seu programa deve imprimir um gráfico 3D da Distribuição Gaussiana da mais alta qualidade, conforme o seu idioma / sistema permitir.
- Seu programa não pode usar uma Distribuição Gaussiana direta ou densidade de probabilidade integrada.
- Seu programa não precisa terminar.
- Sua plotagem pode ser em preto e branco ou colorida.
- Seu gráfico deve ter linhas de grade na parte inferior. Linhas de grade nas laterais (conforme mostrado nos exemplos) são desnecessárias.
- Seu gráfico não precisa ter números de linha próximos às linhas de grade.
Pontuação
Como de costume no code-golf , a submissão com o mínimo de bytes vence! Talvez eu nunca "aceite" uma resposta usando o botão, a menos que seja incrivelmente pequeno e intuitivo.
Saída de exemplo
Sua saída pode ser algo como isto:
Ou poderia ficar assim:
Respostas:
Gnuplot 4,
6462616047 bytes(Amarrado com o Mathematica ! WooHoo!)
Salve o código acima em um arquivo chamado
A.gp
e chame-o com o seguinte:gnuplot -e 'call "A.gp" $1'>GnuPlot3D.png
onde o
$1
deve ser substituído pelo valor deσ
. Isso salvará um.png
arquivo chamadoGnuPlot3D.png
contendo a saída desejada no diretório de trabalho atual.Observe que isso só funciona com distribuições do Gnuplot 4, já que no Gnuplot 5 as
$n
referências aos argumentos foram preteridas e substituídas pelas infelizmente mais detalhadasARGn
.Exemplo de saída com
σ = 3
:Esta saída é boa de acordo com OP .
Gnuplot 4, solução alternativa, 60 bytes
Aqui está uma solução alternativa que é muito mais longa que a anterior, mas a saída parece muito melhor na minha opinião.
Isso ainda requer o Gnuplot 4 pelo mesmo motivo da solução anterior.
Exemplo de saída com
σ = 3
:fonte
I am not sure if it molds to the specifications required
que especificações você acha que não atende?Gnuplot
que plotaria a densidade de probabilidade da distribuição Gaussiana com um Sigma2
sem nenhuma modificação no ambiente.C ++,
34773344 bytesA contagem de bytes não inclui as novas linhas desnecessárias.
O MD XF jogou 133 bytes.
Não há como o C ++ competir por isso, mas achei que seria divertido escrever um renderizador de software para o desafio. Rasguei e joguei alguns pedaços de GLM para a matemática 3D e usei o algoritmo de linha de Xiaolin Wu para rasterização. O programa gera o resultado em um arquivo PGM chamado
g
.l
é o comprimento de um lado da grade no espaço do mundo.c
é o número de vértices ao longo de cada extremidade da grade.x
ez
(+ y sobe) coordenadas do espaço mundial do vértice e retorna a posição do espaço mundial do vértice.w
é a largura do pgmh
é a altura do pgmm
é a matriz de visão / projeção. Os argumentos usados para criarm
são ...O renderizador poderia facilmente ter mais recursos, melhor desempenho e jogar melhor, mas eu me diverti!
fonte
Mathematica, 47 bytes
toma como entrada σ
Entrada
resultado
-2 bytes graças a LLlAMnYP
fonte
E^(-(x^2+y^2)/2/#^2)
R,
1051028786 bytesToma Sigma de STDIN. Cria um vetor de
-6
para6
em etapas de.1
para ambosx
ey
, emseguida,cria uma121x121
matriz utilizando o produto externo dex
ey
. Isso é mais curto do que chamarmatrix
e especificar as dimensões. A matriz já está preenchida, mas tudo bem, porque estamos substituindo isso.Ofor
loop-loops sobre os valores emx
, fazendo uso das operações vetorizadas emR
, criando a matriz de densidade uma linha por vez.(s)apply
novamente é um método mais curto para operações vetorizadas. Como o herói, ele lida com a criação da matriz por si só, economizando alguns bytes.128125110109 bytes, mas muito mais chique:Esse gráfico é criado pelo
plotly
pacote. Infelizmente, a especificação é um pouco prolixo, então isso custa muitos bytes. O resultado é realmente muito chique. Eu recomendo experimentar por si mesmo.fonte
plotly
enredo é chique o suficiente para garantir que ainda está sendo incluído aqui.s
uma vez, você poderia fazer2*scan()^2
e remover os=scan();
no início? Isso economizaria 3 bytes.Applesoft BASIC,
930783782727719702695637 bytes-72 bytes e um programa de trabalho graças ao tetocat detectando meu erro e um algoritmo reduzido
Versão não destruída aqui.
Quando é dada entrada
1
:Quando é dada entrada
2
:fonte
EXP(X)/(2*3.14159*S1*S1)
comEXP(X)*M