Documentos de Académico
Documentos de Profesional
Documentos de Cultura
41
distancealgorithmspherical-geometryhaversine
Compartir enlace
fuente
Afriza N. Arief2011-01-06
FacebookTwitterWhatsAppEmailSMSCompartir
Conteo de respuestas: 3
El problema está indicado por la palabra "bien condicionado". Es una cuestión de aritmética
informática, no de matemáticas.
Aquí están los hechos básicos a considerar:
1. Un radián en la tierra abarca casi 10 ^ 7 metros.
2. La función coseno para argumentos x cerca de 0 es aproximadamente igual a 1 - x ^
2/2.
3. El punto flotante de precisión doble tiene aproximadamente 15 dígitos decimales de
precisión.
Los puntos (2) y (3) implican que cuando x es de alrededor de un metro, o 10 ^ -7 radianes
(punto 1), casi toda la precisión se pierde: 1 - (10 ^ -7) ^ 2 = 1 - 10 ^ - 14 es un cálculo en el
que los primeros 14 de los 15 dígitos significativos se cancelan, dejando solo un dígito para
representar el resultado. Darle la vuelta a esto (que es lo que hace el coseno inverso,
"acosar") significa que calcular acos para ángulos que corresponden a distancias de un
metro no se puede hacer con una precisión significativa. (En ciertos casos graves, la
pérdida de precisión da un valor donde ni siquiera se define acos, por lo que el código se
descompondrá y no dará respuesta, una respuesta sin sentido o bloqueará la máquina).
Consideraciones similares sugieren que debe evitar el uso del coseno inverso si hay
distancias de menos de unos cientos de metros, dependiendo de la precisión que esté
dispuesto a perder.
El papel que juega acos en la ingenua fórmula de la ley del coseno es convertir un ángulo en
una distancia. Atan2 desempeña ese papel en la fórmula de Haversine. La tangente de un
ángulo pequeño x es aproximadamente igual a x misma. En consecuencia, la tangente inversa
de un número, que es aproximadamente ese número, se calcula esencialmente sin pérdida de
precisión. Es por eso que la fórmula de Haversine, aunque matemáticamente equivalente a la
ley de la fórmula de cosenos, es muy superior para distancias pequeñas (del orden de 1
metro o menos).
Aquí hay una comparación de las dos fórmulas que usan 100 pares de puntos aleatorios en el
globo (usando los cálculos de doble precisión de Mathematica).
Puede ver que para distancias de menos de aproximadamente 0.5 metros, las dos fórmulas
divergen. Por encima de 0,5 metros tienden a estar de acuerdo. Para mostrar qué tan de
acuerdo están, la siguiente gráfica muestra las relaciones de la ley de los cosenos: resultados
de haversina para otros 100 pares de puntos aleatorios, con sus latitudes y longitudes que
difieren aleatoriamente en hasta 5 metros.
Esto muestra que la fórmula de la ley del coseno es buena para 3-4 decimales una vez que la
distancia excede los 5-10 metros. El número de decimales de precisión aumenta
cuadráticamente; así, a 50-100 metros (un orden de magnitud) obtienes una precisión de 5-6
dp (dos órdenes de magnitud); a 500-1000 metros obtienes 7-8 dp, etc.
49
Compartir enlace
fuente
whuber2011-01-06
1 - cos(x) = 2*sin(x/2)^2
= 2*haversin(x)
Compartir enlace
fuente
cffk2013-04-22
Distance = acos(SIN(lat1)*SIN(lat2)+COS(lat1)*COS(lat2)*COS(lon2-lon1))*6371
dLat = (lat2-lat1)
dLon = (lon2-lon1)
a = sin(dLat/2) * sin(dLat/2) + cos(lat1) * cos(lat2) * sin(dLon/2) *
sin(dLon/2)
distance = 6371 * 2 * atan2(sqrt(a), sqrt(1-a))