Qual é a maneira correta de comparar vetores em ponto flutuante?

8

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:

  1. 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.
  2. 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.
  3. 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?


fonte
1
Depende do que você quer. Você está verificando se os vetores têm componentes iguais ou apenas magnitudes iguais? Para verificar a igualdade no sentido de programação, a opção 1 é o caminho a percorrer.
23412 ja ja
Não se trata de ponto flutuante, mas de aplicação de conceitos matemáticos.
shuhalo 23/02
1
Para a maioria das aplicações, todas essas abordagens serão satisfatórias, principalmente se, como implica sua redação, você estiver interessado apenas em três dimensões. Minha primeira resposta seria "não se preocupe com isso". Existe um motivo específico para você se preocupar com erros de arredondamento nesse contexto?
MRocklin 23/02/12

Respostas:

5

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í.

meawoppl
fonte