¿Cuál es la forma correcta de comparar vectores en coma flotante?


8

Sé que debería usar una tolerancia para comparar números de coma flotante. Pero para comparar vectores, puedo pensar en 3 posibles soluciones correspondientes a diferentes métricas de distancia:

  1. Compare los componentes de cada vector individualmente: los vectores son iguales si los 3 están dentro de la tolerancia. Esta opción se comportaría como la norma uniforme , dando un cubo de tolerancia.
  2. Compare la suma de todas las diferencias absolutas con cierta tolerancia. Esto se comportaría como la norma del taxi , dando un simplex de tolerancia.
  3. Calcule la longitud euclidiana de (vecA - vecB) y vea si está dentro de la tolerancia. Esto daría la norma euclidiana estándar con una esfera de tolerancia.

Pero mi principal preocupación es la estabilidad numérica. La norma euclidiana "parece" la mejor opción, pero me preocupa que todos los cálculos induzcan más errores de redondeo. En menor medida, la opción 2 también podría introducir errores. (Por ejemplo, si el componente x de los vectores es mucho mayor que y y z , sumar todas las diferencias podría afectar cualquier contribución de y y z ). Por lo tanto, actualmente me estoy inclinando hacia la opción 1.

¿Alguien puede opinar sobre una opinión autorizada sobre este problema?


1
Depende de lo que quieras. ¿Está comprobando si los vectores tienen componentes iguales o solo magnitudes iguales? Para verificar la igualdad en un sentido de programación, entonces la opción 1 es el camino a seguir.
ja72

Esta no es una pregunta sobre punto flotante, sino una pregunta sobre la aplicación de conceptos matemáticos.
shuhalo

1
Para la mayoría de las aplicaciones, todos estos enfoques serán satisfactorios, especialmente si, como su redacción implica, solo le interesan tres dimensiones. Mi primera respuesta sería "no te preocupes por eso". ¿Hay alguna razón específica por la que te preocupes por los errores de redondeo en este contexto?
MRocklin

Respuestas:


5

La respuesta a esta pregunta depende en gran medida de su aplicación. En lugar de preocuparse por la implementación numérica exacta, piense más sobre lo que significa cada posible realización que sugirió. Por ejemplo, ¿una o más de las distancias calculadas tienen una interpretación física? ¿Son iguales las unidades y escalas de los componentes del vector?

En el escenario donde todos los parámetros tienen las mismas unidades y diferentes escalas de valores, debe pensar más sobre la mejor manera de dimensionar su sistema. La no dimensionalización ayuda a ahuyentar a los malvados gnomos de precisión numérica.

A medida que usa x, y y z como nombres de valores, sospecho que está buscando algún tipo de posición en el espacio. Las dos normas tienen la clara ventaja de tener una derivada continua, por lo que, al carecer de información sobre problemas reales, probablemente comenzaría allí.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.