Обзор средств matlab и ToolBox'ов для приближения данных

Вид материалаОбзор

Содержание


Средства MATLAB
Приложение Basic Fitting
Запуск приложения Basic Fitting и его основные компоненты
Приближение данных полиномами по методу наименьших квадратов и сплайнами в приложении Basic Fitting
Сохранение приближений и их значений в рабочей среде MATLAB и некоторые операции с ними
Какие функции MATLAB и методы используются в приложении Basic Fitting
Приближение полиномами в смысле наименьших квадратов
Задача о приближении данных полиномом в смысле наименьших квадратов
Метод наименьших квадратов
Когда функция polyfit выдает предупреждения, плохая обусловленность, центрирование и масштабирование данных
Метод наименьших квадратов
Операции с полиномиальными приближениями
Умножение полиномов и деление с остатком
Сложение и вычитание полиномов.
Работа с разбросанными данными
Триангуляция Делоне
Построение диаграммы Вороного
Подобный материал:
  1   2   3   4

Обзор средств MATLAB и ToolBox'ов для приближения данных


MATLAB и ряд ToolBox'ов предоставляют широкие возможности для приближения и интерполяции одномерных и многомерных данных. Причем эти возможности реализованы на различных уровнях: от достаточно простых средств графического окна для приближения уже визуализированных данных, до специальных функций MATLAB и ToolBox'ов, включая среды с графическим интерфейсом пользователя, которые позволяют импортировать данные, производить их предварительную обработку и сглаживание, приближать и интерполировать данные различными методами. В состав MATLAB входят функции для решения некоторых задач вычислительной геометрии. Функции MATLAB и ряда ToolBox'ов позволяют решать следующие задачи:
  • приближение полиномами по методу наименьших квадратов;
  • интерполяция одномерных данных сплайнами;
  • приближение сглаживающими сплайнами;
  • приближение сплайнами в смысле наименьших квадратов;
  • интерполяция и приближение двумерных и многомерных данных сплайнами, являющимися тензорным произведением одномерных сплайнов;
  • сглаживание сплайнами типа тонких пластин;
  • приближение рациональными сплайнами;
  • построение выпуклой оболочки двумерных и многомерных данных;
  • построение триангуляции Делане на плоскости и в N-мерном пространстве;
  • построение диаграммы Вороного на плоскости и в N-мерном пространстве;
  • нахождение ближайшей точки;
  • приближение разбросанных данных;
  • построение линейных и нелинейных параметрических моделей для приближения данных (решение задачи о подборе параметров в одной из стандартных моделей или заданной пользователем и оценка качества приближения).

Перед приближением данных параметрической или непараметрической моделью возможна их предварительная обработка: исключение данных вручную или по некоторому критерию, задание различных весов.

Имеются средства для сглаживания данных при помощи фильтрации или локальной регрессии.

Построив интерполянт или параметрическую модель, легко производить с ними различные действия: при помощи функций MATLAB и ToolBox'ов:
  • визуализировать
  • интегрировать и дифференцировать
  • вычислять значения в различных точках

Мы рассмотрим применение базовых средств и встроенных функций MATLAB, а также Spline ToolBox и Curve Fitting ToolBox для решения задач о приближении данных. Часть функций и средств MATLAB и перечисленных ToolBox'ов дублируют друг друга. Например, некоторые задачи, в которых требуется интерполяция сплайнами, могут быть решены как при помощи встроенных функций MATLAB, так и в Curve Fitting ToolBox и Spline ToolBox.

В справочной системе по MATLAB и ToolBox'ам сведения об интерполяции и приближении данных размещены в следующих разделах (вкладка Contents):
  • MATLAB: Examples: Mathematics: гиперссылки в правом окне в разделе Polynomials and Interpolation - приближение многомерных данных.
  • MATLAB: Examples: Mathematics: гиперссылки в правом окне в разделе Data Analysis and Statistics - приближение полиномами в смысле наименьших квадратов, приближение экспоненциальными моделями, использование средства Basic Fitting из графического окна.
  • MATLAB: Mathematics: Polynomials and Interpolation: Polynomials: Polynomial Curve Fitting - приближение полиномами по методу наименьших квадратов.
  • MATLAB: Mathematics: Polynomials and Interpolation: Interpolation - обзор функций MATLAB для интерполяции данных, интерполяция одномерных данных при помощи сплайнов и дискретного преобразования Фурье, интерполяция двумерных данных и сравнение различных способов (по ближайшему соседу, билинейная и бикубическая интерполяция), интерполяция разбросанных данных.
  • MATLAB: Mathematics: Data Analysis and Statistics: Data Preprocessing - проверка отсутствующих данных и их удаление, удаление выбросов из данных.
  • MATLAB: Mathematics: Data Analysis and Statistics: Regression and Curve Fitting - полиномиальная регрессия, множественная регрессия (без применения специальных функций MATLAB).
  • MATLAB: Mathematics: Data Analysis and Statistics: Case Study: Curve Fitting - приближение полиномиальной и экспоненциальной моделями в смысле наименьших квадратов.
  • MATLAB: Functions -- Categorical List: Mathematics: Interpolation and Computational Geometry - интерполяция одномерных, двумерных и многомерных табличных данных, построение выпуклой оболочки множества точек на плоскости и в N-мерном пространстве, построение триангуляции Делоне и диаграммы Вороного на плоскости и в N-мерном пространстве, поиск ближайшей точки и симплекса, содержащего заданную точку, интерполяция разбросанных данных.
  • Spline ToolBox - интерполяция и сглаживание сплайнами в кусочно-полиномиальной и B-форме, переход от одной форме к другой, выбор "хороших" (это не термин, подробнее написано в разделе, посвященном Spline ToolBox) узлов и полюсов интерполяции, приближение сплайнами по методу наименьших квадратов, построение сплайнов типа тонких пластин, рациональных сплайнов, визуализация сплайнов, их интегрирование и дифференцирование, нахождение их корней и экстремумов, описание графических оболочек, входящих в состав Spline ToolBox. Подробнее про возможности Spline ToolBox написано в разделе Обзор возможностей и средств Spline Toolbox 3.2.
  • Curve Fitting ToolBox - предварительная обработка и сглаживание данных, приближение данных линейными и нелинейными параметрическими и непараметрическими (интерполяционные и сглаживающие сплайны) моделями, анализ качества приближений, вычисление их характеристик, визуализация данных и полученных моделей. Описана работа как в приложении с графическим интерфейсом, так и использование функций Curve Fitting ToolBox. Подробнее про возможности Curve Fitting ToolBox будет написано в разделе Обзор возможностей и средств Curve Fitting ToolBox 1.1.
  • Statistics ToolBox.

Также полезно посмотреть демонстрации (вкладка Demos в окне справочной системы):
  • MATLAB: Mathematics: Optimal Fit of a Non-linear Function - объяснено решение задачи о нахождении параметров, линейно и нелинейно входящих в параметрическую модель, при помощи построения целевой функции ошибки приближения и ее минимизации с использованием функции fminsearch пакета MATLAB.
  • MATLAB: Mathematics: Tessellation and Interpolation of Scattered Data - рассмотрено построение выпуклой оболочки в трехмерном случае, триангуляции Делоне, построение диаграммы Вороного и интерполяция трехмерных разбросанных данных, включая визуализацию.
  • MATLAB: Mathematics: Splines in Two Dimensions - разбирается построение двумерных сплайновых кривых при помощи базовых функций MATLAB.
  • ToolBoxes: Curve Fitting - два фильма, демонстрирующих использование графической оболочки Curve Fitting Tool для импорта и сглаживания данных, а также подбор параметров в заданной пользователем модели.
  • ToolBoxes: Spline - пятнадцать демонстраций, включая простые примеры, объяснение кусочно-полиномиальной и B-формы сплайнов, интерполирование и сглаживание кубическими сплайнами, построение сплайновых кривых, аппроксимация двумерных данных тензорным произведением сплайнов, применение сплайнов для решения граничных задач для обыкновенных дифференциальных уравнений, эксперименты с приближениями различными сплайнами и эксперименты с узлами B-сплайнов.

Средства MATLAB

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

Сначала рассмотрим решение задачи о приближении одномерных данных при помощи самого простого, но вполне функционального средства - Basic Fitting, доступного из меню графического окна.

Приложение Basic Fitting

Это приложение предоставляет простой графический интерфейс к некоторым функциям MATLAB, предназначенным для приближения данных и позволяет интерполировать одномерные данные кубическими сплайнами, сплайнами, сохраняющими форму и монотонность данных (кубическими полиномами Эрмита) и приближать данные полиномами в смысле наименьших квадратов. График полученного приближения выводится на оси графического окна. Кроме того, возможно вычислить норму ошибки и построить график распределения ошибки, а так же вычислить значение приближающей функции в заданных точках. Одновременная работа может вестись с несколькими наборами одномерных данных. Разумеется, для оформления графиков доступны все стандартные средства графического окна. Средства приложения Basic Fitting позволяют экспортировать информацию о построенном сплайне или полиноме в рабочую среду MATLAB в виде структуры со значениями коэффициентов полинома или информацией о сплайне. Вычисленные значения сплайна или полинома могут быть также экспортированы в рабочую среду. Эти данные могут быть использованы в рабочей среде для последующих действий с построенным приближением функциями MATLAB и ToolBox'ов.

Запуск приложения Basic Fitting и его основные компоненты

Запуск приложения Basic Fitting выполняется из меню Tools графического окна в пункте Basic Fitting. Поэтому для запуска приложения сначала желательно визуализировать данные. Пусть, например, наши данные заданы двумя массивами x и y следующим образом:

x = 0:0.25:2;

y = sin(exp(x));

Построим их график круглыми маркерами, используя функцию plot:

plot(x, y, 'o')

и запустим приложение Basic Fitting из меню Tools графического окна:



Рядом с графическим окном появляется окно приложения Basic Fitting с панелью Plot Fits, набор данных получает имя data1 и в графическом окне появляется легенда. Основные элементы окна приложения Basic Fitting приведены на рисунке:



Раскрывающийся список Select Data содержит только одну строку, поскольку в графическом окне на осях построен один набор данных, которому автоматически присвоено имя data1 (его можно изменить, см. Работа с несколькими наборами данных).

Установка флага Center and Scale X Data позволяет при вычислениях использовать отмасштабированные данные с нулевым средним и дисперсией равной 1 для уменьшения вычислительной ошибки.

На панели Plot Fits расположены флаги для выбора типа приближения см. Какие функции MATLAB и методы используются в приложении Basic Fitting:
  • spline interpolant - для интерполяции данных кубическими сплайнами с граничными условиями отсутствия узла.
  • shape-preserving interpolant - для интерполяции данных кусочными полиномами Эрмита, сохраняющими форму.
  • linear, quadratic, qubic, 4th degree polynomial, ... , 10th degree polynomial - для приближения данных полиномами от первого до 10-го порядка в смысле наименьших квадратов (полиномиальная регрессия).

Установка флага Show equation приводит к отображению в графическом окне формулы полинома с числом значащих цифр в коэффициентах, указанном в списке Significant digits (это работает только для полиномов при приближении по методу наименьших квадратов, а при интерполяции сплайнами выводится только тип сплайна).

Для вывода графика ошибки следует установить флаг Plot residuals и определить способ в первом под этим флагом раскрывающемся списке:
  • Bar plot - столбцевой диаграммой.
  • Scatter plot - маркерами-точками.
  • Line Plot - ломаной линией.

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

График ошибки приближения выводится в том же самом графическом окне на дополнительные нижние оси, т.к. в нижнем раскрывающемся списке по умолчанию стоит Subplot. Если требуется получить распределение ошибки приближения в отдельном окне, то следует выбрать в нем Separate figure.

Для отображения численного значения ошибки в евклидовой норме (корень из суммы квадратов разностей значений данных и приближающего их полинома) на осях с графиком ошибки, следует установить флаг Show norm of residuals.

В правом нижнем углу окна находится кнопка для отображения панели Numerical results, при ее нажатии данная панель оказывается справа от Plot Fits:



Панель Numerical Results позволяет выбрать тип приближения в раскрывающемся списке Fit и посмотреть на коэффициенты полинома и ошибку приближения в евклидовой норме в окне Coefficients and norm of residuals.

Полученные результаты можно сохранить в виде переменных в рабочей среде MATLAB при помощи кнопки Save to workspace (она сейчас недоступна, поскольку пока мы не построили ни одного приближения).

Кнопка служит для скрытия панели Numerical Results, а кнопка предназначена для раскрытия последней панели Find Y=f(X) приложения Basic Fitting, служащей для вычисления значений построенного сплайна или полинома и сохранения результатов в переменных рабочей среды MATLAB. При нажатии на эту кнопку справа появляется панели Find Y=f(X) и окно приложения Basic Fitting приобретает вид:



Для вычисления значений построенного полинома или сплайна в промежуточных точках следует задать их в строке ввода в виде, понятном MATLAB, и нажать кнопку Evaluate. Значения независимой переменной могут быть заданы:
  • вектором, например [0 0.15 0.64 0.89] или 1.1:0.05:2.26;
  • функциями linspace или logspace, которые возвращают вектор из равноотстоящих точек в линейной и, соответственно, логарифмической шкале, например: linspace(0.1, 2.4, 25) или logspace(-5,0,12);
  • вектором значений, являющимся глобальной переменной рабочей среды.

Полученные результаты выводятся в таблице и их можно экспортировать в переменные рабочей среды, воспользовавшись кнопкой Save to workspace. Для отображения полученных значений маркерами на осях с данными и приближением следует установить флаг Plot evaluated results.

Панель Find Y=f(X) скрывается при помощи кнопки , расположенной в ее правом нижнем углу.

Приближение данных полиномами по методу наименьших квадратов и сплайнами в приложении Basic Fitting

Поставим задачу приблизить данные, введенные в предыдущем разделе Запуск приложения Basic Fitting и его основные компоненты, полиномом 5-ой степени в смысле наименьших квадратов и кубическими сплайнами, вывести график распределения ошибки и ее норму и вычислить значения полученного полинома в точках с координатами . Для этого раскроем все три панели приложения Basic Fitting и на панели Plot Fits установим флаги spline interpolant и 5th degree polynomial. При этом в графическом окне сразу же строятся графики сплайна и полинома. Для вывода на график выражения для полинома достаточно установить флаг Show equation и выбрать число значащих цифр в списке Significant digits (можно оставить две, как по умолчанию). Следует иметь ввиду, что вне зависимости от выбранного числа значащих цифр для отображения результата, MATLAB производит все вычисления с двойной точностью). Построим графики распределения ошибки и выведем ее значение в среднеквадратичной норме в отдельном графическом окне, для чего на панели Plot Fits выберем в самом нижнем списке Separate figure и установим флаг Show norm of residual. В результате получаем такие графики с данными, сплайном, полиномом и ошибками приближений:



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



где - построенный полином пятой степени, а 9 - число данных (длина векторов x и y). Для получения нулевой ошибки при приближении полиномом следовало бы построить полином 8-ой степени, поскольку через девять точек, заданных нашими векторами x и y, проходит единственный полином восьмой степени, который является интерполяционным (его девять коэффициентов однозначно определяются девятью условиями прохождения через заданные точки). Приблизим наши данные полиномом восьмой степени, установив флаг 8th degree polynomial на панели Plot Fits. График полинома выводится на тех же осях, что и предыдущие приближения, распределение ошибки и ее значение в среднеквадратичной норме добавляется на второй график. Однако, поскольку приближение производится по методу наименьших квадратов), то для нахождения коэффициентов полинома решается система линейных алгебраических уравнений. Из-за ошибок округления она решается неточно, чем и обусловлена ненулевая норма ошибки приближения полиномом восьмой степени (порядка 10-13).

Полиномы степени большей восьми в нашем примере будут неединственными (в них коэффициентов больше, чем условий прохождения графика полинома через точки данных). Выбор девятой или десятой степеней приведет к появлению окна с соответствующим предупреждением "Polynomial is not unique; degree >= number of points".

Продолжим работу со сплайном и полиномом пятой степени, оставив только флаги spline interpolant и 5th degree polynomial на панели Plot Fits. При сбрасывании флага, график соответствующего приближения автоматически удаляется с осей. Вычислим значение полинома в точках и отобразим их маркерами на графике. Для этого:
  1. в раскрывающемся списке Fit на панели Numerical results выберем 5th degree polynomial;
  2. введем вектор [0 sqrt(2) 2*pi/3] в строку ввода на панели Find Y=f(X);
  3. установим флаг Plot evaluated results на панели Find Y=f(X);
  4. нажмем кнопку Evaluate на этой же панели.

На панели Find Y=f(X) появилась таблица значений полинома и они размечены на графике маркерами. Как было замечено в пункте Запуск приложения Basic Fitting и его основные компоненты, можно было воспользоваться и глобальной переменной рабочей среды, т.е., если бы мы создали вектор X, например, в командной строке:

>> X = [0 sqrt(2) 2*pi/3];

то на шаге 2) в строке ввода можно было указать имя переменной X.

Обратите внимание, что последняя точка с абсциссой 2П/3 лежит вне наших данных. В данном случае мы проделали экстраполяцию.

Аналогичным образом можно вычислить значения сплайна в заданных точках, выбрав на шаге 1) spline interpolant в раскрывающемся списке Fit на панели Numerical results.

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

Сохранение приближений и их значений в рабочей среде MATLAB и некоторые операции с ними

Приложение Basic Fitting позволяет сохранить информацию о построенном приближении полиномами или сплайнами в рабочей среде MATLAB, а также их значения в заданных точках, вычисленные при помощи панели Find Y=f(X). Построение полинома пятой степени, приближающего данные

x = 0:0.25:2;

y = sin(exp(x));

в смысле наименьших квадратов, а так же интерполяционного кубического сплайна описано в разделе Приближение данных полиномами по методу наименьших квадратов и сплайнами в приложении Basic Fitting. Будем считать, что окно приложения Basic Fitting открыто и эти приближения построены.

Полиномы и сплайны сохраняются в различных форматах. Начнем с полиномов. Для сохранения нужного приближения в рабочей среде следует выбрать его в раскрывающемся списке Fit на панели Numerical results, выберем в нем 5th degree polynomial и нажмем кнопку Save to workspace (сохранить в рабочей среде). Появляется диалоговое окно сохранения Save Fit to Workspace, приведенное ниже



В нем при помощи флагов следует выбрать, что именно нужно сохранить:
  • флаг Save fit as a MATLAB struct named - сохранение приближения в структуре;
  • флаг Save norm of residuals as a MATLAB variable named - сохранение значения нормы ошибки в переменной.

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

Примечание. В MATLAB следует давать имя переменной, предварительно убедившись, что оно не занято под функцию самого пакета. Для того, чтобы проверить, безопасно ли в этом смысле желаемое имя, можно обратиться к функции exist (это нужно делать до открытия окна Save Fit to Workspace), например:

>> exist('poly5')

ans =

0

Если ответ 0, то имя не занято и его можно использовать. Более подробная информация по возвращаемым функцией exist значениям есть в справочной системе (>> doc exist), где приведено, что обозначает тот или иной возвращаемый результат. Имена poly5 и norm5 не зарезервированы в MATLAB (в отличие, например от poly и norm), поэтому мы будем ими пользоваться.

После изменения имен следует нажать кнопку OK и перейти к окну MATLAB. В командное окно вывелось сообщение "Variables have been created in the current workspace" о создании новых переменных. Соответствующие переменные появились в рабочей среде, в чем несложно убедиться посмотрев в окно Workspace. (Если окно Workspace) отсутствует на экране, то следует в меню Desktop окна MATLAB выбрать пункт Workspace).

С переменной norm5 все ясно, она содержит среднеквадратичную норму ошибки. Переменная poly5 является структурой с полями type и coeff, для ее просмотра достаточно сделать двойной щелчок мышью в окне Workspace по ее имени для отображения содержимого переменной в появляющемся окне Array Editor редактора массивов. Второй способ - набрать ее имя в командной строке и нажать Enter.

>> poly5

poly5 =

type: 'polynomial degree 5'

coeff: [-0.7681 5.8165 -12.0474 7.4945 -1.0141 0.8553]

Для тех, кто не знаком с работой со структурами в MATLAB, достаточно заметить, что для доступа к коэффициентам полинома следует использовать конструкцию, в которой имя структуры poly5 отделено от названия поля точкой, т.е. оператор

>> c5 = poly5.coeff

c5 =

-0.7681 5.8165 -12.0474 7.4945 -1.0141 0.8553

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

В MATLAB предполагается, что полиномы представлены вектором их коэффициентов, начиная с коэффициента при старшей степени с учетом нулевых коэффициентов, т.е. например полином записывается вектором [4 0 2 7]. Работа с полиномами описана в следующих разделах справочной системы:
  • MATLAB: Mathematics: Polynomials
  • MATLAB: Function - Cathegorical List: Polynomials

Разумеется, доступны средства Symbolic Math ToolBox для произведения символьных вычислений с полиномами.

С построенными средствами приложения Basic Fitting полиномами можно производить, например, следующие действия:
  • вычисление произведения двух полиномов - функция conv;
  • деление с остатком одного полинома на другой - функция deconv;
  • построение полинома по заданным его корням - функция poly;
  • вычисление производной полинома - функция polyder;
  • вычисление первообразной полинома - функция polyint;
  • вычисление значения полинома в заданной точке или наборе точек - функция polyval;
  • нахождение всех корней полинома - функция roots.

Приведем несколько примеров для нашего экспортированного в рабочую среду из приложения Basic Fitting полинома.


>