Inspiré par cette vidéo de Infinite Series .
introduction
Pi est défini comme le rapport de la circonférence au diamètre d'un cercle. Mais comment définit-on un cercle? Habituellement, un cercle est défini comme les points avec une distance constante au centre (supposons que le centre est à (0,0)
). La prochaine question serait: comment définissons-nous la distance ? Dans ce qui suit, nous examinons différentes notions de distances (induites par les Lp
-norms):
Étant donné une norme (= quelque chose qui mesure une longueur ), nous pouvons facilement construire une distance (= distance entre deux points) comme suit:
dist(A,B) := norm (A-B)
La norme euclidienne est donnée par:
norm((x,y)) = (x^2 + y^2)^(1/2)
Ceci est aussi appelé la norme L2 . Les autres normes Lp sont construites en remplaçant la 2
formule ci-dessus par d'autres valeurs comprises entre 1 et l'infini:
norm_p((x,y)) = (|x|^p + |y|^p)^(1/p)
Les cercles unitaires de ces différentes normes ont des formes bien distinctes:
Défi
Soit a p >= 1
, calcule le rapport circonférence / diamètre d'un cercle Lp par rapport à la Lp
norme avec une précision de quatre chiffres significatifs.
Testcases
Nous pouvons utiliser cela car p,q
avec 1 = 1/p + 1/q
nous obtenons le même ratio pour le Lp
aussi bien que pour la Lq
norme. De plus, p = q = 2
le ratio est minimal et p = 1, q = infinity
nous obtenons un ratio de 4, donc les ratios sont toujours compris entre pi
et 4
.
p or q ratio
1 infinity 4
2 2 3.141592
1.623 2.60513 3.200
1.5 3 3.25976
4 1.33333 3.39693
A = πr²
) ne tient pas pourp ≠ 2
Réponses:
Python + scipy, 92 octets
La formule est de cette question math.SE .
la source
x=1
, comment se présente votre soumission?MATL , 31 octets
Essayez-le en ligne! Ou vérifiez tous les cas de test .
Explication
Cela génère les coordonnées x , y d'un quart du cercle unitaire échantillonné à 1001 points à l'étape 0.001 dans x . La longueur du quart de cercle est approximée par celle de la ligne polygonale passant par ces points; c'est-à-dire la somme des longueurs des 1000 segments. La longueur est bien sûr calculée en fonction de
p
-norm. En multipliant le résultat par 2, on obtient la longueur approximative d'un demi-cercle, c'est-à-dire, pi.la source
Mathematica,
4946 octets3 octets enregistrés à cause d' alephalpha .
Fonction anonyme. Prend un nombre en entrée et retourne un nombre en sortie.
la source
2NIntegrate[(1+(a^-#-1)^(1-#))^(1/#),{a,0,1}]&
PARI / GP,
4843 octetsC'est facile après que @orlp ait trouvé la formule et que la version de @ alephalpha enregistre 5 octets:
Pour ajouter quelque chose de légèrement utile, calculons le
p
pour lequel on obtient3.2
:Usage correct
Bien que le code donne des résultats beaucoup plus précis que les exigences du challenge, il peut facilement être beaucoup amélioré: si nous remplaçons la limite d'intégration supérieure
1
par[1,1/p-1]
(en donnant ce que le manuel appelle l'exposant de singularité), tous les chiffres indiqués sont d'f(2)
accordPi
. Cela reste vrai si nous augmentons la précision à 100 (type\p100
).Cependant, après ce changement, le
solve
calcul ne fonctionnait plus. J'ai changé le terme interne pour gérer explicitement le casu=0
et j'ai également changé pour un ordinateur différent avec une version plus récente de PARI et 64 bits (ce qui implique une précision par défaut plus élevée).Voici le calcul amélioré de la
p
valeur pourPi=3.2
, et regardons aussi le vrai Pi:la source
p->2*intnum(u=0,1,(1+(u^-p-1)^(1-p))^(1/p))
JavaScript (ES7), 80 octets
Basé sur la réponse de orlp . Cette implémentation de JS est assez lente. Vous voudrez peut-être essayer
i=1e-7
(ou même plus haut) une approximation plus rapide.Remarque : il s’agit essentiellement de Chrome et Edge uniquement. Une version ES6 équivalente utilisant
Math.pow()
Firefox 50.1 semble être beaucoup plus lente.Edit : Selon Neil, cela devrait également fonctionner correctement sur Firefox 52.
la source