Inspirado en este video de la serie Infinite .
Introducción
Pi se define como la relación de la circunferencia al diámetro de un círculo. Pero, ¿cómo se define un círculo? Por lo general, un círculo se define como los puntos con distancia constante al punto central (supongamos que el centro está en (0,0)). La siguiente pregunta sería: ¿Cómo definimos la distancia ? A continuación estamos considerando diferentes nociones de distancias (inducidas por las Lpnormas):
Dada una norma (= algo que mide una longitud ) podemos construir fácilmente una distancia (= distancia entre dos puntos) de la siguiente manera:
dist(A,B) := norm (A-B)
La norma euclidiana viene dada por:
norm((x,y)) = (x^2 + y^2)^(1/2)
Esto también se llama la norma L2 . Las otras normas Lp se construyen reemplazando el 2en la fórmula anterior por otros valores entre 1 e infinito:
norm_p((x,y)) = (|x|^p + |y|^p)^(1/p)
Los círculos unitarios para esas diferentes normas tienen formas bastante distintas:
Reto
Dado a p >= 1, calcule la razón de la circunferencia al diámetro de un círculo Lp con respecto a la Lpforma con una precisión de cuatro cifras significativas.
Casos de prueba
Podemos utilizarlo para p,qcon 1 = 1/p + 1/qobtenemos la misma proporción para el Lp, así como la Lqnorma. Además, para p = q = 2la relación es mínima, y para p = 1, q = infinityobtener una relación de 4, las relaciones son siempre entre piy 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²) no se cumple parap ≠ 2Respuestas:
Python + scipy, 92 bytes
La fórmula es de esta pregunta matemática .
fuente
x=1, ¿cómo funciona su presentación?MATL , 31 bytes
Pruébalo en línea! O verificar todos los casos de prueba .
Explicación
Esto genera las coordenadas x , y de un cuarto del círculo unitario muestreado en 1001 puntos con el paso 0.001 en x . La longitud del cuarto de círculo se aproxima por la de la línea poligonal que pasa por esos puntos; es decir, la suma de las longitudes de los 1000 segmentos. La longitud, por supuesto, se calcula de acuerdo con
p-norm. Multiplicar el resultado por 2 da la longitud aproximada de medio círculo, es decir, pi.fuente
Mathematica,
4946 bytes3 bytes guardados debido a alephalpha .
Función anónima. Toma un número como entrada y devuelve un número como salida.
fuente
2NIntegrate[(1+(a^-#-1)^(1-#))^(1/#),{a,0,1}]&PARI / GP,
4843 bytesEs fácil después de que @orlp haya encontrado la fórmula, y la versión de @ alephalpha ahorra 5 bytes:
Para agregar algo ligeramente útil, calculemos
ppara qué obtenemos3.2:Uso Correcto
Si bien el código proporciona resultados que son mucho más exactos de lo que exige el desafío, puede mejorarse mucho fácilmente: si reemplazamos el límite superior de integración
1con[1,1/p-1](dando lo que el manual llama el exponente de singularidad), todos los dígitos mostradosf(2)están de acuerdoPi. Esto sigue siendo cierto si aumentamos la precisión a 100 (tipo\p100).Sin embargo, después de ese cambio, el
solvecálculo ya no funcionó. Cambié el término interno para manejar explícitamente el casou=0y también cambié a una computadora diferente con una versión PARI más nueva y 64 bits (lo que implica una mayor precisión predeterminada).Aquí está el cálculo mejorado del
pvalor dePi=3.2, y también echemos un vistazo al Pi real:fuente
p->2*intnum(u=0,1,(1+(u^-p-1)^(1-p))^(1/p))JavaScript (ES7), 80 bytes
Basado en la respuesta de orlp . Esta implementación de JS es bastante lenta. Es posible que desee probar
i=1e-7(o incluso más) para una aproximación más rápida.Nota : Esto está destinado básicamente para Chrome y Edge solamente. Una versión ES6 equivalente que se usa
Math.pow()en Firefox 50.1 parece ser mucho más lenta.Editar : según Neil, esto también debería funcionar bien en Firefox 52.
fuente