Оценка погрешности добавления вектора

Кахан в " Кресте" на странице 14 показывает, что угол между истинным перекрестным произведением и углом, вычисленным с использованием арифметики с плавающей запятой, ухудшается, когда угол между двумя скрещенными векторами приближается к нулю или π, причем этот угол измеряет ошибку в вычислении с плавающей запятой нормаль к плоскости, натянутой на скрещенные векторы. По мере приближения к сингулярностям ортогональность нормали с плавающей точкой становится все более скомпрометированной. По словам Кахана, ошибка такова:

| sin (∠ (t_true, t_float)) | ≤ u + (2 / √3) u | csc (∠ (t_1, t_2)) |

где t_true - истинный ортогональный вектор после получения кросс-произведения t_1⊗t_2 с бесконечной точностью, тогда как t_float - результат кросс-произведения с использованием арифметики с плавающей запятой, а u - округление единицы.

Мой вопрос: существует ли подобное неравенство для суммы двух векторов. То есть, насколько далеко от истинного направления сумма векторов с плавающей запятой получается, когда угол между добавляемыми векторами приближается к нулю или π? В моем конкретном приложении векторы будут иметь единичную длину.

Редактировать: я должен добавить, что вектор, который является суммой двух векторов, будет нормализован.

1 ответ

Решение

Принимать c быть вычисленным v-w а также e разница между c и что вы хотели вычислить, а именно (v+deltav) - (w+deltaw), Вот, e учитывает как ошибку округления в вычислениях, так и ошибку аппроксимации в ваших входных данных.

принимать r быть отношением ||e|| / ||c||, Это должно быть меньше единицы, иначе мы просто не знаем, где находится истинное решение.

По тригонометрии угол между c а также c+e является arccos(c^T (c+e) / sqrt(c^T c (c+e)^T (c+e))) = arccos((1 + alpha r) / sqrt(1 + 2 alpha r + r^2), где -1 <= alpha <= 1 это отношение e^T c в sqrt(c^T c e^T e), Косинус угла между c а также c+e сворачивается когда alpha это точно -rв этот момент угол arccos(sqrt(1 - r^2)) = arcsin(r),

Вы можете получить тот же результат из закона синусов. Учитывая c и обязанность ||e||/||c||точки, которые могут быть обоснованно c+e лежать на круге с центром в c радиуса ||e||, Худший c+e будет на границе и линии от начала координат до худшего c+e сделает прямой угол с линией от c+e в c, Таким образом, угол противоположный c это прямой угол. По закону синусов, тогда, ||e|| / sin(theta) = ||c||, из которого следует тот же результат.

Другие вопросы по тегам