В теории вероятностей нормальное (или гауссово) распределение является очень распространенным непрерывным распределением вероятности. Нормальные распределения важны в статистике и часто используются в естественных и социальных науках для представления вещественных случайных величин, распределение которых неизвестно.
Соревнование
Ваша задача - построить плотность вероятности распределения Гаусса на трехмерной плоскости . Эта функция определяется как:
Куда:
A = 1, σ x = σ y = σ
правила
- Ваша программа должна принимать один вход σ , стандартное отклонение.
- Ваша программа должна распечатать трехмерный график распределения Гаусса в максимально высоком качестве, насколько позволяет ваш язык / система.
- Ваша программа не может использовать встроенное прямое распределение Гаусса или плотность вероятности.
- Ваша программа не должна прекращаться.
- Ваш сюжет может быть черно-белым или цветным.
- Ваш график должен иметь линии сетки внизу. Линии сетки по бокам (как показано в примерах) не нужны.
- Ваш график не должен иметь номера строк рядом с линиями сетки.
счет
Как обычно в code-golf , выигрывает представление с наименьшим количеством байтов! Я, возможно, никогда не «приму» ответ с помощью кнопки, если только он невероятно мал и интуитивен.
Пример вывода
Ваш вывод может выглядеть примерно так:
Или это может выглядеть так:
Ответы:
Гнуплот 4,
6462616047 байт(Связано с Mathematica ! WooHoo!)
Сохраните приведенный выше код в файл с именем
A.gp
и вызовите его со следующим:gnuplot -e 'call "A.gp" $1'>GnuPlot3D.png
где
$1
должен быть заменен значениемσ
. Это сохранит.png
файл с именем,GnuPlot3D.png
содержащим желаемый вывод, в текущий рабочий каталог.Обратите внимание, что это работает только с дистрибутивами Gnuplot 4, поскольку в Gnuplot 5
$n
ссылки на аргументы устарели и заменены, к сожалению, более многословнымиARGn
.Пример вывода с
σ = 3
:Этот вывод в порядке в соответствии с OP .
Гнуплот 4, Альтернативное решение, 60 байтов
Вот альтернативное решение, которое намного длиннее предыдущего, но на мой взгляд вывод выглядит намного лучше.
Это все еще требует Gnuplot 4 по той же причине, что и предыдущее решение.
Пример вывода с
σ = 3
:источник
I am not sure if it molds to the specifications required
какие технические характеристики, по вашему мнению, не соответствуют?Gnuplot
построить график плотности вероятности распределения Гаусса с сигма2
без каких-либо модификаций среды.C ++,
34773344 байтаКоличество байтов не включает ненужные переводы строки.
MD XF забил 133 байта.
Нет никакого способа, которым C ++ мог бы конкурировать за это, но я думал, что было бы забавно написать программное средство рендеринга для задачи. Я разорвал и сыграл несколько частей GLM для математики 3D и использовал линейный алгоритм Сяолиня Ву для растеризации. Программа выводит результат в файл PGM с именем
g
.l
длина одной стороны сетки в мировом пространстве.c
это число вершин вдоль каждого края сетки.x
иz
(+ y идет вверх), мировые пространственные координаты вершины и возвращает мировую пространственную позицию вершины.w
это ширина пгмh
высота пгмm
матрица вида / проекции Аргументы, используемые для созданияm
...Рендерер может легко иметь больше возможностей, лучшую производительность и лучше играть в гольф, но мне было весело!
источник
Mathematica, 47 байт
принимает в качестве входа σ
вход
вывод
-2 байта благодаря LLlAMnYP
источник
E^(-(x^2+y^2)/2/#^2)
R
1051028786 байтПринимает сигму от STDIN. Создает вектор из
-6
в6
в шагах.1
для обоихx
иy
,затем создает121x121
матрицу, беря внешнее произведениеx
иy
. Это короче, чем вызовmatrix
и указание размеров. Матрица уже заполнена, но это нормально, потому что мы перезаписываем это.Вfor
-loop петли над значениями вx
, что делает использование векторизованных операцийR
, создающая матрицу плотности по одной строке за один раз.(s)apply
снова более короткий метод для векторизованных операций. Как и герой, он сам обрабатывает создание матрицы, сохраняя немало байтов.128125110109 байт, но гораздо более навороченный:Этот сюжет создан
plotly
пакетом. К сожалению, спецификация немного многословна, так что это стоит много байтов. Результат действительно очень интересный. Я очень рекомендую попробовать это для себя.источник
plotly
сюжет достаточно причудлив, чтобы оправдать его включение.s
один раз, вы могли бы сделать2*scan()^2
и удалитьs=scan();
в начале? Это сэкономит 3 байта.Applesoft BASIC,
930783782727719702695637 байт-72 байта и работающая программа благодаря потолку, определяющему мою ошибку и укороченному алгоритму
Безголовая версия здесь.
Когда дан вход
1
:Когда дан вход
2
:источник
EXP(X)/(2*3.14159*S1*S1)
наEXP(X)*M