Основы работы в Curve Fitting Toolbox

1.1. Обзор возможностей Curve Fitting Toolbox

Curve Fitting Toolbox позволяет:

1.   Работать с данными, заданными при помощи векторов в рабочей среде MATLAB, и, при необходимости, снабжать данные весами, так же задавая вектор их значений.

2.   Графически отображать исследуемые данные.

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

4.   Сглаживать и фильтровать данные различными способами.

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

6.   Отображать построенные приближения графически, форматировать графики и сохранять результаты в отдельных графических окнах.

7.   Вычислять различные критерии пригодности полученного приближения.

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

 

1.2. Функции и приложение cftool с графическим интерфейсом

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

1.   импортировать данные и веса, заданные в векторах рабочей среды MATLAB,

2.   экспортировать полученное приближение и анализ результатов в рабочую среду MATLAB;

3.   сохранять сессию в файле для продолжения работы;

4.   генерировать m-файл с файл-функцией, которая может быть использована для приближения других данных выбранным в cftool способом и для графического отображения результата без использования приложения cftool.

В одной сессии cftool допускается работа одновременно:

1.   с несколькими наборами данных;

2.   с различными приближениями для каждого набора;

3.   с подмножествами данных, полученных после исключения из основного подмножества по различным правилам.

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

Все функции Curve Fitting Toolbox могут быть условно разделены на несколько категорий.

Задание параметрических моделей и различных опций, подбор параметров и вычисление критериев пригодности приближения

fittype - выбор одной из стандартных параметрических и непараметрических моделей или создание произвольной параметрической модели.

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

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

cfit - создание параметрической модели с заданными значениями параметров (без их определения при помощи функции fit).

Информация о моделях и объектах, создаваемых функциями Curve Fitting Toolbox

cflibhelp - получение информации о стандартных параметрических моделях, входящих в Curve Fitting Toolbox.

disp - получение информации об объектах, создаваемых функциями Curve Fitting Toolbox.

Задание и получение значений свойств объектов, создаваемых функциями Curve Fitting Toolbox

get - получение свойств объектов.

set - задание свойств объектов.

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

excludedata - поиск данных, которые должны быть исключены из исходного набора в соответствии с выбранным правилом.

smooth - сглаживание данных с использованием различных способов.

datastats - нахождение минимального и максимального значений, среднего, стандартного отклонения.

Работа с полученным приближением

confint - вычисление доверительных интервалов для вычисленных параметров модели.

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

differentiate - дифференцирование построенной параметрической модели.

integrate - интегрирование построенной параметрической модели.

feval - вычисление значений параметрических моделей.

plot - построение графиков данных, параметрических моделей, ошибок.

Мы сначала рассмотрим основные этапы работы в приложении cftool, а затем обратимся к использованию функций, входящих в состав Curve Fitting Toolbox.

1.3. Основные этапы работы в приложении cftool

1.3.1. Импорт данных в MATLAB

В приложении cftool возможно приближать данные, записанные в глобальные массивы (вектора) рабочей среды MATLAB. Если данные хранятся в файле, то сначала требуется считать их в вектора, являющимися переменными рабочей среды MATLAB. Вполне возможно, что пользователь Curve Fitting Toolbox не владеет способами и функциями MATLAB для считывания данных, хранящихся в файлах, поэтому мы сначала обсудим, как считать данные из текстового или двоичного файла, или книги Excel и записать их в глобальные переменные. Если данные уже записаны в вектора, то этот раздел можно пропустить и перейти сразу к разделу Окно приложения cftool. Импорт данных в приложение cftool, в котором разбирается назначение окна приложения, перечисляются основные этапы работы и говорится о импорте тех данных в приложение cftool, которые уже находятся в рабочей среде MATLAB.

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

1.25 0.8973
1.44 1.2398
1.54 2.0019

Для записи столбцов файла в вектора MATLAB можно воспользоваться Мастером импорта (Import Wizard), для чего следует в меню File основного окна MATLAB выбрать пункт Import Data и в появившемся диалоговом окне открытия файла указать нужный файл. После нажатия в этом окне на кнопку Open появляется окно Мастера импорта (это второй шаг Мастера импорта), в котором можно указать:

1.   разделитель чисел в строке (пробел, табуляция, точка с запятой, запятая или произвольный символ-разделитель);

2.   сколько первых текстовых строк требуется пропустить при считывании данных из файла, если они есть;

3.   посмотреть на содержимое текстового файла и массивов, которые будут созданы в MATLAB.

4.   перейти на первый шаг Мастера импорта (кнопка Back), на котором можно выбрать другой файл с данными или получить доступ к системному буферу обмена.

После нажатия кнопки Next появляется окно последнего шага мастера

На последнем шаге можно

1.   посмотреть содержимое массива с данными, для чего нужно выделить его имя щелчком мыши;

2.   переименовать массив, для чего нужно сделать повторный щелчок мышью по его имени и ввести в появившееся поле новое имя.

После нажатия на кнопку Finish в рабочей среде окажется двумерный массив (с двумя столбцами) с выбранным именем. В нашем примере массив будет называться data (или так, как было задано на последнем шаге мастера).

Для последующей работы в приложении cftool следует создать два вектора x и y, содержащие, соответственно, первый и второй столбец массива data. Для этого следует ввести в командной строке MATLAB две команды, в которых производится индексация: для обращения ко всем элементам первого и второго столбцов массива data использовано двоеточие (индексация двоеточием), а номер выделяемого в вектор столбца задается числом:

>> x=data(:,1);
>> y=data(:,2);

Массивы данных x и y созданы в рабочей среде MATLAB (см., например, содержимое окна Workspace).

Если первая строка текстового файла с данными содержит заголовки столбцов, т.е. текстовый файл имеет следующий вид

XData  YData
1.25   0.8973
1.44   1.2398
1.54   2.0019

то на последнем шаге мастера установка переключателя Create vectors from each column using column names позволит сразу создать в рабочей среде два вектора XData и YData, содержащих, соответственно, первый и второй столбец данных.

Если данные находятся в книге Excel, содержащей один лист, то Мастер импорта также способен создать массив, в который будут записаны эти данные. Если между столбцами данных на листе Excel есть пустые столбцы, то в MATLAB получится массив, содержащий NaN (не числа - Not a Number) в ячейках этих столбцов. Т.е., например, данные Excel, содержащиеся в книге data.xls,

преобразуются в массив data среды MATLAB (имя, как и в предыдущем примере, можно изменить на последнем шаге мастера)

1.25 0.8973
1.44 1.2398
1.54 2.0019

а данные Excel

преобразуются в массив data

1.25 NaN   NaN  0.8973
1.44 NaN   NaN  1.2398
1.54 NaN   NaN  2.0019

содержащий четыре столбца. Запись содержимого столбцов в вектора из командной строки MATLAB производится аналогично предыдущему примеру, только следует указать не второй столбец, а четвертый.

>> x=data(:,1);
>> y=data(:,4);

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

>> A(:,2:3)=[]
A =
    1.2500    0.8973
    1.4400    1.2398
    1.5400    2.0019

Так же, как и в случае простых текстовых файлов, если столбцы с данными на листе книги Excel снабжены заголовками

то в Мастере импорта появляется возможность создать вектора данных, имена которых совпадают с именами заголовков столбцов, т.е. массивы XData и YData. Для запуска Мастера импорта из командной строки в MATLAB есть функция uiimport. Обращение к ней без входных аргументов

>> uiimport

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

>> uiimport('data.txt')

После такого обращения к функции uiimport появляется диалоговое окно со вторым шагом Мастера импорта, работа с которым описана выше.

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

1.25; 0.8973
1.44; 1.2398
1.54; 2.0019

то результатом выполнения команды

>> A=load('data.txt')

будет двумерный массив

A =
    1.2500    0.8973
    1.4400    1.2398
    1.5400    2.0019

Запись содержимого его столбцов в вектора x и y мы уже рассматривали выше, она производится при помощи простых команд

>> x=data(:,1);
>> y=data(:,2);

Функция load считает, что файл является текстовым, если его расширение отлично от mat. Если файл имеет расширение mat, то он считается двоичным. Про считывание данных из двоичного файла говорится чуть ниже.

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

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

Если, например, книга ExpData.xls содержит три листа, которые называются Experiment1, Experiment2, Experiment3 и первый лист такой, как на рисунке

то команда

>> A=xlsread('ExpData.xls')

приведет к появлению в рабочей среде следующего массива

A =
    0.1000    0.5670
    0.2000    0.9470
    0.3000    0.1230

(выделение значений из столбцов в вектора для импорта в приложение cftool было рассмотрено выше).

Если диапазон значений на первом листе содержит текст и пустые ячейки, то вместо них в возвращаемом функцией xlsread массиве будет находиться NaN (не числа - Not a Number). Например, если содержимое первого листа книги такое

то результатом работы функции xlsread будет массив с четырьмя столбцами и тремя строками

>> A=xlsread('ExpData.xls')
A =
    0.1000       NaN       NaN    0.5670
    0.2000       NaN       NaN    0.9470
    0.3000       NaN       NaN    0.1230

Для считывания данных из книги Excel не только с первого, а с произвольного листа, достаточно указать номер листа или его имя (в апострофах) в качестве второго входного аргумента. Если в книге ExpData.xls на втором листе с именем Experiment2 находятся такие данные

то следующие команды приводят к одинаковым результатам

>> A=xlsread('ExpData.xls',2)
A =
   11.0000    1.5670   12.5670
   12.0000    4.9470   16.9470
   13.0000    5.1230   18.1230
>> A=xlsread('ExpData.xls','Experiment2')
A =
   11.0000    1.5670   12.5670
   12.0000    4.9470   16.9470
   13.0000    5.1230   18.1230

Функция xlsread позволяет указать диапазон данных, которые требуется считать. Если диапазон данных указан в качестве ее второго входного аргумента, то происходит считывание данных из этого диапазона на первом листе книги Ecxel, а если во втором входном аргументе xlsread указать имя листа, а диапазон данных - в третьем, то будет производиться считывание данных из заданного диапазона этого листа. В предыдущем примере данные на листе Experiment2 расположены в диапазоне B2:C4, поэтому для их считывания следует применить:

>> A=xlsread('ExpData.xls','Experiment2','B2:C4')
A =
   11.0000    1.5670
   12.0000    4.9470
   13.0000    5.1230

Функция xlsread предоставляет удобную возможность интерактивного выделения диапазона считываемых данных. Если в качестве ее второго входного аргумента указать -1, то в Excel откроется книга, имя которой задано в первом входном аргументе функции xlsread, и появится диалоговое окно. Осталось выбрать лист, на листе выделить диапазон данных и нажать на кнопку OK в этом окне. Данные из выбранного диапазона вернутся в выходном аргументе функции xlsread.

Если требуется считать данные со всех листов книги Excel в рабочую среду MATLAB, то удобно занести их в структуру, поля которой будут совпадать с названиями листов книги, а их содержимое будет массивами числовых данных, расположенных на соответствующих листах книги. Перед считыванием данных из книги Excel следует узнать количество и названия листов. Эту информацию возвращает функция xlsinfo. Ее входным аргументом является имя книги, а в выходных возвращается строка с информацией "Microsoft Excel Spreadsheet" и массив ячеек, содержащий имена листов.

>> [type, sheets] = xlsfinfo('ExpData.xls')
type =
Microsoft Excel Spreadsheet
sheets = 
    'Experiment1'    'Experiment2'    'Experiment3'

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

function S=readxls(fname);
% Считывание данных из книги в структуру с полями, 
% являющимися названиями листов
 
[type, sheets] = xlsfinfo(fname); % получаем количество листов и их названия
S=[]; % сначала структура - пустой массив
% в цикле проходим по листам
for k=1:length(sheets) 
    sheetname=sheets{k}; % получаем название текущего листа
    data=xlsread(fname, sheetname); % считываем с него данные в числовой массив
    S=setfield(S,sheetname,data); % делаем числовой массив содержимым поля структуры
end

Для приведенной выше книги ExpData.xls с листами Experiment1, Experiment2 и Experiment3 наша функция readxls будет работать следующим образом

>> S=readxls('ExpData.xls')
S = 
    Experiment1: [3x4 double]
    Experiment2: [3x2 double]
    Experiment3: []

Поле Experiment1 содержит данные из листа Experiment1 книги ExpData.xls. Для доступа к содержимому поля следует указать его имя после имени структуры и разделить их точкой.

>> A=S.Experiment1
A =
    0.1000       NaN       NaN    0.5670
    0.2000       NaN       NaN    0.9470
    0.3000       NaN       NaN    0.1230

Рассмотрим еще импорт данных, заданных в двоичном файле. Файлы с данными в двоичном формате имеют расширение mat. Такие примеры, в которых данные читаются из файла в двоичном формате, приводятся в справочной системе, в том числе и по Curve Fitting Toolbox), например, в подкаталоге toolbox\matlab\demos\ содержится файл census.mat, в котором записаны два вектора cdate и pop. Для считывания данных из двоичного файла используется команда load, после нее ставится пробел и задается имя файла (двоичный файл с данными должен быть в текущем каталоге или в каталоге, имя которого записано в пути поиска MATLAB). Имя файла можно указывать без расширения.

>> load census

После этого в рабочей среде создаются два массива cdate и pop, содержащих записанные в файле данные. Т.е. в двоичном файле хранятся как имена переменных, так и их содержимое.

Для считывания значений только некоторых переменных из двоичного файла в рабочую среду MATLAB достаточно указать имена соответствующих переменных после имени файла. Например, если в рабочую среде требовалось создать только переменную cdate, содержащую данные из двоичного файла census.mat, то достаточно было выполнить следующую команду

>> load census cdate

Команда load, как и многие команды MATLAB, допускает функциональную форму вызова, но тогда все имена как файла, так и переменных следует задавать в апострофах, т.е. вместо

>> load census

можно писать

>> load('census')

Аналогично, команда

>> load census cdate

эквивалентна следующей функциональной форме

>> load('census', 'cdate')

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

>> S=load('census')
S = 
    cdate: [21x1 double]
      pop: [21x1 double]

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

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

Далее мы рассмотрим импорт данных в приложение cftool, предназначенное для решения задачи о подборе параметров.

1.3.2. Окно приложения cftool. Импорт данных в приложение cftool

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

>> XData=0:0.25:5;
>> YData=7*sin(XData)+0.1*randn(size(XData));

Теперь запустим приложении cftool, для чего достаточно набрать в командной строке MATLAB его имя

>> cftool

Появляется окно приложения (ниже приведена только часть окна cftool с указанием назначения основных его компонент).

Основные этапы решения задачи о подборе параметров параметрической модели, приближающей данные, в приложении cftool таковы:

1.   Импорт данных (кнопка Data);

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

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

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

Кроме того, возможно:

1.   Оставить только те графики данных и моделей, которые нужны в данный момент (кнопка Plotting).

2.   Форматировать графики данных и построенных параметрических моделей (контекстное меню линий графиков, инструменты окна cftool, меню Tool).

3.   Отобразить графически интервалы предсказаний наблюдаемых значений с заданной вероятностью (меню View, пункты Prediction Bounds, Confidence Level).

4.   Отобразить графически остатки (меню View, пункт Residuals).

5.   Экспортировать приближения и результаты их анализа в рабочую среду MATLAB (эта возможность есть в окнах, в которых строится приближение и проводится анализ).

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

7.   Сгенерировать файл-функцию, которую можно использовать впоследствии автономно от приложения cftool для получения построенного в приложении cftool приближения (меню File, пункт Generate M-file).

8.   Сохранить сессию и при следующих запусках приложения cftool восстановить ее (меню File, пункты Save Session, Load Session), а так же удалить все данные, и полученные результаты (меню File, пункт Clear Session).

9.   Вывести результаты в отдельное графическое окно (меню File, пункт Print to Figure).

10.                 Напечатать результаты (меню File, пункт Print).

Приложение cftool позволяет работать с несколькими наборами данных, строить для них различные правила исключения и различные параметрические модели. Поэтому наборы данных, правила исключения и параметрические модели следует снабжать именами. Импортируем наши сгенерированные данные, которые мы ввели выше в вектора XData и YData рабочей среды, в приложение cftool и дадим имя SinWithErr нашему набору данных. Для этого следует нажать кнопку Data. Появляется одноименное окно Data, назначение его элементов управления приведено на рисунке ниже.

В раскрывающихся списках X Data и Y Data следует выбрать имена глобальных переменных рабочей среды MATLAB, т.е. XData и YData, соответственно. После этого на правой панели окна Data строится примерный график выбранных данных.

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

После выбора векторов с данными следует задать имя множеству данных. Для этого следует ввести его имя SinWithErr в строку ввода Data set name и нажать кнопку Create data set (она становится доступной после выбора векторов, содержащих данные).

С созданным множеством данных можно проделать следующие операции (предварительно следует выделить его имя в списке Data sets):

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

В раскрывающемся списке Exclusion rules окна View Data Set можно выбирать правила исключения, пока он пуст, поскольку никаких правил мы не задавали.

2.   Переименовать выделенный набор данных, нажав на кнопку Rename, после чего появится диалоговое окно, в которое нужно будет ввести новое имя (пока этого делать не нужно, мы продолжим работу с ним).

3.   Удалить выделенный набор данных, нажав на кнопку Delete (этого, очевидно, тоже делать сейчас не нужно).

Множество данных создано, его график отобразился на осях основного окна приложения cftool. В окне Data можно также осуществлять сглаживание данных (вкладка Smooth), выбирая различные способы сглаживания. Этой операции посвящен раздел Сглаживание и фильтрация данных.

Далее мы разберем, как осуществить подбор параметров подходящей параметрической модели, входящей в набор стандартных параметрических моделей Curve Fitting Toolbox.

1.3.3. Приближение стандартными параметрическими и моделями. Работа с несколькими приближениями и несколькими наборами данных

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

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

Сначала лучше всего задать имя приближения, связанное с ним по смыслу, вместо предлагаемого по умолчанию имени fit1. Сперва мы будем пользоваться параметрическими моделями, в которой функции, использующиеся для приближения, являются синусом или суммой синусов, поэтому в строке ввода Fit Name диалогового окна Fitting введем имя SinModel. После этого в раскрывающемся списке Type of fit выберем Sum of Sin Functions (все стандартные параметрические модели Curve Fitting Toolbox рассмотрены в разделе Стандартные параметрические и непараметрические модели). Cписок, расположенный ниже, сменил название, теперь он называется Sum of Sin Functions и содержит восемь функций, каждая из которых является линейной комбинацией синусов, причем параметры входят как линейно (a1, a2, ..., a8), так и нелинейно (b1, b2, ..., b8 и c1, c2, ..., c8):

a1sin(b1x + c1),

a1sin(b1x + c1) + a2sin(b2x + c2),

a1sin(b1x + c1) + a2sin(b2x + c2) + ... + a8sin(b8x + c8),

Выберем в списке первую модель a1sin(b1x + c1) и нажмем кнопку Apply (если установлен флаг Immediate Apply, то подбор параметров начинается сразу же после выбора вида функции без нажатия на кнопку Apply). После вычисления коэффициентов приближения в окно Results выводится следующая информация

1.   Информация о модели

2.      General model Sin1:
3.             f(x) =  a1*sin(b1*x+c1)

4.   Найденные значения коэффициентов вместе с доверительными интервалами, соответствующими уровню вероятности 95%

5.      Coefficients (with 95% confidence bounds):
6.             a1 =       7.019  (6.966, 7.072)
7.             b1 =           1  (0.995, 1.006)
8.             c1 =       6.275  (6.261, 6.289)

9.   Вычисленные критерии пригодности приближения

10.  Goodness of fit:
11.    SSE: 0.1224
12.    R-square: 0.9998
13.    Adjusted R-square: 0.9997
14.    RMSE: 0.08245

На оси основного окна приложения cftool вывелся график приближения при найденном значении параметров, а в таблицу Table of Fits выводится имя приближения SinModel, имя набора данных SinWithErr, тип параметрической модели Sum of Sin Function и найденные значения критериев пригодности приближения.

Про различные критерии пригодности приближения, вычисляемые в Curve Fitting Toolbox, говорится в разделе Критерии пригодности приближения. Сейчас мы рассмотрим, как задавать различные начальные значения параметров и организовать работу с несколькими приближениями.

Найденные значения параметров модели a1sin(b1x + c1) таковы

a1 = 7.019, b1 = 1, c1 = 6.275

То, что найденное значение c1 не равно нулю (примерно), не испортило приближения (хотя исходные данные были 7sinx + шум), поскольку c1 = 6.275 ~ 2П, т.е. периоду функции синус. Создадим теперь новое приближение и перед началом процесса подбора параметров установим начальное приближение 0 для параметра c1. Для создания нового приближения следует нажать кнопку New Fit в диалоговом окне Fitting и ввести имя SinModel0 нового приближения в строку ввода Fit Name. После этого необходимо снова выбрать в раскрывающемся списке Type of fit строку Sum of Sin Functions и задать вид функции a1sin(b1x + c1) в расположенном ниже списке Sum of Sin Functions.

Теперь перед началом подбора параметров установим нулевое начальное приближение для параметра . Для этого следует нажать кнопку Fit Options и в появившемся диалоговом окне Fit Options в столбце StartPoint таблицы внизу окна установить для c1 начальное приближение, равное нулю, для чего надо щелкнуть по соответствующей ячейке и ввести 0. Все остальные параметры оставим такими, как они заданы по умолчанию. После чего окно Fit Options можно закрыть (назначение остальных элементов управления, количество которых зависит от выбранной модели, объясняется в разделе Опции, управляющие процессом подбора параметров).

Установив нулевое начальное приближение для параметра c1, снова проделаем подбор параметров, нажав кнопку Apply в диалоговом окне Fitting. По завершении процедуры подбора параметров в окно Results опять выводятся найденные значения коэффициентов модели (теперь значение параметра c1 близко к нулевому) вместе с доверительными интервалами, а так же информация о модели и вычисленные критерии пригодности полученного приближения. Оси основного окна приложения cftool теперь содержат графики исходных данных и двух приближений (графики приближений совпадают). При выборе в таблице Table of Fits окна Fitting одного из приближений в области Results автоматически отображается вся информация о нем. Для настройки вида таблицы служит кнопка Table Options (см. раздел Критерии пригодности приближения).

Для удаления приближения достаточно выбрать его в таблице Table of Fits и нажать кнопку Delete. Удалим, например приближение SinModel. Одновременно удаляется его график с осей основного окна приложения cftool.

Построим еще приближение наших данных полиномом третьей степени. Для этого снова нажмем кнопку New Fit и введем в строку ввода Fit Name имя Poly3. Убедимся, что в раскрывающемся списке Type of fit выбрано полиномиальное приближение (Polynomial) и в списке Polynomial выберем cubic polynomial, после чего нажмем кнопку Apply. Снова в окно Results выводится информация о модели, в данном случае модель линейная (Linear model), поскольку искомые параметры линейно входят в параметрическую полиномиальную модель (полиномиальная регрессия)

Linear model Poly3:
       f(x) = p1*x^3 + p2*x^2 + p3*x + p4

выводятся так же найденные значения коэффициентов полинома вместе с доверительными интервалами для уровня вероятности 95%

Coefficients (with 95% confidence bounds):
       p1 =      0.6341  (0.5438, 0.7243)
       p2 =       -6.02  (-6.707, -5.333)
       p3 =       13.02  (11.56, 14.48)
       p4 =      -1.134  (-1.955, -0.3128)

и значения критериев пригодности приближения

Goodness of fit:
  SSE: 4.733
  R-square: 0.991
  Adjusted R-square: 0.9894
  RMSE: 0.5276

В таблице Table of Fits добавилась информация о полиномиальном приближении: его имя Poly3, имя набора данных SinWithErr, тип параметрической модели Polynomial и найденные значения критериев пригодности приближения. На осях основного окна приложения cftool теперь отображаются: график исходных данных маркерами, приближение синусом и полиномом:

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

>> XData1=-3:0.02:3;
>> YData1=0.5*XData1+0.8+0.3*randn(size(XData1));

Импортируем данные в приложение cftool выбирая переменные XData1 и YData1 рабочей среды MATLAB в окне Data, как было описано в разделе Окно приложения cftool. Импорт данных в приложение cftool. Дадим имя LinWithErr набору данных и перейдем к окну Fitting. Для создания нового приближения нажмем кнопку New fit, затем введем имя приближения LinModel и выберем в раскрывающемся списке Data set наше множество данных LinWithErr. Осталось задать полиномиальную модель в раскрывающемся списке Type of fit, выбрать полином первой степени (linear polynomial) в списке Polynomial и нажать кнопку Apply.

Тип модели, найденные значения коэффициентов, критерии пригодности приближения выводятся в окно Results, в таблице Table of fits появилось новое приближение LinModel для нового набора данных LinWithErr с соответствующей информацией. Как и раньше, обновились оси основного окна приложения cftool, теперь они содержат два набора данных и три приближения, что очевидно, не очень наглядно:

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

1.3.4. Управление графиками данных, приближений и видом графиков

При работе с несколькими приближениями, и особенно, с несколькими наборами данных и приближениями для них очень часто требуется оставить на основных осях приложения cftool только нужные графики. Для управления графиками следует нажать кнопку Plotting в основном окне приложения cftool, что приводит к появлению диалогового окна Plotting

В этом окне в левой области Plot data sets расположены флаги для скрытия графиков данных (рядом с флагами написаны названия множеств данных), а в правой области Plot fits расположены флаги для скрытия графиков приближений (так же рядом с флагами написаны названия приближений). Удобно установить флаг Clear associated fits when clearing data sets, который предназначен для автоматического скрытия графиков приближений при скрытии соответствующих наборов данных.

При скрытии графиков данных или приближений сами множества данных или приближения не удаляются в приложении cftool, при необходимости их можно восстановить на осях основного окна приложения cftool, установив соответствующие флаги в окне Plotting. Если нужно удалить набор данных, то следует нажать кнопку Data в основном окне приложения, далее в списке Data sets диалогового окна Data выбрать имя ненужного набора и нажать кнопку Delete. Вместе с набором данных удалятся и связанные с ним приближения, о чем выводится предупреждение в окне Deleting data sets. Для удаления приближения следует перейти в диалоговое окно Fitting, нажав кнопку Fitting в основном окне приложения, выбрать имя ненужного приближения в таблице Table of fits и нажать кнопку Delete fit.

Мы не будем удалять наборы данных и приближения, а вместо этого выведем графики набора данных SinWithErr и приближений для него SinModel0 и Poly3 в одно графическое окно, а графики набора данных LinWithErr и приближения LinModel в другое графическое окно MATLAB. Для этого оставим сначала на осях основного окна приложения cftool только график SinWithErr и приближений для него SinModel0 и Poly3, сбросив остальные флаги в диалоговом окне Plotting. На осях основного окна приложения cftool остались только графики множества данных SinWithErr и приближений для него SinModel0 и Poly3. После этого выберем в меню File основного окна приложения cftool пункт Print to Figure. Появляется отдельное графическое окно с графиками множества данных SinWithErr и приближений для него SinModel0 и Poly3. Аналогично, в диалоговом окне Plotting оставим включенными флаги только для набора данных LinWithErr и приближения LinModel и выведем их в другое графическое окно MATLAB:

Теперь для форматирования графиков можно пользоваться стандартными средствами графического окна MATLAB.

Приложение cftool также позволяет форматировать графики, построенные в основном окне. Для этого можно использовать:

  • Контекстное меню линии графика приближения для задания цвета линии, типа линии и ее толщины, а также для скрытия линии или удаления соответствующего приближения.
  • Контекстное меню графика данных для задания маркера, цвета линии, ее типа и толщины, а также для скрытия линии.
  • Перемещение легенды при помощи мыши, а также ее контекстное меню для задания ее свойств.
  • Кнопку Legend on/off на панели инструментов основного окна приложения cftool для скрытия и отображения легенды.
  • Кнопку Grid on/off на панели инструментов основного окна приложения cftool для скрытия и отображения сетки.
  • Инструменты Zoom in и Zoom out на панели инструментов основного окна приложения cftool для увеличения или уменьшения графиков.
  • Добавлять к осям счетчики, для интерактивного изменения пределов осей (меню Tools основного окна приложения cftool, пункт Axis Limit Controls).
  • Очищать оси (меню View основного окна приложения cftool, пункт Clear Plot).
  • Добавлять график остатков (меню View основного окна приложения cftool, пункт Residuals, подпункты Scatter Plot - маркерами, Line Plot - непрерывной линией с маркерами).
  • Убирать график остатков (меню View основного окна приложения cftool, пункт Residuals, подпункт None).
  • Строить доверительные интервалы для линии регрессии, соответствующие различным уровням вероятности (для задания вероятности в меню меню View основного окна приложения cftool следует выбрать пункт Confidence Level, а для построения или удаления доверительных интервалов - пункт Prediction Bounds).

На следующем рисунке приведен вид основного окна приложения cftool с графиком остатков и доверительными интервалами линии линейной регрессии, построенной выше для множества данных LinWithErr. Визуальная оценка графика распределения остатков позволяет говорить о хорошем соответствии модели реальному поведению данных.

1.3.5. Стандартные параметрические и непараметрические модели

Curve Fitting Toolbox содержит ряд стандартных параметрических и непараметрических моделей, которые выбираются в диалоговом окне Fitting. Для перехода в это окно следует нажать кнопку Fitting в основном окне приложения cftool.


Диалоговое окно Fitting

Всего имеется 10 стандартных типов для параметрического и непараметрического приближения (параметры обозначаются a,b,c,d,a1,b1,p1...).

Параметрические модели

1. Экспоненциальные модели (Exponential)

2. Отрезки ряда Фурье (Fourier)

3. Сумма синусов (Sum of Sin Functions)

4. Гауссовы модели (Gaussian)

5. Модель Вейбула (Weibull)

6. Степенные модели (Power)

7. Полиномиальные модели (Polynomials)

8. Дробно-рациональные модели (Rational)

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

Искомыми являются коэффициенты полиномов, стоящих в числителе и знаменателе дроби.
При выборе модели этого типа в раскрывающемся списке Type of fit появляются два списка для выбора степени числителя и знаменателя


Выбор дробно-рациональной модели в диалоговом окне Fitting

Непараметрические модели

1. Интерполяционные сплайны (Interpolant)

linear - кусочно-линейное приближение (точки данных соединяются отрезками прямых).


Кусочно- линейное приближение

nearest neibour - кусочно-постоянная интерполяция по ближайшему соседу.


Интерполяция по ближайшему соседу

cubic spline - интерполяция данных кубическим сплайном. Получается тот же самый сплайн, который строит функция spline, входящая в набор функций MATLAB (см. Интерполяция кубическими сплайнами.)


Интерполяция кубическим сплайном

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


Интерполяция эрмитовым сплайном
(значения сплайна не превосходят значения данных)

2. Сглаживающий сплайн (Smoothing Spline)

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

где
(xk,yk)k=1,2,...,n - приближаемые данные;
wk - веса данных (если они не были заданы, то принимаются равными единице);
p - сглаживающий параметр, изменяющийся от 0 до 1, который определяет кривизну получающегося сплайна. Если задавать значения сглаживающего параметра близкие к нулю, то сглаживающий сплайн будет похож на прямую, приближающую данные в смысле наименьших квадратов, поскольку основным в минимизируемом функционале станет второе слагаемое

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

которое отвечает за прохождение сплайна через заданные точки. При p=1 сглаживающий сплайн превращается в обыкновенный кубический сплайн.

На практике при применении сглаживающего сплайна часто значение сглаживающего параметра выбирают примерно равным

где h - среднее расстояние между точками , в которых определены приближаемые данные.

Значения сглаживающего параметра задаются в диалоговом окне Fitting (соответствующие переключатели, кнопки и область ввода появляются после выбора Smoothing Spline в раскрывающемся списке Type of fit)


Задание параметра для сглаживающего сплайна

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


Приближение данных сглаживающим сплайном
для различных значений сглаживающего параметра.

1.3.6. Создание собственной параметрической модели

Кроме предопределенных моделей, описанных в предыдущем пункте Стандартные параметрические и непараметрические модели, пользователь приложения cftool имеет возможность создавать собственные модели, в которые искомые параметры входят как линейно, так и нелинейно. Для создания собственной модели следует в диалоговом окне Fitting в раскрывающемся списке Type of fit выбрать пункт Custom Equations и нажать на кнопку New equation.


Создание собственной параметрической модели

После этого появляется диалоговое окно Create Custom Equation, содержащее две вкладки:

Linear Equation - для задания параметрической модели, линейно зависящей от искомых параметров

General Equation - для задания произвольной параметрической модели, в которую параметры могут входить нелинейно.


Диалоговое окно Create Custom Equation для
создания собственных линейных и нелинейных параметрических моделей

Для задания линейной параметрической модели следует выбрать независимую переменную в строке ввода Independent variable (можно оставить переменную x, предлагаемую по умолчанию) и последовательно добавлять функции при искомых коэффициентах. Для добавления каждой следующей функции требуется нажать кнопку Add a term.

Пусть, например, требуется создать параметрическую модель

Для этого изменяем a на a1 в первой строке ввода столбца Unknown Coefficients и набираем в расположенной рядом строке ввода (столбца Terms) вместо sin(x-pi) выражение x*exp(-x). Далее нажимаем кнопку Add a term, изменяем b на a2 и набираем в расположенной рядом строке ввода exp(-x). Последний коэффициент, аддитивно входящий в нашу модель, добавляется автоматически, так как установлен флаг Unknown constant coefficient. Осталось исправить c на a3. В результате области ввода диалогового окна Create Custom Equation должны выглядеть так, как показано ниже на рисунке


Создание линейной параметрической модели

Формулы набираются в соответствии с правилами MATLAB с использованием знаков +, -, *, /, ^ (возведение в степень) для арифметических операций, круглых скобок для изменения их приоритета и встроенных математических функций, список которых можно получить, задав в командном окне MATLAB команду

>> help elfun

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

Тригонометрические функции (аргумент задаётся в радианах)

sin, cos, tan, cot

Синус, косинус, тангенс и котангенс

sec, csc

Секанс, косеканс

Обратные тригонометрические функции (результат вычисляется в радианах)

asin, acos, atan, acot

Арксинус, арккосинус, арктангенс и арккотангенс

asec, acsc

Арксеканс, арккосеканс

Гиперболические функции

sinh, cosh, tanh, coth

Гиперболические синус, косинус, тангенс и котангенс

sech, csch

Гиперболические секанс и косеканс

asinh, acosh, atanh, acoth

Гиперболические арксинус, арккосинус, арктангенс и арккотангенс

Экспоненциальная функция, логарифмы, степенные функции

Exp

Экспоненциальная функция

log, log2, log10

Натуральный логарифм, логарифмы по основанию 2 и 10

Sqrt

Квадратный корень

Модуль, знак

abs, sign

Модуль и знак числа

В строке ввода Equation name внизу диалогового окна Create Custom Equation отображается формула, задающая параметрическую модель. Вместо этой формулы можно ввести произвольное имя для параметрической модели, которое будет ее идентифицировать в дальнейшем при подборе параметров.

Для создания модели осталось нажать кнопку OK, после чего данная модель (формула или имя модели) появляется в списке Custom Equation диалогового окна Fitting. Модели в этом списке можно удалять (кнопка Delete рядом со списком), а также модифицировать и добавлять измененную модель в список (кнопка Copy).

После создания собственной модели можно выбирать встроенные модели для приближения данных, но при выборе в диалоговом окне Fitting в раскрывающемся списке Type of fit пункта Custom Equations появляются все созданные ранее пользовательские параметрические модели.

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

Для этого необходимо в диалоговом окне Fitting в раскрывающемся списке Type of fit выбрать пункт Custom Equations, нажать на кнопку New equation и в появившемся диалоговом окне Create Custom Equation перейти на вкладку General Equation.


Создание нелинейной параметрической модели

В строке ввода Independent variable вводится независимая переменная (можно оставить переменную x, предлагаемую по умолчанию), а в строке ввода ниже формула, задающая параметрическую модель. В нашем случае это будет

(a*x^2+b*x+c)*exp(-(a*x^2+b*x+c))

Кроме выражения для параметрической модели следует задать в таблице под строкой ввода также границы интервалов, в которых могут находиться искомые параметры (для задания бесконечного интервала достаточно оставить Inf или -Inf для правой, или левой границы, соответственно), и начальные приближения для них. В линейной параметрической модели это не требуется, поскольку приближение по методу наименьших квадратов линейной моделью приводит к решению системы линейных алгебраических уравнений относительно искомых коэффициентов. При приближении данных нелинейными параметрическими моделями решается задача минимизации нелинейной функции и соответствующий алгоритм должен получить начальные значения параметров и границы их возможных значений. Начальные значения могут сильно повлиять на получающееся приближение. Начальные значения параметров и границы допустимых интервалов для них потом можно изменить, воспользовавшись кнопкой Fit options в диалоговом окне Fitting.

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

Для создания модели осталось нажать кнопку OK внизу диалогового окна Create Custom Equation. Только что созданная модель (формула или имя модели) появляется в списке Custom Equation диалогового окна Fitting. Модели в этом списке можно удалять (кнопка Delete рядом со списком), а также модифицировать и добавлять измененную модель в список (кнопка Copy).

Так же как и в случае линейной параметрической модели, после создания собственной непараметрической модели можно выбирать встроенные или другие пользовательские модели для приближения данных, но при выборе в диалоговом окне Fitting в раскрывающемся списке Type of fit пункта Custom Equations появляются все созданные ранее пользовательские параметрические модели.

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

>> x=0:0.1:3;
>> y=exp(-2*x.^2).*sin(4*x.^2)+exp(-x.^2).*sin(x)+0.01*rand(size(x));

Далее импортируем их в приложение cftool так, как описано в разделе Окно приложения cftool. Импорт данных в приложение cftool и дадим имя DATA нашему набору данных. В окне Fitting создадим новое приближение с именем FIT1 (см. раздел Приближение стандартными параметрическими и моделями. Работа с несколькими приближениями и несколькими наборами данных.) и определим следующую нелинейную параметрическую модель

так, как мы делали это выше в данном разделе, введя выражение

exp(-a*x^2)*sin(b*x^2)+ exp(-с*x^2)*sin(в*x) 

в окне Create Custom Equation (на вкладке General Equation). Установим в качестве начальных приближений для параметров следующие значения

     a=5
     b=5
     c=5
     d=5

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

     a=-1
     b=1
     c=1
     d=1

Для этого следует нажать на кнопку Fit options в диалоговом окне Fitting и в появившемся диалоговом окне в таблице ввести эти значения. После чего сделаем подбор параметров с новыми начальными приближениями, нажав кнопку Apply. Результаты для одной и той же параметрической модели с различными начальными значениями параметров совершенно отличаются друг от друга, второе приближение просто неверно.


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

В следующем разделе мы рассмотрим другие опции, которые служат для управления процессом подбора параметров.

1.3.7. Опции, управляющие процессом подбора параметров

Для задания опций вычислительных алгоритмов, использующихся для подбора параметров служит кнопка Fit options диалогового окна Fitting. После нажатия на эту кнопку появляется диалоговое окно, в заголовке которого написано Fit options for и далее указано имя параметрической модели.

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

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

Для других типов параметрических моделей диалоговое окно Fit options for выглядит следующим образом


Диалоговое окно Fit options for
для задания опций вычислительных алгоритмов

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

Раскрывающийся список Robust содержит четыре возможные опции On, Off, LAR и Bisquare и служит для выбора метода приближения, устойчивого к выбросам в данных. Искомые значения параметров a1,a2,...,ak определяются как решение задачи минимизации суммы квадратов невязок, т.е. суммы квадратов расстояний от точек данных (xj,yj)j=1,2,...,n, до приближающей их кривой y(xj;a1,a2,...,ak):

Если данные (xj,yj)j=1,2,...,n снабжены весами (wj)j=1,2,...,n, то решается следующая задача минимизации (если веса не заданы, то по умолчанию они считаются равными единице):

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

>> x=1:10;
>> y=2*x+3+randn(size(x));

а выброс в девятой точке равен нулю

>> y(9)=0;


Линейная регрессия данных без выброса (слева) и с выбросом (справа). Коэффициенты линейной функции находятся из условия минимума суммы квадратов невязок, все веса равны единице.

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

Одним из способов уменьшения влияния выбросов на качество получаемого приближения состоит в минимизации суммы не квадратов невязок, а их модулей. Для этого служит опция LAR (least absolute residuals). После выбора LAR в раскрывающемся списке Robust диалогового окна Fit options for и снова провести линейную регрессию, то мы увидим, что выброс в данных намного меньше влияет на получающееся приближение линейной функцией (см. рисунок ниже). С другими типами параметрических моделей дело будет обстоять аналогичным образом.


Линейная регрессия данных с выбросом справа. Коэффициенты линейной функции находятся из условия минимума суммы квадратов невязок (слева), или из условия минимума суммы модулей невязок (справа). Все веса равны единице.

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

Зададим веса всем данным равные единице, кроме выброса, а для выброса установим вес 0.1:

>> w=ones(size(x));
>> w(9)=0.1;

Снова приблизим данные линейной параметрической моделью, только теперь следует импортировать их заново в приложение cftool, нажав кнопку Data в основном окне приложения и выбрав массивы x, y и w в раскрывающихся списках XData, Y Data и Weights, соответственно. Перед началом подбора параметров выберем метод наименьших квадратов, для чего следует нажать кнопку Fit options в диалоговом окне Fitting и установить опцию Off в раскрывающемся списке Robust диалогового окна Fit options for. Получающееся приближение приведено на рисунке ниже, заметно, что выброс практически не оказывает влияния на приближение.


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

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

1.   делает приближение, подбирая параметры по методу наименьших квадратов;

2.   вычисляются приведенные невязки (см. более подробно в справочной системе по Curve Fitting Toolbox раздел Fitting Data: Parametric Fitting: The Least Squares Fitting Method);

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

4.   если веса достаточно сильно изменились, то переходим к п. 1), а если процесс сошелся, то останавливаем алгоритм, нужное приближение построено.

Поскольку в приведенном выше адаптивном алгоритме присутствует четвертая степень невязки, то он называется Bisquare weights (биквадратные веса). Для выбора такого способа приближения параметрической моделью следует установить опцию Bisquare в раскрывающемся списке Robust диалогового окна Fit options for. Разумеется, если пользователь задал данные и некоторые начальные веса, то они изменятся. Результирующий вес для каждой точки будет являться произведением исходного веса на тот, который вычисляет алгоритм Bisquare weights.

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


Приближение данных с выбросом линейной моделью при помощи алгоритма isquare weights.

Другие опции в диалоговом окне Fit options for связаны с алгоритмами минимизации целевой функции (в общем случае взвешенной суммы квадратов или модулей невязки).

Раскрывающийся список Algorithm содержит три опции:

  • Trust-Region (метод доверительных областей) - используемый по умолчанию алгоритм минимизации целевой функции. Если на искомые коэффициенты параметрической модели наложены ограничения, то использование этого алгоритма обязательно.
  • Levenberg-Marquardt (метод Левенберга- Марквардта) - можно использовать в задачах без ограничений на коэффициенты.
  • Gauss-Newton - классический метод Ньютона.

Все эти алгоритмы реализованы в функциях Optimization Toolbox, которые и используются при минимизации целевой функции при подборе параметров в параметрических моделях, приближающих данные, в Curve Fitting Toolbox.

Следующие опции в диалоговом окне Fit options for служат для настройки этих алгоритмов.

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

MaxIter - максимальное число итераций алгоритма минимизации (для предотвращения зацикливания), по умолчанию делается не более 400 итераций, после чего алгоритм минимизации останавливается.

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

TolX - точность по искомым параметрам (для завершения итерационного алгоритма), по умолчанию 10e-6, при достижении этой точности алгоритм минимизации останавливается.

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

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

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

Тип модели

Начальное приближение

Ограничения на параметры

Линейная модель, определенная пользователем

Не требуется

Нет

Нелинейная модель, определенная пользователем

Случайное для каждого параметра из интервала [0,1]

Нет

Экспоненциальные

Вычисляется по начальным данным по эвристическому алгоритму

Нет

Отрезки ряда Фурье

Вычисляется по начальным данным по эвристическому алгоритму

Нет

Гауссова

Вычисляется по начальным данным по эвристическому алгоритму

 

Полиномиальная

Не требуется

Нет

Степенные

Вычисляется по начальным данным по эвристическому алгоритму

Нет

Дробно-рациональная

Случайное для каждого параметра из интервала [0,1]

Нет

Сумма синусов

Вычисляется по начальным данным по эвристическому алгоритму

bk > 0

Вейбула

Случайное для каждого параметра из интервала [0,1]

a > 0,b > 0