Вы здесь

4. Интерполяция, аппроксимация и регрессия

 

Интерполяция, аппроксимация и регрессия

 

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

Полиномиальная интерполяция и аппроксимация

Для решения задач интерполяции и аппроксимации функций, заданных рядом узловых точек, в Mathematica используются следующие функции:

  • InterpolatingFunctionfrange, table] — возвращает интерполирующую функцию, позволяющую вычислять промежуточные значения в заданном диапазоне range для таблицы table;
  • InterpolatingPolynomial [data, var] — возвращает полином (степенной многочлен) по переменной var, значения которого в узловых точках точно совпадают с данными из списка data. Он может иметь форму { {xl, f1}, {х2, f2},...} или {fl, f2,...} (во втором случае xi принимают значения 1, 2,...). Вместо fi может быть список {fi, dfi, ddfi,...}, указывающий значения производных в точках xi;
  • Interpolation [data] — конструирует объект InterpolatingFunction.

InterpolationOrder — опция функции Interpolation, указывающая степень подходящего полинома. При ее значении, равном 1, осуществляется кусочно-линейная интерполяция. Целое значение, большее единицы, задает степень глобальной полиномиальной интерполяции.

Применение основной функции Interpolation поясняет следующий пример:


data = ТаЫе[{х, х^2 + 1}, {х, 1, 5}]

{{1, 2}, {2, 5}, {3, 10}, {4, 17}, {5, 26}}

funi = Interpolation[data]

InterpolatingFunctionf{{1, 5}}, 0]

{funi [1.5], funi[3], funi[4.5]}

{3.25, 10, 21.25}

Таким образом, на заданном отрезке изменения х функция Interpolation позволяет найти любое промежуточное значение функции funi [x], в том числе значения в узловых точках.

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

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

Пример на рис. 5.13 иллюстрирует технику проведения полиномиальной аппроксимации с применением интерполирующего степенного многочлена.

Рис. 5.13. Полиномиальная аппроксимация таблично заданных данных

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

В узлах интерполяции значения интерполирующего многочлена точно совпадают со значениями исходных данных. Однако это не гарантирует малую погрешность за пределами узловых точек (особенно при экстраполяции функций). Чем больше пар данных и чем выше степень аппроксимирующего многочлена, тем выше погрешность аппроксимации. Обычно аппроксимация при степени многочлена выше 8-10 не применяется из-за резкого возрастания погрешности. При большом числе пар исходных данных более полезной на практике является регрессия.

Регрессия и визуализация ее результатов

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

Для решения задач регрессии используется функция ядра


Fit: Fit[data, funs, vars]

Эта функция ищет приближение для списка данных data методом наименьших квадратов в виде линейной комбинации функций funs переменных vars. Данные data могут иметь форму {{xl, yl,..., f1}, {х2, у2,..., f2 },...}, где число координат х, у,... равно числу переменных в списке vars. Также данные data могут быть представлены в форме {f 1, f 2, =..} с одной координатой, принимающей значения 1, 2... Аргумент funs может быть любым списком функций, которые зависят только от объектов vars.

Следующие примеры показывают приближение исходных данных степенным полиномом и линейной комбинацией двух функций:


Fit[{{0, 0.9}, {2, 8.099999999999999), {3, 17}, {4, 33}}, {а, х, х2}, х]

0. 997273-1.40864 х+2.33409 х2

Fit[{{0, 0.9}, {2, 8.099999999999999}, {3, 17}}, {х2, Ехр[х], х} , х]

0.9ех + 2.89276х- 1.08392 х2

Здесь в первом примере выполняется полиномиальная регрессия со степенью полинома, равной 2. Максимальная степень на 1 меньше числа пар исходной зависимости (в нашем случае их 4) — при такой степени регрессия вырождается в обычную полиномиальную аппроксимацию, которая рассматривалась ранее.

Рисунок 5.14 показывает несколько иной путь проведения полиномиальной аппроксимации — исходные данные заданы объектом-списком data.

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

В уроке 12 будут рассмотрены дополнительные функции для проведения регрессии. Они входят в различные пакеты расширения системы Mathematica 3/4.

Рис. 5.14. Полиномиальная регрессия с графическим выводом

 


Top.Mail.Ru