Основные источники погрешностей:
1. Погрешность математической модели.
Любая задача есть модель какого-то явления. Всякая модель – это объект более простой, чем реальный. Модель – это приближенное описание реального объекта, т.е. содержит погрешности.
2. Погрешности исходных данных.
Данные могут оказаться неточными.
3. Погрешности метода решения.
Численные методы заменяют задачу на близкую. Например, вместо интегрирования – суммирование, вместо дифференцирования – вычисление конечно-разностных отношений. В результате вместо точного решения исходной задачи получаем приближенное решение преобразованной задачи.
4. Погрешности округлений при выполнении арифметических операций.
В рамках численных методов погрешности 1. и 2. являются неустранимыми.
Пример. Рассмотрим многочлен
Очевидно, его корнями являются
С помощью встроенных в MATLAB функций легко убедиться, что корни находятся верно.
P=poly(1:20) – коэффициенты полинома, корнями которого являются аргументы функции
roots(P) – нахождение корней полинома.
Если изменить, например, значение 2-го коэффициента на величину 10-7 (что составляет ~ 5*10-8% от числа), то половина корней станут комплексными. Малые погрешности приводят к качественно новому результату – уходу корней с действительной оси в комплексную плоскость.
Следует ясно понимать, что численные методы являются по своей сути приближенными, с помощью которых принципиально нельзя получить точный результат, даже если численный метод является точным.
Пункты 1. и 2. приводят к неустранимым погрешностям. Пункт 4., связанный с ограниченной разрядной сеткой компьютера (бесконечные дроби представлены в конечном виде), также приводит к неустранимым погрешностям, за исключением физически мало интересного случая работы с целыми числами.
Рассмотрим представление числа в компьютере.
Число формата double – 64-разрядное число (8 байт), в котором 1 бит – знаковый, 52 отводятся под мантиссу и 11 под порядок числа. мантисса числа, — порядок).
Максимальное число — машинная бесконечность.
Минимальное число — машинный нуль.
Мантисса содержит 15-16 десятичных знаков. Все, что выходит за эти пределы будет отброшено.
Казалось бы, такая точность представления способна удовлетворить любые нужды исследователя. Однако необходимо помнить, что, например, перед тем как два числа будут сложены, они должны быть приведены к единому порядку, а то, что при сложении выйдет за мантиссу будет отброшено. Поэтому, если сложить ,то в мантиссу уложатся 15 десятичных знаков и будет получен верный результат, а если выполнить , то малое число выйдет за разрядную сетку, и получим те же .
Если прибавить к 1 малое число 10-16, но последовательно 1017 раз (такие вычисления характерны для задач ЧМ – вычисление рядов, разнообразные итерационные, разностные задачи…). Легко найти ответ – 11, однако, машинная арифметика дает 1 – ошибка 1000%! Если сначала найти сумму малых величин, а потом прибавить к 1, то результат будет верный. Таким образом, машинное сложение, в общем случае не коммутативно.