Eu sei que devo usar uma tolerância para comparar números de ponto flutuante. Mas para comparar vetores, posso pensar em 3 soluções possíveis correspondentes a diferentes métricas de distância:
- Compare os componentes de cada vetor individualmente: os vetores são iguais se todos os 3 estiverem dentro da tolerância. Essa opção se comportaria como a norma uniforme , fornecendo um cubo de tolerância.
- Compare a soma de todas as diferenças absolutas com alguma tolerância. Isso se comportaria como a norma do táxi , fornecendo um simplex de tolerância.
- Calcule o comprimento euclidiano de (vecA - vecB) e verifique se está dentro da tolerância. Isso daria à norma euclidiana padrão uma esfera de tolerância.
Mas minha principal preocupação é a estabilidade numérica. A norma euclidiana "parece" a melhor opção, mas estou preocupado que todos os cálculos induzam mais erros de arredondamento. Em menor grau, a opção 2 também pode introduzir erros. (Por exemplo, se o componente x dos vetores for muito maior que y e z , a soma de todas as diferenças poderá suprimir qualquer contribuição de y e z .) Portanto, atualmente estou me inclinando para a opção 1.
Alguém pode pesar com uma opinião oficial sobre esse problema?
Respostas:
A resposta a esta pergunta depende muito da sua aplicação. Em vez de suar a implementação numérica exata, pense mais sobre o significado de cada modalidade em potencial que você sugeriu. Por exemplo, uma ou mais das distâncias calculadas têm uma interpretação física? As unidades e escalas dos componentes vetoriais são iguais?
No cenário em que todos os parâmetros têm as mesmas unidades e diferentes escalas de valores, você deve pensar mais sobre a melhor maneira de dimensionar seu sistema. A não dimensionalização ajuda a afastar os gnomos de precisão numérica do mal.
Como você usa x, ye z como nomes de valor, suspeito que esteja observando algum tipo de posição no espaço. A norma dois tem a vantagem distinta de ter uma derivada contínua; portanto, sem qualquer informação real sobre o problema, eu provavelmente começaria por aí.
fonte