Пусть имеется набор узловых точек xk (где k=1,2,…,n) и значения функции y(xk) в этих точках, а также некоторая функция f(x,a1, a2, …,am), которая кроме аргумента х зависит еще и от параметров as (где s=1, 2, …m). Задача аппроксимации состоит в том, чтобы подобрать такие значения параметров as, что функция f(x, a1, a2, …am) наилучшим образом описывала бы исходную функцию. Как правило, m<<n, поэтому добиться, чтобы функция f(x, a1, a2, …am) давала точные результаты даже в узловых точках не удастся. Нужен критерий, который оценивает точность аппроксимации таблично заданной функции. Например, в методе наименьших квадратов в качестве такого критерия используется среднеквадратическое отклонение
.
Частным случаем задачи аппроксимации является задача интерполяции функции. В этом случае также имеем набор узловых точек xk (где k=1,2,…,n) и значения функции yk в этих точках. Однако, в соответствии с критерием интерполяции, требуется построить такую функцию f(x), которая в узловых точках x1, x2,…,xn принимала бы значения y1, y2, …,yn, то есть f(xk) = yk для всех k от 1 до n. Чаще всего функцию f(x) ищут в виде полинома, степень которого n-1. Поэтому задача сводится к определению коэффициентов интерполяционного полинома на основании значений функции в базовых точках.
На практике для решения задачи интерполяции (вычисления значений функции в точках, несовпадающих с узлами интерполяции) используются интерполяционные формулы Ньютона и формула Лагранжа [1].
Для выполнения полиномиальной аппроксимации в MatLab используется функция polyfit(). Эта функция предназначена для выполнения аппроксимации методом наименьших квадратов. Функция polyfit(x,y,n) возвращает вектор коэффициентов полинома степени n, который с наименьшей среднеквадратичной погрешностью аппроксимирует функцию, заданную таблично. Результатом является вектор строка длиной n+1, содержащий коэффициенты полинома в порядке уменьшения степеней. Аргументами функции являются список узловых точек, список значений интерполируемой функции в этих точках и степень интерполяционного полинома. Как правило, степень полинома много меньше количества узлов (m<<n). В качестве результата возвращается список коэффициентов аппроксимирующего полинома.
Ниже приведены пример линейной и кубической аппроксимации функции, заданной таблицей (рис. 2.2.1-1), и графики аппроксимирующих функций (рис. 2.2.1-2).
Рис. 2.2.1-1. Пример линейной и кубической аппроксимации функции
Рис. 2.2.1-2. Графики исходной и аппроксимирующих функций
Чтобы результатом выполнения функции Matlab polyfit() был именно интерполяционный полином, необходимо, чтобы степень этого полинома была на единицу меньше количества узловых точек.
Пример 2.2.1-1. Используя в качестве узлов интерполяции
x=-5,-4…5, построить полином, интерполирующий функцию .
Выполняя команды Matlab в окне Command Window, получим таблицу значений функции и проведем ее интерполяцию с использованием функции Matlab polyfit() (рис. 2.2.1-3). Графики интерполяционных узлов и интерполяционного полинома приведены на рис. 2.2.1-4.Здесь для вычисления значений полинома в точках используется функция polival(p,z), где вектор z покрывает интервал интерполяции и даже выходит за его пределы.
Рис. 2.2.1-3. Интерполяция таблично заданной функции
с использованием функции Matlab polyfit()
Рис. 2.2.1-4. Графики интерполируемой и интерполирующей функций
При большом количестве базовых точек интерполяция полиномом может оказаться малопродуктивной, поэтому нередко используют интерполяцию сплайнами. Идея сплайн-интерполяции состоит в разбиении диапазона интерполирования на отрезки, в пределах которых используются разные функции одного вида (чаще всего алгебраические многочлены). Эта функция и ее несколько производных на всем диапазоне интерполяции непрерывны. В результате имеем кусочно-гладкую интерполяционную зависимость.
Сплайн-интерполяцию можно реализовать с помощью функции Matlab interp1(). В качестве аргументов функции передают: набор узловых точек аргумента, значения функции в этих точках, список значений точек, для которых вычисляется значения интерполяционной зависимости и, наконец (в апострофах), тип базового полинома (табл. 2.2.1-1).
Таблица 2.2.1-1
Имя функции | Описание |
nearest() | Интерполяция полиномами нулевой степени – график имеет ступенчатый вид |
linear() | Интерполяция полиномами первой степени – базовые точки соединяются отрезками прямой |
spline() | Интерполяция полиномами третьей степени |
Рассмотрим пример использования функции Matlab interp1().
x | -1 | |||
y(x) |