Distance moyenne de deux points dans un hypercube à n dimensions unitaire


13

Un moyen facile de comprendre l'hypercube à n dimensions unitaire est de considérer la région de l'espace en n dimensions que vous pouvez obtenir si chaque composante de coordonnées se trouve dans [0, 1]. Donc pour une dimension c'est le segment de ligne de 0 à 1, pour deux dimensions c'est le carré avec des coins (0, 0) et (1, 1), etc.

Écrivez un programme ou une fonction qui, étant donné n, renvoie la distance euclidienne moyenne de deux points uniformément choisis au hasard dans l'hypercube à n unités. Votre réponse doit être comprise entre 10 et 6 de la valeur réelle. C'est correct si votre réponse déborde du type à virgule flottante natif de votre langue pour le grand n.

La sélection aléatoire d' un «grand» nombre de points et le calcul de la moyenne ne garantissent pas une telle précision.

Exemples:

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

Données acquises de MathWorld .

Il s'agit du , le plus petit nombre de victoires d'octets.


Critère de gain réitéré dans un montage.
Magic Octopus Urn

Juste pour être clair: la distance fait référence à la distance euclidienne, oui?
Dennis

3
@carusocomputing Quel est l'intérêt du défi si vous voulez que je le résolve pour vous?
orlp

4
@orlp enregistre mon objection à un défi qui est un puzzle mathématique jusqu'à ce que quelqu'un comprenne les mathématiques, puis cela devient un puzzle de programmation lorsque tout le monde copie la formule dans différentes langues. Je dois poser une méta-question à ce sujet.
Sparr

1
Lorsque vous dites 5 chiffres de précision, voulez-vous dire à 1e-5 près, ou une estimation de 1,500000000000001 serait-elle erronée lorsque la sortie devrait être de 1,49999999999999999?
xnor

Réponses:


5

Mathematica, 68 octets

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

Implémentation de la formule en utilisant NIntegratepour approximer sa valeur.

Image


Battez-moi de 58 secondes :(
JungHwan Min

Où avez-vous trouvé la formule?
feersum

@feersum C'est la formule (8) de Hypercube Line Picking . (10) est une faute de frappe et ne devrait pas avoir la double intégrale ou du.
miles

Si vous saisissez ce sous forme de texte, il analyse u√πcomme un jeton, vous avez donc besoin d'un espace entre uet .
feersum
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.