Научное программирование
Практическое занятие "Вычислительные процедуры"
Цель занятия
Продемонстрировать на практике различные вычислительные процедуры. Научится самостоятельно реализовывать вычислительные процедуры для решения задач численного анализа.
Практическая задача
Рассмотрим простую задачу вычисления факториала числа.
Чтобы вычислить факториал мы должны спроектировать и реализовать вычислительную процедуру. Покажем этим примером, как можно реализовать вычислительные процедуры, основанные на разных принципах. Для задачи вычисления факториала мы будем использовать процедуры, основанные на итерациях, и процедуры, основанные на рекурсии.Первая вычислительная процедура выглядит следующим образом:
Вторая процедура будет основана на рекурсивном вызове:
С математической точки зрения - обе эти процедуры эквивалентны, но с вычислительной точки зрения между этими реализациями есть существенные различия. Чтобы оценить быстродействие наших процедур выполним следующий тест:
Заметим, что кроме быстродействия необходимо рассматривать также и такой параметр, как требуемая память. Для рекурсивных процедур с большим уровнем вложения может потребоваться большой объем стека.
В лекции, посвященной вычислительным процедурам, мы отмечали, что из-за наличия машинного эквивалентные (с математической точки зрения) вычислительные процедуры могут давать различные результаты. В качестве примера - попробуем проверитЬ на компьютере выполнение различных тождеств:
Для этого выполним следующий тестВ качестве демонстрации свойства устойчивости и неустойчивости различных вычислительных процедур. Рассмотрим одну задачу, которая имеет известное решение. Задача - найти значение решения дифференциального уравнения
( 1) |
( 2) |
Известно, что решением задачи 1 - 2 будет число . Если мы будем решать эту задачу с помощью численного метода, например, метода Эйлера, то устойчивость нашей вычислительной процедуры будет зависеть от знака числа . Если , то наша вычислительная процедура является неустойчивой.