Как найти вычислительную ошибку

Введение

Тема сегодняшнего урока посвящена тому, как найти вычислительную ошибку. Вы когда-нибудь ошибались в вычислениях? Не ошибается только тот, который ничего не делает. С другой стороны, из этого можно сделать один очень важный вывод: уметь искать свои ошибки не менее важно, чем решать задачу. Задача, решенная с ошибкой, и задача, не решенная вовсе, чаще всего будут значить одинаково, то есть ничего. Поэтому сегодня мы попробуем научиться отыскивать ошибки в своих вычислениях и исправлять.

Сразу возникает следующая проблема. Хорошо, когда вы уверены, что в вашем примере есть ошибка, и рано или поздно вы ее найдете. А вот как самому во время контрольной работы или экзамена догадаться, что в примере есть ошибка? Ведь можно час искать ошибку в примере, а потом выяснится, что ее нет. Сегодня мы познакомимся с некоторыми довольно простыми соображениями, которые позволяют проверять, есть ли в примере ошибка.

Метод последней цифры

Одно из таких соображений называется последняя цифра (или анализ последней цифры). Рассмотрим несколько примеров, иллюстрирующих данный подход.

Например:

1) 346757 + 23546 = 369575

Даже не считая в столбик можно сразу увидеть, что в этом примере есть ошибка, потому что если проверить по последним цифрам 7 + 6 = 13, то есть число должно оканчиваться на 3, а оканчивается на 5 – значит, где-то есть ошибка. Нужно вернуться к своим вычислениям и эту ошибку найти.

346757 + 23546  369575

2) 2465313 = 6546371

Можно сразу сказать, что в вычислении допущена ошибка. Почему? Потому что если перемножить последние цифры 5 и 3, то получается 15, число должно оканчиваться на 5, а у нас оканчивается на 1.

2465 313  6546371

3). 347 + 234  235 = 47806

Опять без подсчетов в столбик можно сказать, что здесь допущена ошибка. Как видите, этот пример содержит два действия. Попробуем сделать все действия с последними цифрами. Как вы помните, порядок действия у нас таков: сначала делаем умножение, потом сложение. Мы умножаем 4 на 5 – и получается 20, на конце числа должен стоять 0, к 0 прибавляем 7, должно получиться 7, а у нас на конце числа 6, значит, в примере допущена ошибка. Где именно, мы не знаем, может, была допущена ошибка в умножении или в сложении, но то, что ошибка есть, мы уже поняли.

347 + 234  235  47806

4) (345 4567 – 9873)  237 – 366 = 12948371

Первым действием мы 5 умножаем на 7 и получаем 35, на конце 5. Вторым действием вычитаем: 5 минус число, оканчивающееся на 3, и получаем 2 на конце. Умножаем это на 237, дважды семь – получаем 14, после третьего действия получаем на конце 4. Наконец, вычитаем из 14 число 6, получаем 8, которое должно стоять на конце. Значит, ответ 12948371 неправильный.

(345  4567 – 9873)  237 – 366  12948371

Нужно быть очень аккуратными, если в вашем выражении присутствует знак деления.

1) 28 : 4 = 7

Если разделить это выражение просто, то получится 7. С другой стороны, если мы попробуем проверить это равенство по методу последней цифры, 8 разделить на 4 равно 2, что не подходит к уравнению. Метод последней цифры к делению не применяется. Если по последней цифре все совпало, это еще ничего не значит. Это значит, что мы не нашли противоречия в данном случае, но ошибка все же может быть.

Например:

2) 2 2 = 14

Понятно, что это уравнение изначально неправильное, но, если проверить по последней цифре, два умножить на два будет 4, и у нас в конце уравнения стоит 4. Поэтому, если по последней цифре не сошлось, значит, в уравнении есть ошибка. Если же сошлось, это ничего не значит, может, ошибка есть, а может, и нет.

2 2  14

Итак, давайте подведем краткий итог первого метода. Если у вас решен пример на вычисление, который не содержит деления, а содержит только натуральные числа, то вы можете проверить себя, проделав все вычисления устно только с последними цифрами. Если результат сошелся, значит, с большой вероятностью, ошибки нет. Если же результат не сошелся, то ищем ошибку.

Метод округления

Давайте рассмотрим следующий пример: 143 147 = 221.

По проверке последней цифры, 3 умножить на 7, получаем 21, в конце числа 1, все в порядке, казалось бы, ошибки нет. С другой стороны, давайте сделаем простой предварительный подсчет. Если 100 умножить на 100, уже получится 10000, но у нас числа больше, чем 100, и мы получили в произведении только 221. Конечно, где-то закралась ошибка.

100  100 = 10000

143  147  221

Такая очень грубая прикидка, такое округление, позволяет нам понять, что пример решен неверно.

2) 2342 + 23426 = 234648

Опять же мы можем прикинуть по последней цифре и выяснить, что 2 плюс 6 – это 8, казалось бы, ошибки нет. С другой стороны, сделаем грубую прикидку: каждое число округлим до тысяч: 2 тысячи плюс 23 тысячи получается 25 тысяч, а в уравнении 234 тысячи. Значит, в примере где-то есть ошибка.

2000 + 23000 = 25000

3) 73462 – 2346 = 5362

Этот пример показателен тем, что вы можете найти ошибку, пользуясь и первым методом, и вторым. Действительно, если вычесть из 12 число 6, получаем 6, а в ответе последняя цифра 2. Уже неправильно. С другой стороны, давайте опять округлим до тысяч: 73 тысячи минус 2 тысячи получается 71 тысяча, а у нас примере 5 тысяч.

73000 – 2000 = 71000

4) 27  27 = 729

С последней цифрой все в порядке, семью семь – сорок девять, оканчивается на 9. Давайте сделаем округление: 30  30 = 900.

То есть ответ вроде правильный. Метод округления ошибку не выявляет. И этот пример действительно решен верно.

5) 342 + 253  175 = 306777

Обратите внимание, что с последней цифрой все в порядке: 3 умножить на 5 будет 15, то есть оканчивается на 5 плюс еще 2 – и будет 7. Но давайте снова округлим до сотен.

300 + 300  200 = 60300

Сами видите, что в левой части 60300, а в правой – 306 тысяч, равенство неверное. Значит, где-то допущена ошибка, при этом мы не знаем, где именно.

Таким образом, если мы хотим сделать проверку нашего примера с помощью прикидки или округления, мы должны сделать следующее: берем каждое число нашего примера и округляем его, то есть приравниваем его к ближайшему круглому числу. Проводим все вычисления с округленными числами и сравниваем тот ответ, который мы получаем с тем, который получился у нас в исходном примере. Естественно, ответы не должны полностью совпасть. Если они получились неравными, не паникуйте. Но они должны получиться близкими друг к другу. Если в примере ответ получился 102, а после округления ответ получился 1000000, значит, вы где-то ошиблись. Если же ответ у вас получился 102, а после округления 100, скорее всего, все правильно. Посмотрим еще на один пример: 33 ⋅ 33 = 1089.

Давайте округлим: 30  30 = 900. О чем же говорит такой ответ? Формально, как вы видите, у нас в ответе 4 цифры, а при округлении получилось 3 цифры. То есть вроде бы мы ошиблись на целый порядок, наверное, ошибка есть. Но, если вы присмотритесь к этим числам, вы увидите, что эти числа близки: 900 и 1000. Если вы видите, что разница в количестве цифр есть, но реально она не велика, возможно, никакого противоречия нет. В данном случае пример верный.

Еще один маленький совет. Если задача имеет какой-то практический смысл, старайтесь проверять, подходит ответ под этот смысл или нет. Например, если в задаче требуется найти скорость велосипедиста, а у вас после вычисления получилось 500 км/ч, скорее всего, вы ошиблись. Или предположим, вам нужно посчитать, сколько молока в литрах привезли на завод в сумме двух цистернах, а у вас получилось 3 литра. Наверное, это все-таки маловато для двух цистерн, так что тоже, скорее всего, у вас ошибка.

Итоги

Давайте подведем краткие итоги сегодняшнего урока. Сегодня мы познакомились с некоторыми методами, которые позволяют проверить, правильным ли получился ваш ответ. Эти методы не дают стопроцентной гарантии того, что вы отыщете ошибку. Даже если с помощью каждого из методов все получается в порядке, возможно, в примере есть ошибка. С другой стороны, проверка каждого из этих методов занимает не очень много времени, и поэтому, если даже в трех случаях из десяти какой-то из этих методов даст вам возможность найти ошибку, это уже будет хорошо.

Список рекомендованной литературы

  1. Гельфман Э. Г., Холодная О. В. Математика: учебник для 5 класса. – М.: БИНОМ. Лаборатория знаний. – 2012.
  2. Шварцбурд С. И. Внеклассная работа по математике в 4-5 классах. – М.: Просвещение. – 2012.
  3. Виленкин Н. Я., Жохов В. И. Математика. 5 класс, 31-е изд., стер. – М.: 2013.

Рекомендованные ссылки на ресурсы сети Интернет

  1. Интернет-портал «lifehacker.ru» (Источник)
  2. Интернет-портал «kp.ru» (Источник)
  3. Интернет-портал «5klass.net» (Источник)

Домашнее задание

  1. Каким методом вы обычно пользуетесь, что найти вычислительную ошибку в примере?
  2. В чем заключается метод последней цифры? Приведите пример.
  3. В чем заключается метод округления (прикидки)? Приведите пример.

Материал из MachineLearning.

Перейти к: навигация, поиск

Содержание

  • 1 Введение
    • 1.1 Постановка вопроса. Виды погрешностей
  • 2 Виды мер точности
  • 3 Предельные погрешности
  • 4 Погрешности округлений при представлении чисел в компьютере
  • 5 Погрешности арифметических операций
  • 6 Погрешности вычисления функций
  • 7 Числовые примеры
  • 8 Список литературы
  • 9 См. также

Введение

Постановка вопроса. Виды погрешностей

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

При переходе от математической модели к численному методу возникают погрешности, называемые погрешностями метода. Они связаны с тем, что всякий численный метод воспроизводит исходную математическую модель приближенно. Наиболее типичными погрешностями метода являются погрешность дискретизации и погрешность округления.
При построении численного метода в качестве аналога исходной математической задачи обычно рассматривается её дискретная модель. Разность решений дискретизированной задачи и исходной называется погрешностью дискретизации. Обычно дискретная модель зависит от некоторого параметра (или их множества) дискретизации, при стремлении которого к нулю должна стремиться к нулю и погрешность дискретизации.
Дискретная модель представляет собой систему большого числа алгебраических уравнений. Для её решения используется тот или иной численный алгоритм. Входные данные этой системы, а именно коэффициенты и правые части, задаются в ЭВМ не точно, а с округлением. В процессе работы алгоритма погрешности округления обычно накапливаются, и в результате, решение, полученное на ЭВМ, будет отличаться от точного решения дискретизированной задачи. Результирующая погрешность называется погрешностью округления (вычислительной погрешностью). Величина этой погрешности определяется двумя факторами: точностью представления вещественных чисел в ЭВМ и чувствительностью данного алгоритма к погрешностям округления.

Итак, следует различать погрешности модели, дискретизации и округления. В вопросе преобладания какой-либо погрешности ответ неоднозначен. В общем случае нужно стремиться, чтобы все погрешности имели один и тот же порядок. Например, нецелесообразно пользоваться разностными схемами, имеющими точность 10−6, если коэффициенты исходных уравнений задаются с точностью 10−2.

Виды мер точности

Мерой точности вычислений являются абсолютные и относительные погрешности. Абсолютная погрешность определяется формулой

\Delta(\tilde a)=|\tilde a-a|,

где \tilde a – приближение к точному значению a.
Относительная погрешность определяется формулой

\delta(\tilde a)=\frac{|\tilde a-a|}{a}.

Относительная погрешность часто выражается в процентах. Абсолютная и относительная погрешности тесно связаны с понятием верных значащих цифр. Значащими цифрами числа называют все цифры в его записи, начиная с первой ненулевой цифры слева. Например, число 0,000129 имеет три значащих цифры. Значащая цифра называется верной, если абсолютная погрешность числа не превышает половины веса разряда, соответствующего этой цифре. Например, \tilde a=9348, абсолютная погрешность \Delta(\tilde a)=15. Записывая число в виде

9348=9\cdot10^3+3\cdot10^2+4\cdot10^1+8\cdot10^0,

имеем 0,5\cdot10^1<\Delta(\tilde a)<0,5\cdot10^2, следовательно, число имеет две верных значащих цифр (9 и 3).

В общем случае абсолютная погрешность должна удовлетворять следующему неравенству:

\Delta(\tilde a)<0,5\cdot10^{m-n+1} ,

где m — порядок (вес) старшей цифры, n — количество верных значащих цифр.
В рассматриваемом примере \Delta(\tilde a)\le0,5\cdot10^{3-2+1}\le0,5\cdot10^2=50.

Относительная погрешность связана с количеством верных цифр приближенного числа соотношением:

\delta(\tilde a)\le\frac{\Delta(\tilde a)}{\alpha_m}10^m\le\frac{10^{m-n+1}}{\alpha_m10^m}\le\frac{1}{\alpha_m10^{n-1}},

где \alpha_m — старшая значащая цифра числа.

Для двоичного представления чисел имеем \delta(\tilde a)\le2^{-n}.

Тот факт, что число \tilde a является приближенным значением числа a с абсолютной погрешностью \Delta(\tilde a), записывают в виде

a=\tilde a\pm\Delta(\tilde a),

причем числа \tilde a и \Delta(\tilde a) записываются с одинаковым количеством знаков после запятой, например, a=2,347\pm0,002 или a=2,347\pm2\cdot10^{-3}.

Запись вида

a=\tilde a(1\pm\delta(\tilde a))

означает, что число \tilde a является приближенным значение числа a с относительной погрешностью \delta(\tilde a).

Так как точное решение задачи как правило неизвестно, то погрешности приходится оценивать через исходные данные и особенности алгоритма. Если оценка может быть вычислена до решения задачи, то она называется априорной. Если оценка вычисляется после получения приближенного решения задачи, то она называется апостериорной.

Очень часто степень точности решения задачи характеризуется некоторыми косвенными вспомогательными величинами. Например точность решения системы алгебраических уравнений

AX=F

характеризуется невязкой

R=F-A\tilde X,

где \tilde X — приближенное решение системы.
Причём невязка достаточно сложным образом связана с погрешностью решения \Delta(X)=\tilde X-X, причём если невязка мала, то погрешность может быть значительной.

Предельные погрешности

Пусть искомая величина a является функцией параметров t_1, \ldots , t_n \in \Omega, \qquad a* — приближенное значение a. Тогда предельной абсолютной погрешностью называется величина

D(a^*) = \sup\limits_{(t_1, \ldots ,t_n) \in \Omega } \left|{a(t_1, \ldots ,t_n) - a^*}\right| ,

Предельной относительной погрешностью называется величина D(a*)/| a*|.

Пусть  \left|{t_j - t_j^*}\right| \le \Delta (t_j^* ), \qquad j = 1 \div n — приближенное значение a^* = a(t_1^*, \ldots ,t_n^* ). Предполагаем, что a — непрерывно дифференцируемая функция своих аргументов. Тогда, по формуле Лагранжа,

a(t_1, \ldots ,t_n) - a^* = \sum\limits_{j = 1}^n \gamma_j (\alpha )(t_j - t_j^*),

где \gamma_j (\alpha ) = a^{\prime}_{t_j}(t_1^* + \alpha (t_1 - t_1^*), \ldots ,t_n^* + \alpha (t_n - t_n^*)), \qquad 0 \le \alpha \le 1 .

Отсюда

\left|{a(t_1, \ldots ,t_n) - a^*}\right| \le D_1 (a^*) = \sum\limits_{j = 1}^n b_j \Delta (t_j^*),

где b_j = \sup\limits_\Omega \left|{a^{\prime}_{t_j}(t_1, \ldots ,t_n)}\right|.

Можно показать, что при малых \rho = \sqrt{{(\Delta (t_1^* ))}^2 + \ldots + {(\Delta (t_n^* ))}^2 } эта оценка не может быть существенно улучшена. На практике иногда пользуются грубой (линейной) оценкой

\left|{a(t_1, \ldots ,t_n) - a^*}\right| \le D_2 (a^*),

где D_2 (a^*) = \sum\limits_{j = 1} \left|{\gamma_j (0)}\right| \Delta (t^*) .

Несложно показать, что:

  1. \Delta ( \pm t_1^* \pm , \ldots , \pm t_n^*) = \Delta (t_1^* ) + \ldots + \Delta (t_n^* ) — предельная погрешность суммы или разности равна сумме предельных погрешностей.
  2. \delta (t_1^* \cdots t_m^* \cdot d_1^{* - 1} \cdots d_m^{* - 1} ) = \delta (t_1^* ) + \ldots + \delta (t_m^*) + \delta (d_1^*) + \ldots + \delta (d_n^*) — предельная относительная погрешность произведения или частного приближенного равна сумме предельных относительных погрешностей.

Погрешности округлений при представлении чисел в компьютере

Одним из основных источников вычислительных погрешностей является приближенное представление чисел в компьютере, обусловленное конечностью разрядной сетки (см. Международный стандарт представления чисел с плавающей точкой в ЭВМ). Число a, не представимое в компьютере, подвергается округлению, т. е. заменяется близким числом \tilde a, представимым в компьютере точно.
Найдем границу относительной погрешности представления числа с плавающей точкой. Допустим, что применяется простейшее округление – отбрасывание всех разрядов числа, выходящих за пределы разрядной сетки. Система счисления – двоичная. Пусть надо записать число, представляющее бесконечную двоичную дробь

a=\underbrace{\pm2^p}_{order}\underbrace{\left(\frac{a_1}{2}+\frac{a_2}{2^2}+\dots+\frac{a_t}{2^t}+\frac{a_{t+1}}{2^{t+1}}+\dots\right)}_{mantissa},

где a_j=\{0\\1, \qquad (j=1,2,...) — цифры мантиссы.
Пусть под запись мантиссы отводится t двоичных разрядов. Отбрасывая лишние разряды, получим округлённое число

\tilde a=\pm2^p\left(\frac{a_1}{2}+\frac{a_2}{2^2}+\dots+\frac{a_t}{2^t}\right).

Абсолютная погрешность округления в этом случае равна

a-\tilde a=\pm2^p\left(\frac{a_{t+1}}{2^{t+1}}+\frac{a_{t+2}}{2^{t+2}}+\dots\right).

Наибольшая погрешность будет в случае a_{t+1}=1, \qquad a_{t+2}=1,, тогда

|a-\tilde a|\le\pm2^p\frac{1}{2^{t+1}}\underbrace{\left(1+\frac{1}{2}+\frac{1}{2^2}+\dots\right)}_{=2}=2^{p-t}.

Т.к. |M|\ge0,5, где M — мантисса числа a, то всегда a_1=1. Тогда |a|\ge2^p\cdot2^{-1}=2^{p-1} и относительная погрешность равна \frac{|a-\tilde a|}{|a|}\le2^{-t+1}. Практически применяют более точные методы округления и погрешность представления чисел равна

( 1 )

\frac{|a-\tilde a|}{|a|}\le2^{-t},

т.е. точность представления чисел определяется разрядностью мантиссы t.
Тогда приближенно представленное в компьютере число можно записать в виде \tilde a=a(1\pm\epsilon), где |\epsilon|\le2^{-t}«машинный эпсилон» – относительная погрешность представления чисел.

Погрешности арифметических операций

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

Округленное в системе с плавающей точкой число, соответствующее точному числу x, обозначается через fl(x) (от англ. floating – плавающий). Выполнение каждой арифметической операции вносит относительную погрешность, не большую, чем погрешность представления чисел с плавающей точкой (1). Верна следующая запись:

fl(a\box b)=a\box b(1\pm\epsilon),

где \box — любая из арифметических операций, |\epsilon|\le2^{-t}.

Рассмотрим трансформированные погрешности арифметических операций. Арифметические операции проводятся над приближенными числами, ошибка арифметических операций не учитывается (эту ошибку легко учесть, прибавив ошибку округления соответствующей операции к вычисленной ошибке).

Рассмотрим сложение и вычитание приближенных чисел. Абсолютная погрешность алгебраической суммы нескольких приближенных чисел равна сумме абсолютных погрешностей слагаемых.

Если сумма точных чисел равна

S=a_1+a_2+\dots+a_n,

сумма приближенных чисел равна

\tilde S=a_1+\Delta(a_1)+a_2+\Delta(a_2)+\dots+a_n+\Delta(a_n),

где \Delta(a_i), \qquad i=1,2,...,n— абсолютные погрешности представления чисел.

Тогда абсолютная погрешность суммы равна

\Delta(S)=\Delta(a_1)+\Delta(a_2)+\dots+\Delta(a_n).

Относительная погрешность суммы нескольких чисел равна

( 2 )

\delta(S)=\frac{\Delta(S)}{S}=\frac{a_1}{S}\left(\frac{\Delta(a_1)}{a_1}\right)+\frac{a_2}{S}\left(\frac{\Delta(a_2)}{a_2}\right)+\dots=\frac{a_1\delta(a_1)+a_2\delta(a_2)+\dots}{S},

где \delta(a_i), \qquad i=1,2,...,n — относительные погрешности представления чисел.

Из (2) следует, что относительная погрешность суммы нескольких чисел одного и того же знака заключена между наименьшей и наибольшей из относительных погрешностей слагаемых:

min \quad \delta(a_k)\le\delta(S)\le max \quad \delta(a_k), \qquad k=1,2,...,n, \quad a_k>0.

При сложении чисел разного знака или вычитании чисел одного знака относительная погрешность может быть очень большой (если числа близки между собой). Так как даже при малых \Delta(a_i) величина S может быть очень малой. Поэтому вычислительные алгоритмы необходимо строить таким образом, чтобы избегать вычитания близких чисел.

Необходимо отметить, что погрешности вычислений зависят от порядка вычислений. Далее будет рассмотрен пример сложения трех чисел.

S=x_1+x_2+x_3,
\tilde S_1=(x_1+x_2)(1+\delta_1),

( 3 )

\tilde S=(\tilde S_1+x_3)(1+\delta_2)=(x_1+x_2)(1+\delta_1)(1+\delta_2)+x_3(1+\delta_2).

При другой последовательности действий погрешность будет другой:

\tilde S_1=(x_3+x_2)(1+\delta_1),
\tilde S=(x_3+x_2)(1+\delta_1)(1+\delta_2)+x_1(1+\delta_2).

Из (3) видно, что результат выполнения некоторого алгоритма, искаженный погрешностями округлений, совпадает с результатом выполнения того же алгоритма, но с неточными исходными данными. Т.е. можно применять обратный анализ: свести влияние погрешностей округления к возмущению исходных данных. Тогда вместо (3) будет следующая запись:

\tilde S=\tilde x_1+\tilde x_2+\tilde x_3,

где \tilde x_1=x_1(1+\delta_1)(1+\delta_2), \quad \tilde x_2=x_2(1+\delta_1)(1+\delta_2), \quad \tilde x_3=x_3(1+\delta_2).

При умножении и делении приближенных чисел складываются и вычитаются их относительные погрешности.

S=a_1\cdot a_2,
\tilde S=a_1\cdot a_2(1+\delta(a_1))(1+\delta(a_2))a_1\cdot a_2(1+\delta(a_1)+\delta(a_2)),

с точностью величин второго порядка малости относительно \delta.

Тогда \delta(S)=\delta(a_1)+\delta(a_2).

Если S=\frac{a_1}{a_2}, то \Delta(S)=\frac{a_1(1+\delta_1)}{a_2(1+\delta_2)}-\frac{a_1}{a_2}=\frac{a_1(\delta_1-\delta_2)}{a_2(1+\delta_2)}\approx \frac{a_1}{a_2}(\delta_1-\delta_2), \qquad \delta(S)  \delta_1-\delta_2.

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

\delta_\Sigma \approx \delta_{fl} \quad \sqrt{n},

где \delta_\Sigma – суммарная погрешность, |\delta_{fl}|\le\epsilon – погрешность выполнения операций с плавающей точкой, \epsilon – погрешность представления чисел с плавающей точкой.

Погрешности вычисления функций

Рассмотрим трансформированную погрешность вычисления значений функций.

Абсолютная трансформированная погрешность дифференцируемой функции y=f(x), вызываемая достаточно малой погрешностью аргумента \Delta(x), оценивается величиной \Delta(y)=\|f'(x)\|\Delta(x).

Если f(x)>0, то \delta(y)=\frac{\|f'(x)\|}{f(x)}\Delta(x)=\left|(ln(f(x)))'\right|\cdot\Delta(x).

Абсолютная погрешность дифференцируемой функции многих аргументов y=f(x_1, x_2, ..., x_n), вызываемая достаточно малыми погрешностями \Delta(x_1), \Delta(x_2), ..., \Delta(x_n) аргументов x_1, x_2, ...,x_n оценивается величиной:

\Delta(y)=\sum\limits_{i=1}^n\left|\frac{\partial f}{\partial x_i}\right|\Delta(x_i).

Если f(x_1,x_2,...,x_n)>0, то \delta(y)=\sum\limits_{i=1}^n\frac{1}{f}\cdot\left|\frac{\partial f}{\partial x_i}\right|\cdot\Delta(x_i)=\sum\limits_{i=1}^{n}\left|\frac{\partial l_n(f)}{\partial x_i}\right|\Delta(x_i).

Практически важно определить допустимую погрешность аргументов и допустимую погрешность функции (обратная задача). Эта задача имеет однозначное решение только для функций одной переменной y=f(x), если f(x) дифференцируема и f'(x)\not=0:

\Delta(x)=\frac{1}{\|f'(x)\|}\Delta(y).

Для функций многих переменных задача не имеет однозначного решения, необходимо ввести дополнительные ограничения. Например, если функция y=f(x_1,x_2,...,x_n) наиболее критична к погрешности \Delta(x_i), то:

\Delta(x_i)=\frac{\Delta(y)}{\left|\frac{\partial f}{\partial x_i}\right|}\qquad (погрешностью других аргументов пренебрегаем).

Если вклад погрешностей всех аргументов примерно одинаков, то применяют принцип равных влияний:

\Delta(x_i)=\frac{\Delta(y)}{n\left|\frac{\partial f}{\partial x_i}\right|},\qquad i=\overline{1,n}.

Числовые примеры

Специфику машинных вычислений можно пояснить на нескольких элементарных примерах.

ПРИМЕР 1. Вычислить все корни уравнения

x^4 - 4x^3 + 8x^2 - 16x + 15.\underbrace{99999999}_8 = {(x - 2)}^4 - 10^{- 8} = 0.

Точное решение задачи легко найти:

(x - 2)^2  =  \pm 10^{- 4},
x_1= 2,01;  x_2= 1,99;  x_{3,4}= 2 \pm 0,01i.

Если компьютер работает при \delta _M > 10^{ - 8}, то свободный член в исходном уравнении будет округлен до 16,0 и, с точки зрения представления чисел с плавающей точкой, будет решаться уравнение (x-2)^4= 0, т.е. x_{1,2,3,4} = 2, что, очевидно, неверно. В данном случае малые погрешности в задании свободного члена \approx10^{-8} привели, независимо от метода решения, к погрешности в решении \approx10^{-2}.

ПРИМЕР 2. Решается задача Коши для обыкновенного дифференциального уравнения 2-го порядка:

u''(t) = u(t), \qquad u(0) = 1, \qquad u'(0) = - 1.

Общее решение имеет вид:

u(t) = 0,5[u(0) + u'(0)]e^t  + 0,5[u(0) - u'(0)]e^{- t}.

При заданных начальных данных точное решение задачи: u(x) = e^{-t}, однако малая погрешность \delta в их задании приведет к появлению члена \delta e^t, который при больших значениях аргумента может существенно исказить решение.

ПРИМЕР 3. Пусть необходимо найти решение обыкновенного дифференциального уравнения:

\stackrel{\cdot}{u} = 10u,\qquad u = u(t),\\ u(t_0) = u_0,\qquad t \in [0,1].

Его решение: u(t) = u_0e^{10(t - t_0 )}, однако значение u(t_0) известно лишь приближенно: u(t_0) \approx u_0^*, и на самом деле u^*(t) = u_0^*e^{10(t - t_0)}.

Соответственно, разность u* - u будет:

u^* - u = (u_0^* - u_0)e^{10(t - t_0)}.

Предположим, что необходимо гарантировать некоторую заданную точность вычислений \epsilon > 0 всюду на отрезке t \in [0,1]. Тогда должно выполняться условие:

|{u^*(t) - u(t)}| \le \varepsilon.

Очевидно, что:

\max\limits_{t \in [0,1]} |{u^*(t) - u(t)}| = |{u*(1) - u(1)}| = |{u_0^* - u_0}|e^{10(1 - t_0)}.

Отсюда можно получить требования к точности задания начальных данных \delta: \qquad|u_0^* - u_0| < \delta, \qquad \delta \le \varepsilon e^{ - 10} при t_0= 0.

Таким образом, требование к заданию точности начальных данных оказываются в e^{10} раз выше необходимой точности результата решения задачи. Это требование, скорее всего, окажется нереальным.

Решение оказывается очень чувствительным к заданию начальных данных. Такого рода задачи называются плохо обусловленными.

ПРИМЕР 4. Решением системы линейных алгебраических уравнений (СЛАУ):

\left\{ \begin{array}{l} u + 10v = 11, \\ 100u + 1001v = 1101; \\ \end{array} \right.

является пара чисел \{1, \quad 1\}.

Изменив правую часть системы на 0,01, получим возмущенную систему:

\left\{ \begin{array}{l} u + 10v = 11.01, \\ 100u + 1001v = 1101; \\ \end{array} \right.

с решением \{11.01, \quad 0.00\}, сильно отличающимся от решения невозмущенной системы. Эта система также плохо обусловлена.

ПРИМЕР 5. Рассмотрим методический пример вычислений на модельном компьютере, обеспечивающем точность \delta_M = 0,0005. Проанализируем причину происхождения ошибки, например, при вычитании двух чисел, взятых с точностью до третьей цифры после десятичной точки u = 1,001,\quad v = 1,002, разность которых составляет \Delta = |v_M - u_M| = 0,001.

В памяти машины эти же числа представляются в виде:

u_M = u(1 + \delta_M^u), \quad v_M = v(1 + \delta_M^v), причем  \mid \delta_M^u\mid \le \delta_M и \mid \delta_M^v\mid \le \delta_M.

Тогда:

u_M - u \approx u\delta_M^u, \quad v_M - v \approx v\delta_M^v.

Относительная ошибка при вычислении разности u_M - v_M будет равна:

 \delta = \frac{(u_M - v_M) - (u - v)}{(u - v)} = \frac{(u_M - u) - (v_M - v)}{(u - v)} = \frac{\delta_M^u - \delta_M^v}{(u - v)}.

Очевидно, что  \delta = \left|{\frac{\delta_M^u - \delta_M^v}{\Delta }} \right| \le \frac{2\delta_M}{0,001} \approx 2000\delta_M = 1, т.е. все значащие цифры могут оказаться неверными.

ПРИМЕР 6. Рассмотрим рекуррентное соотношение u_{i+1} = qu_i, \quad i \ge 0, \quad u_0 = a,\quad q > 0, \quad u_i > 0.

Пусть при выполнении реальных вычислений с конечной длиной мантиссы на i-м шаге возникла погрешность округления, и вычисления проводятся с возмущенным значением u_i^M = u_i + \delta_i, тогда вместо u_{i+1} получим u_{i + 1}^M = q(u_i + \delta_i) = u_{i + 1} + q\delta_i, т.е. \delta_{i + 1} = q\delta_i,\quad i = 0,1,\ldots .

Следовательно, если |q| > 1, то в процессе вычислений погрешность, связанная с возникшей ошибкой округления, будет возрастать (алгоритм неустойчив). В случае \mid q\mid \le 1 погрешность не возрастает и численный алгоритм устойчив.

Список литературы

  • А.А.Самарский, А.В.Гулин.  Численные методы. Москва «Наука», 1989.
  • http://www.mgopu.ru/PVU/2.1/nummethods/Chapter1.htm
  • http://www.intuit.ru/department/calculate/calcmathbase/1/4.html

См. также

  • Практикум ММП ВМК, 4й курс, осень 2008

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

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

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

В
машинных вычислениях участвуют числа
двух типов: целые числа и вещественные
числа (так называемые числа с «плавающей
запятой»). В отличие от общепринятой
арифметики с десятичной системой
исчисления работа компьютеров основана
на двоичной системе чисел, т.е. в виде
последовательностей нулей и единиц,
при этом всегда для представления любого
числа в памяти компьютера выделяется
строго ограниченное количество разрядов.
В частности, языке программирования
Турбо-Паскаль для целых чисел типа byte
выделяется
один байт машинной памяти, поэтому
переменные данного типа могут принимать
значения в диапазоне от 0 до 28-1=255.
Для хранения целых чисел типа word
и
integer
выделяются 2 байта памяти, поэтому для
типа word,
в котором могут быть представлены только
неотрицательные числа, диапазон
допустимых значений ограничен величинами
от 0 до 216-1=65535.
Числа типа integer
могут
быть положительными или отрицательными,
их диапазон ограничен значениями от
до.
Если работать с целыми числами, далекими
от границ числовой области компьютера,
то машинная арифметика дает правильные
результаты, например 5+7=12, 8-27=-19, 273=81
и т.д. Деление целых чисел снова приводит
к целому числу, а в качестве результата
операции принимается частное, а остаток
отбрасывается. Это означает, что
и т.д.

Если
результат операции над целыми числами
слишком велик или слишком мал для данного
типа переменных, то при отсутствии
контроля за превышением допустимого
диапазона результат будет заменен по
циклическому правилу. Например, если
переменным a
и b
присвоить тип byte,
переменной a
присвоить значение a=255
, а переменной b
– значение b=a+1,
то компьютер выдаст результат: b=0,
при b=a+2
получим b=1
и т.д. Если a
и b
отнести к переменным типа integer
и присвоить a=32767,
то при b=a+1
получим b=-32768,
при b=a+2

b=-32767.
Эти ошибки не будут замечены, и программа
продолжит дальнейшую работу с неверными
значениями переменных.

Если
в программе предусматривается проверка
переполнения допустимого диапазона
переменных, то при выходе значения за
пределы диапазона на экран выводится
сообщение об ошибке, а работа программы
приостанавливается.

Десятичные
числа вещественного типа с «плавающей
запятой» представляются в виде
.
Числоa
называется мантиссой, а b
– показателем. Обычно число b
целое, а у числа a
слева от десятичной запятой находится
только один знак. У обоих чисел a
и b
количество разрядов конечно, поэтому
имеется лишь конечное множество чисел
с плавающей запятой и, в частности,
существуют наибольшие и наименьшие
числа с плавающей запятой.

Если
результат операции превышает наибольшее
значение, то происходит переполнение
выделенных ячеек памяти, и работа
программы на этом прекращается. Если
результатом операции является число,
слишком близкое к нулю, то происходит
исчезновение порядка. Компьютер заменяет
результат нулем без какого-либо сообщения
об этой операции. Во многих случаях
подобная замена не приводит к появлению
заметных погрешностей в окончательном
результате, однако, иногда подобные
округления при операциях умножения и
последующего деления, сложения или
вычитания малых по абсолютной величине
чисел могут вызвать принципиальные
ошибки результатов вычислений.

Наибольшее
значение, при котором происходит
обнуление результата, называется
машинным нулем. Эта величина зависит
от типа переменных, с которыми производятся
операции, численного значения переменных
и типа компьютера. Для оценки погрешности
округления используется понятие
машинного эпсилон маш,
численно равного наименьшему числу,
которое при сложении с вещественным
числом 1 дает результат, больший чем 1.
Величину маш
можно определить с помощью следующей
программы:

Program
Nul;

var

x, eps: real{single, double, extended};

BEGIN

eps:=1;

repeat

eps:=eps/2;

x:=1+eps;

until
x<=1;

writeln(‘eps=’,eps);

readln;

END.

В
табл.1.1. приведены результаты тестирования
компьютера Pentium
с различными типами данных при операции
сложения x=A+0.

Таблица
1.1.

Результаты
вычисления машинного нуля 0

Тип
переменных

А

1

2

100

single

5,9610-8

1,1910-7

3,8210-6

real

4,5510-13

9,0510-13

2,9110-11

double

1,1110-16

2,2210-16

7,1110-15

Extended

5,4210-20

1,0810-19

3,4710-18

Наличие
машинного эпсилон проявляется следующим
образом. Например, запись вещественного
числа 0,3
в память компьютера сопряжена с ошибкой,
поскольку величина 0,3
не имеет точного двоичного представления
в системе вещественных чисел с плавающей
запятой. Поэтому сумма десяти шагов
длиной 0,3
не будет точно равна одному шагу длиной
3,0.
Подобные малые ошибки при длительных
расчетах могут накапливаться и приводить
к более заметным суммарным ошибкам.

Погрешность
представления вещественного числа в
программе локализуется в последнем
бите памяти. Более серьезные последствия
может вызвать неудачное использование
вычислительных алгоритмов.

Рассмотрим
пример вычисления значений функции
.
Эта функция может быть представлена
как сумма бесконечного ряда

. (1.1)

В
практических расчетах всегда ограничиваются
только несколькими членами ряда,
отбрасывая величины, не влияющие на
окончательный результат. В табл.1.2 и 1.3
приведены точные значения функции и
результаты вычисления с помощью ряда
различной длины для некоторых значений
параметров.

Таблица
1.2

Точные
и рассчитанные с помощью ряда значения
функции y=ex
при
представлении вещественных чисел типом
real.

X

Точное

Значение
y=ex

Длина
ряда

для
всех х

при
x0;

при
x<0.

50

100

500

50

-30

9,35810-14

8,782108

-2,58810-1

-2,58810-1

9,36010-14

-20

2,06110-9

1,047100

3,50510-5

3,50510-5

2,06110-9

-10

4,54010-5

4,54010-5

4,54010-5

4,54010-5

4,54010-5

0

1

1

1

1

1

10

2,203104

2,203104

2,203104

2,203104

2,203104

20

4,852108

4,852108

4,852108

4,852108

4,852108

30

1,0691013

1,0681013

1,0691013

1,0691013

1,0681013

В
диапазоне значений [-10,+30] при 50 членах
ряда рассчитанные по (1.1) значения
практически полностью совпадают с
точными, определенными по более сложному
алгоритму. Однако при x=-20
ошибка расчета составляет 9 порядков,
а при x=-30
— 22 порядка. Увеличение длины ряда до
100 членов снижает расхождения между
точными и расчетными значениями, но не
приводит к точному результату. Дальнейшее
увеличение длины ряда до 500 членов не
оказывает заметного влияния на результаты
расчета.

Представление
вещественных чисел типом extended
с
19-20 значащими цифрами позволяет при 100
членах ряда получить практически точное
значение для x=-20,
однако при x=-30
ошибка вычисления составляет 6 порядков.
Эта погрешность сохраняется при
дальнейшем увеличении длины ряда.

Таблица
1.3

Точные
и рассчитанные с помощью ряда значения
функции y=ex
при
представлении вещественных чисел типом
extended.

X

Точное

Значение
y=ex

Длина
ряда

для
всех х

при
x0;

при
x<0.

50

100

500

50

-30

9,35810-14

8,782108

-5,73610-8

-5,73610-8

9,36010-14

-20

2,06110-9

1,047100

2,06010-9

2,06010-9

2,06110-9

-10

4,54010-5

4,54010-5

4,54010-5

4,54010-5

4,54010-5

0

1

1

1

1

1

10

2,203104

2,203104

2,203104

2,203104

2,203104

20

4,852108

4,852108

4,852108

4,852108

4,852108

30

1,0691013

1,0681013

1,0691013

1,0691013

1,0681013

Результаты
расчета показывают, что вычисление
функции с помощью ряда хорошо приближается
к точным значениям при положительных
значениях аргумента, но дает неустранимые
и существенные погрешности при
отрицательных значениях. Увеличить
точность вычислительного алгоритма
можно достаточно просто, используя для
отрицательных аргументов формулу

. (1.2)

Вычисленные
по этому ряду значения приведены в
правых столбцах табл. 1.2 и 1.3.

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

Из
приведенных выше примеров следует, что
разработку компьютерных вычислительных
программ нельзя рассматривать как чисто
формальную процедуру. Каждая программа
должна учитывать конкретные особенности
реальной задачи, содержать блоки,
контролирующие вычислительный процесс
(вывод промежуточных результатов
расчета, контроль за переполнением
допустимых диапазонов чисел, оценка
погрешностей приближенных вычислений
и т.д.), и пройти проверку на тестовой
задаче перед решением основной.


Загрузить PDF


Загрузить PDF

Абсолютная ошибка – это разность между измеренным значением и фактическим значением.[1]
Эта ошибка характеризует точность измерений. Если вам известны фактическое и измеренное значения, можно с легкостью вычислить абсолютную ошибку. Но иногда фактическое значение не дано, поэтому в качестве абсолютной ошибки пользуются максимально возможной ошибкой.[2]
Если даны фактическое значение и относительная ошибка, можно вычислить абсолютную ошибку.

  1. Изображение с названием Calculate Absolute Error Step 1

    1

    Запишите формулу для вычисления абсолютной ошибки. Формула: \Delta x=x_{{0}}-x, где \Delta x – абсолютная ошибка (разность между измеренным и фактическим значениями), x_{{0}} – измеренное значение, x – фактическое значение.[3]

  2. Изображение с названием Calculate Absolute Error Step 2

    2

    Подставьте в формулу фактическое значение. Фактическое значение должно быть дано; в противном случае используйте принятое опорное значение. Фактическое значение подставьте вместо x.

    • Например, нужно измерить длину футбольного поля. Фактическая длина (принятая опорная длина) футбольного поля равна 105 м (именно такое значение рекомендуется FIFA). Таким образом, фактическое значение равно 105 м: \Delta x=x_{{0}}-105.
  3. Изображение с названием Calculate Absolute Error Step 3

    3

    Подставьте в формулу измеренное значение. Оно будет дано; в противном случае измерьте величину (длину или ширину и так далее). Измеренное значение подставьте вместо x_{0}.

    • Например, вы измерили длину футбольного поля и получили значение 104 м. Таким образом, измеренное значение равно 104 м: \Delta x=104-105.
  4. Изображение с названием Calculate Absolute Error Step 4

    4

    Вычтите фактическое значение из измеренного значения. Так как абсолютная ошибка всегда положительна, возьмите абсолютное значение этой разницы, то есть не учитывайте знак «минус».[4]
    Так вы вычислите абсолютную ошибку.

    • В нашем примере: \Delta x=104-105=-1, то есть абсолютная ошибка измерения равна 1 м.

    Реклама

  1. Изображение с названием Calculate Absolute Error Step 5

    1

    Запишите формулу для вычисления относительной ошибки. Формула: \delta x={\frac  {x_{{0}}-x}{x}}, где \delta x – относительная ошибка (отношение абсолютной ошибки к фактическому значению), x_{{0}} – измеренное значение, x – фактическое значение.[5]

  2. Изображение с названием Calculate Absolute Error Step 6

    2

    Подставьте в формулу относительную ошибку. Скорее всего, она будет дана в виде десятичной дроби. Относительную ошибку подставьте вместо \delta x.

    • Например, если относительная ошибка равна 0,02, формула запишется так: 0,02={\frac  {x_{{0}}-x}{x}}.
  3. Изображение с названием Calculate Absolute Error Step 7

    3

    Подставьте в формулу фактическое значение. Оно будет дано. Фактическое значение подставьте вместо x.

    • Например, если фактическое значение равно 105 м, формула запишется так: 0,02={\frac  {x_{{0}}-105}{105}}.
  4. Изображение с названием Calculate Absolute Error Step 8

    4

    Умножьте обе стороны уравнения на фактическое значение. Так вы избавитесь от дроби.

  5. Изображение с названием Calculate Absolute Error Step 9

    5

    Прибавьте фактическое значение к каждой стороне уравнения. Так вы найдете x_{{0}}, то есть измеренное значение.

  6. Изображение с названием Calculate Absolute Error Step 10

    6

    Вычтите фактическое значение из измеренного значения. Так как абсолютная ошибка всегда положительна, возьмите абсолютное значение этой разницы, то есть не учитывайте знак «минус».[6]
    Так вы вычислите абсолютную ошибку.

    • Например, если измеренное значение равно 107,1 м, а фактическое значение равно 105 м, вычисления запишутся так: 107,1-105=2,1. Таким образом, абсолютная ошибка равна 2,1 м.

    Реклама

  1. Изображение с названием Calculate Absolute Error Step 11

    1

    Определите единицу измерения. То есть выясните, было ли значение измерено с точностью до сантиметра, метра и так далее. Возможно, эта информация будет дана (например, «длина поля измерена с точностью до метра»). Чтобы определить единицу измерения, посмотрите на то, как округлено данное значение.[7]

    • Например, если измеренная длина поля равна 106 м, значение было округлено до метров. Таким образом, единица измерения равна 1 м.
  2. Изображение с названием Calculate Absolute Error Step 12

    2

  3. Изображение с названием Calculate Absolute Error Step 13

    3

    Используйте максимально возможную ошибку в качестве абсолютной ошибки.[9]
    Так как абсолютная ошибка всегда положительна, возьмите абсолютное значение этой разницы, то есть не учитывайте знак «минус».[10]
    Так вы вычислите абсолютную ошибку.

    • Например, если измеренная длина поля равна 106\pm 0,5 м, то есть абсолютная ошибка равна 0,5 м.

    Реклама

Советы

  • Если фактическое значение не указано, найдите принятое опорное или теоретическое значение.

Реклама

Об этой статье

Эту страницу просматривали 26 271 раз.

Была ли эта статья полезной?

Понравилась статья? Поделить с друзьями:
  • Как называют человека который придирается к ошибкам
  • Как найти вероятность ошибки первого рода
  • Как найти ошибки ваз 2114
  • Как называют умышленную логическую ошибку
  • Как найти относительную ошибку опыта