Średnia odległość dwóch punktów w jednostkowym hiperszerze n-wymiarowym

13

Łatwym sposobem zrozumienia jednostki n-wymiarowej hipersześcianu jest rozważenie obszaru przestrzeni w n wymiarach, który można uzyskać, jeśli każdy komponent współrzędnej leży w [0, 1]. Tak więc dla jednego wymiaru jest to odcinek linii od 0 do 1, dla dwóch wymiarów jest to kwadrat z narożnikami (0, 0) i (1, 1) itd.

Napisz program lub funkcję, która dająca n zwraca średnią odległość euklidesową dwóch równomiernie losowo wybranych punktów z hipersześcianu n-wymiarowego. Twoja odpowiedź musi mieścić się w zakresie 10–6 rzeczywistej wartości. Jest ok, jeśli twoja odpowiedź przepełnia natywny typ zmiennoprzecinkowy twojego języka dla dużej liczby n.

Losowe wybranie „dużej” liczby punktów i obliczenie średniej nie gwarantuje takiej dokładności.

Przykłady:

1 → 0,33333333333 ...
2 → 0,5214054331 ...
3 → 0,6667071822 ...
4 → 0,7776656535 ...
5 → 0,8785309152 ...
6 → 0,9689420830 ...
7 → 1,0515838734 ...
8 → 1.1281653402 ...

Dane pozyskane z MathWorld .

To jest , wygrana o najniższej liczbie bajtów.

orlp
źródło
Powtórzono kryterium zwycięstwa w edycji.
Magic Octopus Urn
Żeby było jasne: odległość odnosi się do odległości euklidesowej, tak?
Dennis
3
@carusocomputing Jaki jest sens wyzwania, jeśli chcesz, żebym go rozwiązał?
orlp
4
@orlp rejestruje mój sprzeciw wobec wyzwania, które jest zagadką matematyczną, dopóki ktoś nie zrozumie matematyki, a następnie staje się zagadką programistyczną, gdy wszyscy kopiują formułę w różnych językach. Muszę zadać na ten temat meta pytanie.
Sparr
1
Kiedy mówisz o 5 cyfrach dokładności, czy masz na myśli przedział od 1e-5, czy też oszacowanie 1,500000000000001 byłoby błędne, gdy wynik powinien wynosić 1,499999999999999?
xnor

Odpowiedzi:

5

Mathematica, 68 bajtów

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

Wdrożenie formuły za pomocą NIntegrateprzybliżenia jej wartości.

Wizerunek

mile
źródło
Pokonaj mnie o 58 sekund :(
JungHwan Min
Gdzie znalazłeś wzór?
feersum
@feersum Jest to formuła (8) z pobierania linii Hypercube . (10) jest literówką i nie powinien mieć podwójnej całki lub du.
mile
Jeśli faktycznie wprowadzisz to jako tekst, zostanie on przeanalizowany u√πjako jeden token, więc potrzebujesz odstępu między ui .
feersum