Дискретизация функций одной переменной

Рассмотрим некоторую функцию Дискретизация функций одной переменной - student2.ru (х), заданную на отрезке
[xmin, xmax], и множество точек {xk}={x1, x2 … xK}, лежащих в пределах этого отрезка (рис. 2). Перенумеруем элементы множества {xk} “по возрастанию”, т.е. будем считать, что xk-1<xk. Элементы множества {xk} в дальнейшем будут называться сеточными узлами, расстояние между соседними узлами Δхk=xk+1-xk – шагомсетки, а само множество {xk} – сеткой. Отображение множества сеточных узлов {xk} на множество значений функции Дискретизация функций одной переменной - student2.ru (х), такое что Ф(хk)= Дискретизация функций одной переменной - student2.ru , называют сеточной функцией. Для сокращения записи, в дальнейшем мы будем использовать обозначение Фk=Ф(хk).

Зачем нам потребовалось введение понятия сеточной функции? Дело в том, что, в силу конструктивных особенностей современных цифровых ЭВМ, при численном решении математических уравнений мы вынуждены заменять функции непрерывного аргумента их сеточными представлениями[12].

Дискретизация функций одной переменной - student2.ru

Рис. 2. Сетка {xk}={x1, x2 … xK} и множество значений сеточной функции {Фk}

Представляется очевидным, что, используя различные сетки, мы можем сопоставить данной функции целый ряд её сеточных представлений. И наоборот, имея в своем распоряжении лишь сеточную функцию, мы можем сопоставить ей целый ряд непрерывных восполнений[13]. Исследование свойств сеточных функций, а также методов построения и свойств восполнений – одна из задач вычислительной математики.

Наша ближайшая задача заключается в оценке величины производной функции[14] Дискретизация функций одной переменной - student2.ru по значениям сеточной функции Ф. Вспоминая определение понятия производной, отметим, что такие оценки (аппроксимации) могут быть получены при помощи одностороннего конечно-разностного отношения назад:

Дискретизация функций одной переменной - student2.ru ; (9a)

одностороннего конечно-разностного отношения вперед:

Дискретизация функций одной переменной - student2.ru ; (9b)

и центрального (трехточечного) конечно-разностного отношения:

Дискретизация функций одной переменной - student2.ru . (9c)

Важно понимать, что величины Дискретизация функций одной переменной - student2.ru , Дискретизация функций одной переменной - student2.ru и Дискретизация функций одной переменной - student2.ru являются оценками, они не обязательно должны быть равными, а при переходе к другой сетке {xk} они могут изменяться. В то же время, с геометрической точки зрения, приведенные конечно-разностные аппроксимации равны тангенсам углов наклона прямых, проведенных через соответствующие точки кривой Дискретизация функций одной переменной - student2.ru (х), и, при “достаточно” малой величине шага Δх, мы вправе ожидать, что они будут близки к величине тангенса угла наклона касательной к кривой Дискретизация функций одной переменной - student2.ru (х) в точке хk.

Для того, чтобы оценить погрешность оценок (9), разложим функцию Дискретизация функций одной переменной - student2.ru (х) в ряд Тейлора относительно некоторой точки х*, лежащей между хk-1 и xk. При этом для её узловых значений можно записать:

Дискретизация функций одной переменной - student2.ru

Тогда, например, для случая (9a) будем иметь:

Дискретизация функций одной переменной - student2.ru (10)

Учитывая, что для всех точек х*, лежащих в пределах отрезка
(xk-1,xk), Дискретизация функций одной переменной - student2.ru = Дискретизация функций одной переменной - student2.ru =const, а величина последнего члена в (10) сопоставима с длиной отрезка Дискретизация функций одной переменной - student2.ru , мы можем окончательно записать[15]:

Дискретизация функций одной переменной - student2.ru (11)

Очевидный вывод из формулы (11) заключается в том, что для повышения качества конечно-разностной аппроксимации производной функции Дискретизация функций одной переменной - student2.ru (х) нам следует уменьшать шаг сетки. Другой путь улучшения оценки производной Дискретизация функций одной переменной - student2.ru связан с использованием большего объема информации о значениях функции в узлах сетки. Например, можно показать, что пятиточечная симметричная аппроксимация, полученная для случая сетки, имеющей постоянный шаг Dх, имеет точность порядка Dх4:

Дискретизация функций одной переменной - student2.ru (12)

За увеличение точности приходится "платить" увеличением объема вычислительной работы: при использовании формул (9) нам необходимо выполнить два арифметических действия[16], а при использовании формулы (12) – семь арифметических действий.

В таблице 3.1 приведены результаты расчета производной функции Дискретизация функций одной переменной - student2.ru (х)=sin(x) при х=0,5 на сетке с шагом Dх=0,05.

Таблица 3.1

Способ расчета Результат Ошибка
Точное значение 0.87758 ‑‑‑
Разностное отношение назад (8а) 0.88920 1.162×10-2
Разностное отношение вперед (8b) 0.86523 -1.235×10-2
Трехточечная (симметричная) аппроксимация (8с) 0.87722 -3.7×10-4
Пятиточечная симметричная аппроксимация (11) 0.87758 -1.8 ×10-7

Данные табл. 3.1 полностью подтверждают полученные выше выводы о связи погрешности конечно-разностных аппроксимаций с величиной шага сетки Dх. При рассмотрении результатов табл. 3.1 следует иметь в виду, что применение неравномерной сетки (Dх¹const) уменьшает выигрыш от использования центрально-разностной формулы (9c) (см. прим. 12).

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

Оказывается, что применение высокоточных аппроксимаций (напр., вида (12)) на грубой сетке не приводит к заметному улучшению качества расчета в целом, более того, в тех случаях, когда рассматриваемая функция Ф(х) имеет значительный градиент, применение более точных аппрок­симаций может привести к получению худшего результата [Флетчер].

В таблице 3.2, в качестве примера, приведены результаты расчета производной функции Дискретизация функций одной переменной - student2.ru (х)=-th(10×(1-x)) при х=0,9 на сетках с шагом Dх=0,05 и Dх=0,025. График функции приведен на рис. 3.

Дискретизация функций одной переменной - student2.ru

Рис. 3. График функции Дискретизация функций одной переменной - student2.ru (х)=-th(10×(1-x))

Таблица 3.2

Способ расчета Результат Ошибка
Точное значение 4.19974 ‑‑‑
Dх=0,05
Разностное отношение назад (8а) 2.87108 -1.32866
Разностное отношение вперед (8b) 5.98954 1.78980
Трехточечная (симметричная) аппроксимация (8с) 4.43031 0.23057
Пятиточечная симметричная аппроксимация (11) 4.30037 0.10063
Dх=0,025
Разностное отношение назад (8а) 3.46758 -0.73216
Разностное отношение вперед (8b) 5.05781 0.85807
Трехточечная (симметричная) аппроксимация (8с) 4.26269 0.06295
Пятиточечная симметричная аппроксимация (11) 4.20682 0.00708

Сопоставление результатов, приведенных в табл. 3.2, с данными табл. 3.1, оставляет удручающее впечатление: если в табл. 3.1 максимальная ошибка не превосходила 2% от оцениваемой величины, то в табл. 3.2, при расчете на сетке с шагом Dх=0,05 только лучший результат имеет 2% ошибку, а максимальная ошибка приближается к 50%. Для того, чтобы прояснить причину столь существенного ухудшения качества аппроксимаций, следует отметить, что вторая производная (отвечающая за скорость изменения функции) у sin(x) по абсолютной величине не превосходит единицу, а вторая производная функции Дискретизация функций одной переменной - student2.ru (х)=-th(10×(1-x)) при х=0,9 составляет 64,0. Именно поэтому, первом случае шаг сетки Dх=0,05 был вполне достаточен для оценки производной, а во втором ‑ слишком велик.

Уменьшение шага сетки в два раза (до Dх=0,025) позволило уменьшить ошибку: в случае применения односторонних аппроксимаций ‑ примерно в два раза; в случае применения трехточечной аппроксимации – в четыре раза; а в случае применения пятиточечной аппроксимации – почти в шестнадцать раз. Можно ожидать, что дальнейшее уменьшение шага сетки позволит качественно уменьшить величину ошибки аппроксимации.

Анализ данных табл. 3.2 также показывает, что в рассматриваемом случае применение пятиточечной аппроксимации не дает существенного выигрыша по сравнению с трехточечной: при Dх=0,05 достигнут выигрыш по величине ошибки примерно в два раза; при Dх=0,025 – примерно в восемь раз[17].

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

Применение неравномерных сеток (т.е. сеток с Dх¹const) имеет смысл в тех случаях, когда ещё до начала расчета можно указать область наиболее быстрого изменения значений функции, что позволяет исследователю "вручную" организовать сгущение сеточных узлов в этой области, однако, если прогноз свойств функции не оправдается, проделанная работа окажется бесполезной.

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

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

Рассмотрим применение изложенной теории к решению обыкновенных дифференциальных уравнений[18]. Пусть:

Дискретизация функций одной переменной - student2.ru , хÎ[0,8; 1,2] (13)

Точным решением уравнения (13) является функция (см. рис. 3) Дискретизация функций одной переменной - student2.ru (х)=-th(10×(1-x))+А, где А – произвольная постоянная, для определения которой необходимо задать начальное условие. Пусть Дискретизация функций одной переменной - student2.ru (0,8)=0,1.

Будем использовать равномерную расчетную сетку, её первый узел совместим с левой границей интервала: х0=0,8; xk=x0+k×Dх, где k – номер узла сетки. Величину шага сетки Dх уточним позднее, в процессе численного решения.

Запишем уравнение (13) для узла х0, заменив производную в левой части разностным отношением вперёд (см. (8b)):

Дискретизация функций одной переменной - student2.ru , Ф0= Дискретизация функций одной переменной - student2.ru (0,8).

Откуда следует формула для расчета значения функции в первом узле:

Дискретизация функций одной переменной - student2.ru (14)

Зная значение функции в первом узле Ф1, мы можем точно таким же способом последовательно определить её значения во всех остальных узлах сетки.

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

Дискретизация функций одной переменной - student2.ru

Рис. 4. Влияние шага расчетной сетки Dх

на точность численного решения дифференциального уравнения

В завершение параграфа рассмотрим общий способ построения конечно-разностных аппроксимаций. Наша цель будет заключаться в получении трехточечной центральной оценки второй производной Дискретизация функций одной переменной - student2.ru ²(хk), с использованием данных о значениях функции в смежных узлах. Задача будет решена, если нам удастся представить Дискретизация функций одной переменной - student2.ru ² в виде:

Дискретизация функций одной переменной - student2.ru , (15)

где a, b, c – коэффициенты, подлежащие определению, а Дискретизация функций одной переменной - student2.ru – ошибка аппроксимации некоторого порядка m.

Вместо значений функции в боковых узлах используем их представления в виде рядов Тейлора:

Дискретизация функций одной переменной - student2.ru

и перегруппируем правую часть (15):

Дискретизация функций одной переменной - student2.ru , (16)

Для того, чтобы правая часть (16) соответствовала виду (15), коэффициенты a, b, c должны удовлетворять условиям:

Дискретизация функций одной переменной - student2.ru

Откуда следует:

Дискретизация функций одной переменной - student2.ru

Окончательно будем иметь:

Дискретизация функций одной переменной - student2.ru (17)

В случае использования равномерной сетки выражение для Дискретизация функций одной переменной - student2.ru существенно упростится:

Дискретизация функций одной переменной - student2.ru (18)

Отметим, что при использовании иного общего представления для второй производной вместо (15), вид формул (17), (18) был бы иной. Несомненным достоинством использованного метода построения конечно-разностных аппроксимаций производных является попутное получение оценки для ошибки аппроксимации.

Наши рекомендации