46 votos

¿Por qué es preferible la ley de los cosenos a la del haverseno para calcular la distancia entre dos puntos de latitud-longitud?

De hecho, cuando Sinnott publicó el fórmula de la haversina, la precisión precisión computacional era limitada. Hoy en día, JavaScript (y la mayoría de los ordenadores modernos y lenguajes) utilizan números de punto flotante de 64 bits IEEE 754 de 64 bits, que proporcionan 15 cifras significativas de precisión. Con esta precisión, el simple ley esférica de los cosenos fórmula ( cos c = cos a cos b + sin a sin b cos C ) da resultados bien condicionados hasta distancias tan pequeñas como un metro aproximadamente. En vista de esto, probablemente valga la pena, en la mayoría de las situaciones, utilizar la ley de los cosenos más simple o la ley más fórmula elipsoidal de Vincenty en lugar del haversino. (teniendo en cuenta en cuenta las notas más abajo sobre las limitaciones en la precisión del modelo esférico).
Fuente: http://www.movable-type.co.uk/scripts/latlong.html

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

Nota: El texto citado ha sido actualizado por su autor como se mencionó debajo de .

53voto

cjstehno Puntos 131

El problema lo indica la palabra "bien acondicionado". Es una cuestión de aritmética informática, no de matemáticas.

Estos son los datos básicos que hay que tener en cuenta:

  1. Un radián en la tierra abarca casi 10^7 metros.

  2. La función coseno para los argumentos x cerca de 0 es aproximadamente igual a 1 - x ^2/2.

  3. La coma flotante de doble precisión tiene unos 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), se pierde casi toda la precisión: 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 todos, dejando sólo un dígito para representar el resultado. Si se invierte esto (que es lo que hace el coseno inverso, "acos") significa que El cálculo de acos para ángulos que corresponden a distancias de un metro no puede hacerse con una precisión significativa. (En algunos casos malos, la pérdida de precisión da un valor en el que acos ni siquiera está definido, por lo que el código se estropeará y no dará ninguna respuesta, una respuesta sin sentido o hará que la máquina se bloquee). Consideraciones similares sugieren que debería evitar el uso del coseno inverso si se trata de distancias inferiores a unos cientos de metros, dependiendo de la precisión que esté dispuesto a perder.

El papel que desempeña acos en la fórmula ingenua de la ley de los cosenos es convertir un ángulo en una distancia. Ese papel lo desempeña atan2 en la fórmula del haversino. La tangente de un ángulo pequeño x es aproximadamente igual a x mismo. En consecuencia, la tangente inversa de un número, al ser aproximadamente ese número, se calcula esencialmente sin pérdida de precisión. Por ello, la fórmula del haversino, aunque es matemáticamente equivalente a la fórmula de la ley de los cosenos, es muy superior para distancias pequeñas (del orden de 1 metro o menos).

He aquí una comparación de las dos fórmulas utilizando 100 pares de puntos aleatorios en el globo terráqueo (utilizando los cálculos de doble precisión de Mathematica).

alt text

Puedes ver que para distancias inferiores a unos 0,5 metros, las dos fórmulas divergen. Por encima de 0,5 metros tienden a coincidir. Para mostrar lo mucho que coinciden, el siguiente gráfico muestra las relaciones de la ley de los cosenos:resultados del haversino para otros 100 pares de puntos aleatorios, con sus latitudes y longitudes que difieren aleatoriamente hasta 5 metros.

alt text

Esto demuestra que la fórmula de la ley de los cosenos es buena hasta 3-4 decimales una vez que la distancia supera los 5-10 metros. El número de decimales de precisión aumenta cuadráticamente; así, 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 se obtienen 7-8 dp, etc.

7voto

GSree Puntos 161

Una nota histórica a pie de página:

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

1 - cos(x)

cuando x es pequeño. En términos del haversino tenemos

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

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

Antiguamente, la fórmula de la haversina tenía la ventaja adicional de evitar una adición (que implicaba una búsqueda antilog, la adición y una búsqueda logarítmica). Una fórmula trigonométrica que sólo requería se decía que estaba en "forma logarítmica".

Hoy en día, el uso de las fórmulas de la haversina es ligeramente anacrónico. En puede ser que el ángulo x se exprese en términos sin(x) y cos(x) (y x puede no ser conocido explícitamente). En ese caso, el cálculo de 1 - cos(x) a través de la fórmula del haversino implica una arctangente (para obtener el ángulo x), la reducción 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. Es mucho mejor utilizar la evaluación de

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

que no implica evaluaciones de funciones trigonométricas. (Evidentemente, utilice el lado derecho sólo si cos(x) > 0 ; de lo contrario, está bien utilizar 1 - cos(x) directamente).

1voto

user1593 Puntos 24

La fórmula del coseno puede implementarse en una línea:

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

La fórmula de la haversina requiere 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, son idénticos, por lo que la única diferencia es de orden práctico.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X