Интерполяция и приближение данных в matlab

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

Содержание


Материалы раздела Интерполяция и приближение данных в MATLAB
Средства MATLAB.
Какие функции MATLAB и методы используются в приложении Basic Fitting.
Задача о приближении данных полиномом в смысле наименьших квадратов.
Операции с полиномиальными приближениями.
Интерполяция сплайнами, сохраняющими форму (кубическими
Интерполяция двумерных и многомерных данных сплайнами.
Триангуляция Делоне
Нахождение ближайшей точки и симплекса, содержащего точку
Функции для метода коллокаций и работы с почти блочно-диагональными
Интерполирование при помощи функции spapi
Обзор средств MATLAB и ToolBox'ов для приближения данных
Средства MATLAB
Приложение Basic Fitting
Запуск приложения Basic Fitting и его основные компоненты
Приближение данных полиномами по методу наименьших квадратов и сплайнами в приложении Basic Fitting
Сохранение приближений и их значений в рабочей среде MATLAB и некоторые операции с ними
Какие функции MATLAB и методы используются в приложении Basic Fitting
Подобный материал:

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

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

Материалы раздела Интерполяция и приближение данных в MATLAB:

Обзор средств MATLAB и ToolBox'ов для приближения данных.
     Средства MATLAB.
        Приложение Basic Fitting
            Запуск приложения Basic Fitting и его основные компоненты.
            Приближение данных полиномами по методу наименьших квадратов и
            сплайнами в приложении Basic Fitting.
            Сохранение приближений и их значений в рабочей среде MATLAB и
            некоторые операции с ними.
            Работа с несколькими наборами данных.
             Какие функции MATLAB и методы используются в приложении Basic Fitting.
        Приближение полиномами в смысле наименьших квадратов.
             Задача о приближении данных полиномом в смысле наименьших квадратов.
            Метод наименьших квадратов.
            Когда функция polyfit выдает предупреждения, плохая обусловленность,
            центрирование и масштабирование данных.
             Операции с полиномиальными приближениями.
        Интерполяция.
            Интерполяция одномерных данных сплайнами.
                Интерполяция кубическими сплайнами.
                 Интерполяция сплайнами, сохраняющими форму (кубическими
                полиномами Эрмита).
            Интерполяция одномерных данных при помощи быстрого дискретного
            преобразования Фурье.
             Интерполяция двумерных и многомерных данных сплайнами.
            Построение параметрических моделей для приближения данных. Регрессия.
        Работа с разбросанными данными.
            Нахождение выпуклой оболочки множества точек и ее визуализация
             Триангуляция Делоне
            Построение диаграммы Вороного
            Как связаны выпуклая оболочка, триангуляция Делоне и диаграмма
            Вороного
            Нахождение площади многоугольника и пересечения четырехугольников
             Нахождение ближайшей точки и симплекса, содержащего точку
            Приближение разбросанных данных
Основы работы в Curve Fitting Toolbox.
Обзор возможностей и средств Spline Toolbox 3.2.
    Функции для аппроксимации и интерполирования.
    Функции для конструирования сплайнов.
    Функции для выполнения операций над сплайнами и визуализации сплайнов.
    Функции для работы с узлами, точками разрыва и полюсами интерполяции.
     Функции для метода коллокаций и работы с почти блочно-диагональными
        матрицами.
    Приложения для изучения сплайнов, интерполяции и аппроксимации.
Интерполяция кубическими сплайнами, функция csape
Задание граничных условий в функции csape
    Функция csapi для интерполяции с условиями отсутствия узла (not-a-knot)
Другие типы интерполяции в MATLAB
    Интерполяция кусочными полиномами Эрмита
Построение интерполяционных сплайнов в B-форме
     Интерполирование при помощи функции spapi
    B-форма, базисные сплайны
    Выбор узлов B-сплайнов
    Интерполирование B-сплайнами с заданными значениями производных

Обзор средств 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 полинома.

Пример 1. Интегрирование полинома, приближающего данные.

Напомним, что исходные табличные данные содержались в массивах

x = 0:0.25:2;

y = sin(exp(x));

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

>> Ic5 = polyint(c5)

Ic5 =

-0.1280 1.1633 -3.0118 2.4982 -0.5071 0.8553 0

Теперь для вычисления определенного интеграла от полинома, приближающего данные в смысле наименьших квадратов, осталось найти разность значений первообразной в правой и левой точках интервала, на котором заданы данные. Для этого применим функцию polyval, вызвав ее с двумя входными аргументами - вектором с коэффициентами первообразной Ic5 и значением аргумента, при котором ее надо вычислить, т.е. x(end) и x(1).

>> I = polyval(Ic5, x(end)) - polyval(Ic5, x(1))

I =

0.5113

Задача решена.

Пример 2. Поиск корней полинома, приближающего табличные данные.

Найдем корни полинома пятой степени, приближающего наши табличные данные

x = 0:0.25:2;

y = sin(exp(x));

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

>> r=roots(c5)

r =

4.6289

1.8786

1.1178

-0.0262 + 0.3375i

-0.0262 - 0.3375i

Нам подходят только второй и третий корни, поскольку только они принадлежат отрезку [0, 2] на котором определены данные. Осталось нанести их на график с данными и приближением, например красными маркерами-звездочками. Следует только предварительно выполнить hold on для того, чтобы графики данных и полиномиального приближения сохранились на осях:

>> hold on

>> plot([r(2) r(3)], 0, '*r')



В легенде появились строки data 2 и data 3, поскольку приложение Basic Fitting считает, что мы добавили новые данные. Эти строки легко изменить, перейдя в режим редактирования легенды двойным щелчком мыши.

Для отделения вещественных корней полинома, попадающих в отрезок [0, 2] можно было воспользоваться логическим индексированием, сформировав подходящее условие. Это удобно, когда корней много или требуется автоматизировать процесс выбора нужных корней. В нашем случае условие отбора корней является составным - требуется проверить, что корень является вещественным, больше или равен нуля и меньше или равен двум:

>> R = r(imag(r)==0 & r>=0 & r<=2)

R =

1.8786

1.1178

Более подробные сведения о логическом индексировании, операциях сравнения и условных операторов содержатся в справочной системе MATLAB в разделах:
  • MATLAB: Programming: Data types: How Logical Arrays Are Used;
  • MATLAB: Functions Cathegorical list: Programming and Data Types: Operators and Operations.

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

Экспортируем кубический сплайн, интерполирующий наши данные

x = 0:0.25:2;

y = sin(exp(x));

выбрав spline interpolant в раскрывающемся списке Fit на панели Numerical results (если сплайна нет, то его предварительно следует построить, см. Приближение данных полиномами по методу наименьших квадратов и сплайнами в приложении Basic Fitting). После нажатия на кнопку Save to workspace появляется диалоговое окно сохранения Save Fit to Workspace, в нем можно ввести имя для структуры, в которую будет записана информация о сплайне и имя переменной для значения среднеквадратичной нормы ошибки. Норма ошибки в данном случае равна нулю, поскольку сплайн интерполяционный, и соответствующий флаг окно сохранения Save Fit to Workspace можно сбросить. Введем имя для структуры sp3 и нажмем кнопку ОК. В рабочей среде создалась структура (о чем вывелось сообщение в командное окно "Variables have been created in the current workspace"), выведем ее

>> sp3

sp3 =

type: 'spline'

coeff: [1x1 struct]

Структура sp3 содержит два поля: поле type с информацией о том, что это сплайн, и поле coeff, которое также является структурой. Запишем его содержимое в новую структуру s3

>> s3 = sp3.coeff

s3 =

form: 'pp'

breaks: [0 0.2500 0.5000 0.7500 1 1.2500 1.5000 1.7500 2]

coefs: [8x4 double]

pieces: 8

order: 4

dim: 1

Это формат представления сплайна принятый в MATLAB и Spline Toolbox. Ряд функций, предназначенных для работы со сплайнами (поиск корней, интегрирование и т. д.), требуют задания сплайна именно в этом формате. Смысл полей структуры следующий:
  • form - кусочно-полиномиальная форма представления сплайна ('pp'). Приложение Basic Fitting умеет строить сплайны только кубические в кусочно-полиномиальной форме, т.е. заданные полиномами третьей степени на каждом отрезке между точками разрыва, координаты которых совпадают с координатами точек данных и содержатся в поле breaks. В Spline Toolbox возможна другая форма представления сплайна (B-форма), а также другие типы сплайнов.
  • breaks - координаты точек разрыва. В нашем примере их девять, они задают восемь отрезков, на каждом из которых определен кубический полином, коэффициенты каждого полинома записаны в соответствующем столбце массива coefs.
  • coefs - матрица с коэффициентами полиномов третьей степени, образующих сплайн, каждый ее столбец содержит коэффициенты полинома, определенного на соответствующем участке.
  • pieces - число участков сплайна (в нашем примере восемь).
  • order - порядок сплайна, который по определению на единицу больше степени полиномов (в нашем примере четыре).
  • dim - размерность (в нашем примере один). Приложение Basic Fitting умеет строить только сплайны для интерполяции одномерных данных, в то время, как MATLAB и Spline Toolbox позволяют приближать двумерные и многомерные данные.

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

Пример 3. Интегрирование интерполяционного кубического сплайна, приближающего табличные данные.

Для вычисления определенного интеграла от сплайна по отрезку [0, 2], на котором определены данные воспользуемся функциями fnint и fnval, входящими в Spline ToolBox. Функция fnint вычисляет первообразную для сплайна, принимающую нулевое значение на левой границе интервала. Её входным аргументом является приведенная выше структура с информацией об интегрируемом сплайне, а возвращает результат она в том же самом формате - в виде структуры с полями, имеющими те же названия. Разумеется, значение поля order для первообразной будет на единицу большей.

>> Is3 = fnint(s3)

Is3 =

form: 'pp'

breaks: [0 0.2500 0.5000 0.7500 1 1.2500 1.5000 1.7500 2]

coefs: [8x5 double]

pieces: 8

order: 5

dim: 1

Функция fnval предназначена для нахождения значений сплайна в заданных точках, ее входными аргументами являются: структура со сплайном и значение аргумента (или вектор значений).

>> I=fnval(Is3,2)-fnval(Is3,0)

I =

0.5348

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

Пример 4. Поиск корней сплайна, приближающего табличные данные.

Для решения этой задачи воспользуемся функцией fnzeros, входящей в состав Spline ToolBox. Если в качестве ее входного аргумента указать структуру со сплайном, то она вернет матрицу, состоящую из двух строк, которая строка которой содержит информацию о корнях сплайна. Вычисление корней производится на всем промежутке задания сплайна. Смысл элементов возвращаемой матрицы в данном случае простой:
  1. если значения элементов столбца совпадают, то это корень сплайна;
  2. если значения элементов столбца различны, то он содержит границы интервала, на котором сплайн тождественно равен нулю.

Для нашего сплайна, информация о котором записана в структуре s3, результат будет следующим:

>> r = fnzeros(s3)

r =

1.1453 1.8551

1.1453 1.8551

Т.е. корни сплайна имеют значения 1.1453 и 1.8551.

Работа с несколькими наборами данных

Приложение Basic Fitting позволяет работать с несколькими наборами данных. Их можно или сразу отобразить в графическом окне, либо добавлять данные при запущенном приложении Basiс Fitting (выполнив предварительно hold on для того, чтобы предыдущие данные не удалились с осей графического окна). Каждый набор данных автоматически получает имя: data1, data2 и т. д. Для перехода к требуемому набору следует использовать раскрывающийся список Select data приложения Basic Fitting. Для смены имени существует два способа:
  1. Сделать двойной щелчок по легенде, перейдя в режим редактирования, и ввести новое имя. Оно отобразится в раскрывающемся списке Select data.
  2. Изменить имя в редакторе свойств. Для этого следует отобразить его окно Property Editor, выбрав в меню View графического окна пункт Property Editor и в строке ввода Display Name ввести новое имя.

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

Если графики данных построены на разных осях в пределах одного графического окна, к примеру:

figure

x = 0:0.25:2;

sublot(2,1,1)

plot(x, sin(x), 'o')

sublot(2,1,2)

plot(x, cos(x), 'o')

то запуск приложения Basic Fitting позволит приближать данные, построенные на всех осях.

Какие функции MATLAB и методы используются в приложении Basic Fitting

Приложение Basic Fitting служит графической оболочкой для следующих функций MATLAB:

spline - для построения кубических сплайнов с граничным условием отсутствия узла (not-a-knot condition). Смысл этих условий пояснен в разделе Интерполяция одномерных данных сплайнами.

pchip - для построения сплайнов, сохраняющих форму данных, т.е. кубических полиномов Эрмита. Кубические полиномы Эрмита описаны в разделе Интерполяция сплайнами, сохраняющими форму (кубическими полиномами Эрмита).

polyfit - для приближения данных полиномами в смысле наименьших квадратов. Применение метода наименьших квадратов для приближения данных описано в разделе Приближение полиномами в смысле наименьших квадратов.

norm - для вычисления среднеквадратичной нормы ошибки.