Was ist der richtige Weg, um Vektoren im Gleitkomma zu vergleichen?


8

Ich weiß, dass ich eine Toleranz für den Vergleich von Gleitkommazahlen verwenden sollte. Aber zum Vergleichen von Vektoren kann ich mir 3 mögliche Lösungen vorstellen, die unterschiedlichen Abstandsmetriken entsprechen:

  1. Vergleichen Sie die Komponenten jedes Vektors einzeln: Die Vektoren sind gleich, wenn alle 3 innerhalb der Toleranz liegen. Diese Option würde sich wie die einheitliche Norm verhalten und einen Toleranzwürfel ergeben.
  2. Vergleichen Sie die Summe aller absoluten Unterschiede mit einer gewissen Toleranz. Dies würde sich wie die Taxinorm verhalten und einen Simplex der Toleranz ergeben.
  3. Berechnen Sie die euklidische Länge von (vecA - vecB) und prüfen Sie, ob sie innerhalb der Toleranz liegt. Dies würde der euklidischen Standardnorm einen Toleranzbereich geben.

Mein Hauptanliegen ist jedoch die numerische Stabilität. Die euklidische Norm "fühlt sich wie" die beste Option an, aber ich mache mir Sorgen, dass alle Berechnungen mehr Rundungsfehler hervorrufen würden. In geringerem Umfang könnte Option 2 auch Fehler verursachen. (Wenn zum Beispiel die x- Komponente der Vektoren viel größer als y und z ist , kann das Addieren aller Unterschiede alle Beiträge von y und z überschwemmen .) Daher neige ich derzeit zu Option 1.

Kann jemand mit einer maßgeblichen Einstellung zu diesem Problem abwägen?


1
Es kommt darauf an, was Sie wollen. Prüfen Sie, ob die Vektoren gleiche Komponenten oder nur gleiche Größen haben? Um die Gleichheit im programmtechnischen Sinne zu überprüfen, ist Option 1 der richtige Weg.
Ja72

Dies ist keine Frage zum Gleitkomma, sondern eine Frage zur Anwendung mathematischer Konzepte.
Shuhalo

1
Für die meisten Anwendungen sind alle diese Ansätze zufriedenstellend, insbesondere wenn Sie, wie Ihr Wortlaut impliziert, nur an drei Dimensionen interessiert sind. Meine erste Antwort wäre "Mach dir keine Sorgen." Gibt es einen bestimmten Grund, warum Sie sich in diesem Zusammenhang Sorgen um Rundungsfehler machen?
MRocklin

Antworten:


5

Die Antwort auf diese Frage hängt weitgehend von Ihrer Bewerbung ab. Anstatt die genaue numerische Implementierung zu schwitzen, überlegen Sie sich mehr, was jede von Ihnen vorgeschlagene mögliche Ausführungsform bedeutet. Haben beispielsweise eine oder mehrere der berechneten Entfernungen eine physikalische Interpretation? Sind die Einheiten und Skalen der Vektorkomponenten gleich?

In dem Szenario, in dem alle Parameter die gleichen Einheiten und unterschiedliche Werteskalen haben, sollten Sie sich mehr Gedanken darüber machen, wie Sie Ihr System am besten dimensionieren können. Nichtdimensionalisierung hilft, die bösen Gnome mit numerischer Präzision zu vertreiben.

Wenn Sie x, y und z als Wertnamen verwenden, vermuten Sie, dass Sie sich eine Position im Raum ansehen. Die beiden Normen haben den entscheidenden Vorteil, dass sie eine kontinuierliche Ableitung haben. Da ich also keine wirklichen Probleminformationen habe, würde ich wahrscheinlich dort anfangen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.