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 Lp
normas):
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 2
en 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 Lp
forma con una precisión de cuatro cifras significativas.
Casos de prueba
Podemos utilizarlo para p,q
con 1 = 1/p + 1/q
obtenemos la misma proporción para el Lp
, así como la Lq
norma. Además, para p = q = 2
la relación es mínima, y para p = 1, q = infinity
obtener una relación de 4, las relaciones son siempre entre pi
y 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 ≠ 2
Respuestas:
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
p
para 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
1
con[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
solve
cálculo ya no funcionó. Cambié el término interno para manejar explícitamente el casou=0
y 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
p
valor 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