Участник:System29a/Вычисление погрешностей

Материал из Викиконспекты
Перейти к: навигация, поиск

Короче, смотрите, всё не так сложно как кажется.

Первый и главный совет — почитайте презенташку Антона и посмотрите видео! Очень жаль, что лекториум именно в этот момент переезжает.

Ну дык вот.

Проблема — операции связанные с числами с плавающей точкой нифига не точны. Мы хотим оценить сверху эту самую неточность. В данном случае речь идёт об оценке знака векторного произведения.

19 слайд презенташки — тут даны определения операций с соответствующими погрешностями, которые собственно делает компьютер . [math]\delta[/math] — погрешность конкретной операции, она различная для каждой операции, но мы её можем оценить как [math]|\delta| \le \varepsilon[/math].

Смотрим следующее утверждение. Тут задается операция векторного произведения для трех точек, как она рассчитывается в компьютере. Мы же хотим оценить эталонные вычисления (операции будут не в кружочках).

Для начала выделим достаточное условие. Мы утверждаем, что если [math]|\tilde v - v| \le |\tilde v|[/math], то этого достаточно для того, чтобы у [math]\tilde v[/math] и [math]v[/math] был одинаковый знак. Проверяется это непосредственно, эта штука должна быть эквивалентна тому утверждению, что одномерный шар радиуса [math]|\tilde v - v|[/math] с центром в точке [math]\tilde v[/math] не пересекался с нулём. Нарисуйте картинку и всё осознаете. TODO: запилите рисунок, где есть 0, ось X, и на ней описанный шар!

Окей, у нас есть подобное условие. теперь раскроем [math]|\tilde v - v|[/math] по нашим определениям. Следующим шагом будет раскрытие знаков в кружочке (смотрите 23 слайд).

Следующий переход (на том же 23 слайде) скорей всего вам не понятен. Поясню, выражение [math]|\tilde v - v|[/math] перегруппировали таким образом, чтобы с помощью правил [math]|a - b| \le |a| + |b| [/math] и [math]|a*b| = |a|*|b| [/math] мы смогли оценить сверху [math]|\tilde v - v|[/math] именно таким образом, каким он там оценён.

Заметим, что выражение, обозванное в презенташке как [math]e[/math], вычисляется в операциях не компьютерных, а абсолютных. Это плохо, мы не умеем вычислять абсолютно :) Следующий шаг — оцениваем это выражение сверху в модели floating-point(кружочки!). Собственно, там куча промежуточных вычислений, которые я не могу пока привести. И в итоге (смотрите презентацию!) мы получим оценку погрешности вычисления нашей штуки.


TODO: пилить эту штуку до удобоваримого состояния.