¿Por qué es más preferible la ley de los cosenos que la haversina cuando se calcula la distancia entre dos puntos de latitud-longitud?

39
  

De hecho, cuando Sinnott publicó el   fórmula haversina, computacional   La precisión era limitada. Hoy en día,   JavaScript (y las computadoras más modernas)   &erio; idiomas) utiliza IEEE 754 de 64 bits   números de punto flotante, que proporcionan   15 figuras significativas de la precisión.   Con esta precisión, lo simple.   Fórmula ley esférica de cosenos ( cos c = cos a cos b + sin a sin b cos C )   da resultados bien condicionados hasta   distancias tan pequeñas como alrededor de 1 metro.    En vista de esto, probablemente vale la pena,   en la mayoría de las situaciones, utilizando   Ley más simple de los cosenos o cuanto más   Fórmula de Vincenty elipsoidal precisa   en lugar de haversine! (teniendo   En las notas que siguen a continuación sobre las limitaciones.   en exactitud del modelo esférico).
  Fuente: enlace

¿Cuál es la razón por la cual la ley de cosenos es más preferible?

Nota: el texto citado ha sido actualizado por su autor como se menciona < a href="https://gis.stackexchange.com/questions/4906/why-is-law-of-cosines-more-preferable-than-haversine-when-calculating-distance-b/9197#comment11102_4906"> bellow .

    
pregunta Afriza N. Arief 06.01.2011 - 16:43

3 respuestas

45

El problema está indicado por la palabra "bien condicionado". Es un problema de aritmética computacional, 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 de coseno para los argumentos x cerca de 0 es aproximadamente igual a 1 - x^2/2.

  3. El punto flotante de doble precisión tiene aproximadamente 15 dígitos decimales de precisión.

Los

puntos (2) y (3) implican que cuando x está 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 (lo que hace el coseno inverso, "acos", significa) significa que calcular los acos para ángulos que corresponden a distancias de longitud de metro no se puede hacer con una precisión significativa. (En ciertos casos negativos) la pérdida de precisión da un valor donde el acos ni siquiera está definido, por lo que el código se descompondrá y no dará respuesta, una respuesta sin sentido, o colapsará la máquina.) Consideraciones similares sugieren que debe evitar el uso del coseno inverso si las distancias son inferiores a Hay cientos de metros involucrados, dependiendo de la precisión que estés dispuesto a perder.

El papel que desempeñan los acos en la ingenua fórmula de la ley de los cosenos es convertir un ángulo a una distancia. Ese papel es jugado por atan2 en la fórmula de haversine. La tangente de un pequeño ángulo x es aproximadamente igual a x . En consecuencia, la tangente inversa de un número, que es aproximadamente ese número, se calcula esencialmente sin pérdida de precisión. Esta es la razón por la cual la fórmula de Haversine, aunque matemáticamente es equivalente a la fórmula de la ley 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 usando 100 pares de puntos al azar en el globo (usando los cálculos de precisión doble de Mathematica).

Sepuedeverque,paradistanciasinferioresaunos0,5metros,lasdosfórmulasdivergen.Porencimadelos0,5metrostiendenacoincidir.Paramostrarquétandecercaestándeacuerdo,lasiguientegráficamuestralasrelacionesdelaleydecosenos:resultadosdelasondaparaotros100paresdepuntosaleatorios,consuslatitudesylongitudesquedifierenaleatoriamentehasta5metros.

Esto muestra que la fórmula de la ley de los cosenos es buena con 3-4 lugares decimales una vez que la distancia supera los 5-10 metros. El número de decimales de precisión aumenta de forma cuadrática; por lo tanto, a 50-100 metros (un orden de magnitud) se obtiene una precisión de 5-6 dp (dos órdenes de magnitud); a 500-1000 metros obtienes 7-8 dp, etc.

    
respondido por el whuber 06.01.2011 - 17:46
5

Una nota histórica:

El haversine fue una forma de evitar grandes errores de redondeo en cálculos como

1 - cos(x)

cuando x es pequeño. En términos de la haversine tenemos

1 - cos(x) = 2*sin(x/2)^2
           = 2*haversin(x)

y 2 * sin (x / 2) ^ 2 se pueden calcular con precisión incluso cuando x es pequeño.

En los viejos tiempos, la fórmula de haversine tenía una ventaja adicional de evitando una adición (que implicaba una búsqueda antilog, la adición, y una búsqueda de registro). Una fórmula trigonometica que conlleva solo se dijo que las multiplicaciones están en "forma logarítmica".

Hoy en día, el uso de las fórmulas de haversine es ligeramente anacrónico. Eso podría ser que el ángulo x se exprese en términos sin(x) y cos(x) (y x podría no ser explícitamente conocido). En ese caso, computar 1 - cos(x) via la fórmula haversine implica un arctangent (para obtener el ángulo x), dividiendo a la mitad (para obtener x/2 ), un seno (para obtener sin(x/2) ), un cuadrado (para obtener sin(x/2)^2 ) y una duplicación final. Está mucho mejor usando la evaluación

1 - cos(x) = sin(x)^2/(1 + cos(x))

que no conlleva evaluaciones de funciones trigonométricas. (Obviamente usar el lado derecho solo si cos(x) > 0 ; de lo contrario, está bien usar 1 - cos(x) directamente.)

    
respondido por el cffk 23.04.2013 - 00:09
2

La fórmula de coseno se puede implementar en una línea:

  Distance = acos(SIN(lat1)*SIN(lat2)+COS(lat1)*COS(lat2)*COS(lon2-lon1))*6371

La fórmula de haversine toma varias líneas:

  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))

Matemáticamente, hay idénticas, por lo que la única diferencia es la práctica.

    
respondido por el Tom W 06.01.2011 - 17:07

Lea otras preguntas en las etiquetas