Среднее расстояние двух точек в единичном n-мерном гиперкубе

13

Простой способ понять единичный n-мерный гиперкуб - это рассмотреть область пространства в n измерениях, которую можно получить, если каждый компонент координат лежит в [0, 1]. Таким образом, для одного измерения это отрезок от 0 до 1, для двух измерений - квадрат с углами (0, 0) и (1, 1) и т. Д.

Напишите программу или функцию, которая при заданном n возвращает среднее евклидово расстояние двух точек, равномерно выбранных случайным образом из гиперкуба единичной n-размерности. Ваш ответ должен быть в пределах 10 -6 от фактического значения. Это нормально, если ваш ответ переполняет собственный тип с плавающей запятой вашего языка для больших n.

Случайный выбор «большого» количества точек и вычисление среднего значения не гарантирует такой точности.

Примеры:

1 → 0,3333333333 ...
2 → 0,5214054331 ...
3 → 0,6617071822 ...
4 → 0,7776656535 ...
5 → 0,8785309152 ...
6 → 0,9689420830 ...
7 → 1,0515838734 ...
8 → 1,1281653402 ...

Данные получены из MathWorld .

Это , побеждает наименьшее количество байтов.

orlp
источник
Повторный критерий выигрыша в ред.
Волшебная урна осьминога
Просто чтобы быть ясно: расстояние относится к евклидову расстоянию, да?
Деннис
3
@carusocomputing Какой смысл задачи, если вы хотите, чтобы я решил ее для вас?
17
4
@ orlp регистрирует мое возражение против задачи, которая является математической головоломкой, пока кто-то не выяснит математику, а затем она становится программируемой головоломкой, когда все копируют формулу на разных языках. Мне нужно задать мета вопрос по этому поводу.
Спарр
1
Когда вы говорите 5 цифр точности, вы имеете в виду 1e-5, или оценка 1.500000000000001 будет неправильной, если на выходе должно быть 1.499999999999999?
xnor

Ответы:

5

Mathematica, 68 байт

NIntegrate[(1-((E^-u^2+u*Erf@u√π-1)/u^2)^#)/u^2,{u,0,∞}]/√π&

Реализация формулы с использованием NIntegrateдля аппроксимации ее значения.

Образ

миль
источник
Ударь
Где вы нашли формулу?
feersum
@feersum Это формула (8) из набора линий гиперкуба . (10) является опечаткой и не должно иметь двойной интеграл или du.
миль
Если вы на самом деле вводите это как текст, он разбирается u√πкак один токен, поэтому вам нужно пробел между uи .
17