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:
- 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.
- 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.
- 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?
Respuestas:
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í.
fuente