MATLAB.Exponenta
–Û·Ë͇ Matlab&Toolboxes

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

В оглавление книги \ К следующему разделу

Функции Curve Fitting Toolbox

Управление вычислительным алгоритмом

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

Во-первых можно указать:

Во-вторых, при наличии ограничений сверху и снизу на искомые параметры линейной или нелинейной параметрической модели их также следует задать (см. раздел Опции для линейных параметрических моделей).

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

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

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

Способы задания опций вычислительного алгоритма

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

opts = fitoptions('method', 'НазваниеМетода', 'ИмяОпции1', значение1, ...)

Далее этот объект opts с опциями указывается:

  • либо при подборе параметров параметрической модели в списке входных аргументов функции fit:
    fresult = fit(xdata, ydata, 'libname', opts)
    
  • либо при создании параметрической модели в списке входных аргументов функции fittype:
    ftype = fittype('expr', 'options', opts)
    

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

fresult = fit(xdata, ydata, 'libname', 'ИмяОпции1', значение1, ...)

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

  1. создание объектов с параметрическими или непараметрическими моделями при помощи функции fittype (см. разд. Параметрические и непараметрические модели и примеры в нем);
  2. создание объектов с опциями вычислительного алгоритма так, как описано в этом разделе;
  3. подбор модели и параметров модели при помощи функции fit с указанием ей одного из объектов с моделью и одного из объектов с опциями вычислительного алгоритма так, как сделано в примерах этого раздела.

Зависимость набора опций от модели и способа приближения

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

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

Для нелинейных параметрических моделей этот набор расширяется. В нелинейном случе допускается выбор:

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

Вне зависимости от линейности или нелинейности выбранной модели при задании опций всегда имеется возможность указать:

  • веса;
  • часть исключаемых данных при подборе параметров;
  • нужно или нет масштабировать и центрировать исходные данные перед процессом подбора параметров.

Опция для задания весов

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

в которой (xk,yk)k=1,2,...,n являются исходными данными, а (wk)k=1,2,...,n есть заданные веса.

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

>> xdata=(-1:0.2:1)';
>> ydata=0.2*xdata.^4+4.6*xdata.^3-xdata-2;
>> n=length(xdata);
>> ydata(5:n)=ydata(5:n)+2*(rand(n-4,1)-0.5);

приблизив их полиномом четвертой степени. Рассмотрим два способа приближения этих данных:

  1. с одинаковыми весами (как это делается по умолчанию в функции fit, когда веса не заданы);
  2. зададим веса равные 1 для данных с 1-го по 4-ое и веса равные 0.01 для оставшихся данных.

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

>> wts=0.01*ones(size(xdata));
>> wts(1:4)=1;
>> opts=fitoptions('Weights',wts)

Примечание

Здесь для создания вектора с весами wts была использована функция ones. Она создает матрицу заданного размера, состоящую из единиц, т.е., например ones(5,1) или ones([5 1]) создает вектор-столбец из пяти единиц. Поскольку функция size возвращает размеры массива в векторе, то ее можно указывать во входном аргументе функции ones, что позволяет строить массивы из единиц, по размеру совпадающие с заданными.

Далее при помощи функции fittype создадим объект ftype, содержащий параметрическую модель - полином четвертой степени. Имя этой стандартной параметрической модели poly4 (стандартные параметрические и непараметрические модели, входящие в библиотеку моделей Curve Fitting Toolbox описаны в разд. Параметрические и непараметрические модели):

>> ftype = fittype('poly4')

Для приближения используем функцию fit, которую вызовем два раза:

  1. без сформированного объекта opts с управляющими опциями, результат запишем в fresult;
  2. с сформированным объектом opts с управляющими опциями, результат запишем в wfresult.
>> fresult = fit(xdata,ydata,ftype)
>> wfresult = fit(xdata,ydata,ftype,opts)

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

Примечание.

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

figure
subplot(1,2,1)
plot(fresult,xdata,ydata)
subplot(1,2,2)
plot(wfresult,xdata,ydata)

Ниже приведены результаты полученные результаты


Приближение без весов (слева) и с весами (справа)

Опция для исключения части данных

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

Приведем пример формирования объекта opts для указания исключаемого множества данных и подбора параметров. Рассмотрим данные с очевидными выбросами

>> xdata=(0:0.05:2)';
>> ydata=1.2*exp(-2*xdata)+0.05*randn(size(xdata));
>> ydata(10)=1.8;
>> ydata(15)=1.6;
>> ydata(20)=1.5;
>> ydata(25)=2.2;
>> ydata(30)=-0.9;
>> ydata(40)=-0.8;
>> plot(xdata,ydata,'.')


Данные с выбросами

Создадим логический массив для исключаемого множества, записав нули для тех данных, значения которых лежат вне диапазона [-0.5 1.4]:

>> outliers = excludedata(xdata,ydata,'range', [-0.5 1.4]);

Для приближения данных применим стандартную экспоненциальную параметрическую модель

aebx

Ее имя exp1 (стандартные параметрические и непараметрические модели, входящие в библиотеку моделей Curve Fitting Toolbox описаны в разд. Параметрические и непараметрические модели):

>> ftype=fittype('exp1');

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

>> opts=fitoptions('Exclude',outliers)

Приблизим данные экспоненциальной моделью, используя функцию fit, без исключения и получающееся приближение запишем в fresult:

>> fresult = fit(xdata,ydata,ftype)

fresult =
     General model Exp1:
       fresult(x) = a*exp(b*x)
     Coefficients (with 95% confidence bounds):
       a =       1.206  (0.6891, 1.722)
       b =      -1.329  (-2.203, -0.4558)

Теперь приблизим данные экспоненциальной моделью с указанием opts с информацией об исключаемой части данных и получающееся приближение запишем в exfresult:

>> exfresult = fit(xdata,ydata,ftype,opts)

exfresult =
     General model Exp1:
       exfresult(x) = a*exp(b*x)
     Coefficients (with 95% confidence bounds):
       a =       1.222  (1.164, 1.28)
       b =      -2.072  (-2.229, -1.914)

Заметим, что в случае приближения с исключенными выбросами значения параметров найдены вернее. Отобразим в одном графическом окне на разных осях, создаваемых при помощи функции subplot, графики двух моделей вместе с исходными данными. Графики построим при помощи переопределенной в Curve Fitting Toolbox функции plot, которая позволяет отметить исключаемые данные, если указать соответствующий им логический массив в качестве ее четвертого входного аргумента:

figure
subplot(1,2,1)
plot(fresult,xdata,ydata)
subplot(1,2,2)
plot(exfresult,xdata,ydata,outliers)

В результате получаем


Приближение без исключения выбросов (слева) и с исключением (справа)

Опция для масштабирования и центрирования данных

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

Масштабирование данных (xk,yk)k=1,2,...,n заключается замене xk на , вычисляемые для k=1,2,...,n по формуле

где μ - среднее значение

а σ соответственно - среднеквадратичное отклонение

Для автоматического масштабирования данных требуется при формировании функцией fitoptions объекта opts с опциями вычислительного алгоритма указать для опции Normalize значение 'on' (по умолчанию опция Normalize принимает значение 'off', т.е. масштабирование и центрирование не применяется).

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

>> xdata = [1951;  1952;  1953;  1954;  1955;  1956;  1957];
>> ydata = [1.2; 3.4; 2.9; 4.4; 4.5; 5.1; 4.2];

полиномом четвертой степени. Имя такой полиномиальной модели poly4 (стандартные параметрические и непараметрические модели, входящие в библиотеку моделей Curve Fitting Toolbox описаны в разд. Параметрические и непараметрические модели). Создадим соответствующий ей объект ftype при помощи функции fittype:

>> ftype=fittype('poly4');

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

>> fresult=fit(xdata,ydata,ftype);

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

Warning: Equation is badly conditioned. Remove repeated data points
         or try centering and scaling.

Выведем найденные значения параметров модели (т.е. коэффициенты полинома четвертой степени) при помощи функции coeffvalues, входящей в Curve Fitting Toolbox. Ее входным аргументом является объект fresult с найденным приближением:

>> format short e
>> c=coeffvalues(fresult)

c =
 -3.5997e-002  2.8134e+002 -8.2459e+005  1.0741e+009 -5.2470e+011

Посмотрим теперь, как изменятся параметры модели, если в исходные данные внести небольшую ошибку. Добавим к y(1) число 0.01 и измененный вектор значений запишем в переменную ydataerr

>> ydataerr = [1.21; 3.4; 2.9; 4.4; 4.5; 5.1; 4.2];

Снова выполним приближение данных xdata, ydataerr при помощи полинома четвертой степени без предварительного центрирования и масштабирования и выведем получающиеся значения параметров:

>> fresult=fit(xdata,ydataerr,ftype)
>> cerr=coeffvalues(fresult)

cerr =
 -3.5883e-002  2.8045e+002 -8.2198e+005  1.0707e+009 -5.2304e+011 

Видим, что ошибка в исходных данных в 0.01 привела к ошибке порядка 1e9 в коэффициентах полинома.

Теперь проделаем то же самое с предварительным центрированием и масштабированием данных, сформировав при помощи функции fittype объект opts со включенной опцией центрирования и масштабирования:

>> opts=fitoptions('Normalize','on');
>> nmfresult = fit(xdata,ydata,ftype,opts);
>> c=coeffvalues(nmfresult)
>> nmfresult = fit(xdata,ydataerr,ftype,opts);
>> cerr=coeffvalues(nmfresult)

c =
 -7.8367e-001 -8.4010e-002  8.9621e-001  1.2061e+000  3.9108e+000

cerr =
 -7.8120e-001 -8.6810e-002  8.9391e-001  1.2080e+000  3.9110e+000

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

Опции для интерполяционных сплайнов

Если в Curve Fitting Toolbox производится интерполяция:

  • кусочно-постоянными функциями по ближайшему соседу (опции method установлено значение NearestInterpolant);
  • кусочно-линейными функциями (опции method установлено значение LinearInterpolant);
  • кубическими сплайнами (опции method установлено значение CubicSplineInterpolant);
  • сплайнами, сохраняющими форму данных, т.е. кусочными полиномами Эрмита (опции method установлено значение PchipInterpolant);

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

opts=fitoptions('method', 'NearestInterpolant')
opts=fitoptions('method', 'LinearInterpolant')
opts=fitoptions('method', 'CubicSplineInterpolant')
opts=fitoptions('method', 'PchipInterpolant')

Такой вариант задания опций функцией fitoptions практически не используется, поскольку перечисленные способы интерполяции могут быть указаны сразу при создании объекта с моделью, например, для интерполяции кубическими полиномами Эрмита табличной функции:

>> xdata=(0:0.3:3)';
>> ydata=sin(xdata).^2.*exp(-xdata);

достаточно выполнить следующие команды:

 
>> ftype=fittype('pchipinterp');
>> fresult=fit(xdata,ydata,ftype)
>> plot(fresult,xdata,ydata)


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

Опции для сглаживающего сплайна

Если требуется приблизить данные сглаживающим сплайном, то опции method должно быть установлено значение SmoothingSpline. Тогда появляется возможность задать значение параметра, входящего в сглаживающий сплайн. Для этого надо установить опции SmoothingParam необходимое значение от 0 до 1.

Например, приблизим данные

>> xdata=(0:0.05:3)';
>> ydata=xdata.*exp(-xdata)+0.01*randn(size(xdata));

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

>> opts = fitoptions('Method','SmoothingSpline','SmoothingParam',0.9)

Затем сформируем объект ftype с моделью при помощи функции fittype, указав название модели в ее входном аргументе (стандартные параметрические и непараметрические модели Curve Fitting Toolbox описаны в разделе Параметрические и непараметрические модели)

>> ftype = fittype('smoothingspline')

Вызовем функцию fit для получения приближения fresult и применим переопределенную в Curve Fitting Toolbox функцию plot для визуализации исходных данных и вывода графика полученного сглаживающего сплайна

>> fresult = fit(xdata,ydata,ftype,opts)
>> plot(fresult,xdata,ydata)


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

Опции для линейных параметрических моделей

Примечание.

Описанные в этом разделе опции задаются также и для нелинейных параметрических моделей.

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

  • Robust - использование устойчивого процесса поиска параметров модели по отношению к выбросам в данных, возможные значения этой опции: 'on' (использовать устойчивый метод), 'off' (по умолчанию устойчивый метод не используется).
  • Lower - Вектор из значений нижних границ для искомых параметров линейной модели. Число элементов в нем должно совпадать с числом параметров модели, если некоторые параметры могут быть сколь угодно малы, то на соответствующей позиции в векторе ставится -Inf (в MATLAB так обозначается минус бесконечность). Если ограничения снизу на параметры модели отсутствуют, то значением является пустой массив, т.е [] (по умолчанию).
  • Upper - Вектор из значений верхних границ для искомых параметров линейной модели. Число элементов в нем должно совпадать с числом параметров модели, если некоторые параметры могут быть сколь угодно велики, то на соответствующей позиции в векторе ставится Inf (в MATLAB так обозначается плюс бесконечность). Если ограничения сверху на параметры модели отсутствуют, то значением является пустой массив, т.е [] (по умолчанию).

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

то, например вектор [0.1 2 -3 4.8], являющийся значением свойства Lower, соответствует следующим ограничениям снизу на параметры модели:

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

где (xk,yk)k=1,2,...,n - исходные данные, расстояние от искомой кривой до выброса окажет сильное влияние на значения параметров модели.

Одной из возможностей автоматического снижения влияния выбросов является назначение маленького веса соответствующим данным, или полное исключение выбросов из процесса подбора параметров (см. разделы Опция для задания весов и Опция для исключения части данных). Однако, такая ручная предварительная обработка не всегда может привести к желаемому результату, поскольку не всегда можно точно идентифицировать выброс, или подобрать нужный вес для снижения его влияния на приближение. Поэтому в Curve Fitting Toolbox предусмотрен адаптивный алгоритм построения приближения, в ходе которого данным автоматически присваиваются веса в зависимости от их удаления от полученной на данном шаге линии графика параметрической модели. Для задействования адаптивного алгоритма с целью снижения влияния выбросов в данных на приближение следует установить опции Robust значение 'on'.

В адаптивном алгоритме для снижения влияния выбросов на каждом шаге строится приближение по методу наименьших квадратов и вычисляются приведенные невязки ui (см. более подробно в справочной системе по Curve Fitting Toolbox раздел Fitting Data: Parametric Fitting: The Least Squares Fitting Method) и в зависимости от удаленности точек от приближающей их кривой данным назначаются веса по следующему правилу (чем дальше точка, тем меньше ее вес):

Далее процесс приближения повторяется, пока не выполнится некоторое условие сходимости.

Поскольку в описанном выше алгоритме при вычислении весов используется четвертая степень, то он называется bisquare weights (биквадратные веса).

Приведем пример, в котором задание опции Robust значения 'on' улучшает качество приближения. Рассмотрим следующие исходные данные, полученные из закона

y = 3.8x + 2.1

внесением распределенной по нормальному закону ошибки

>> xdata=(0:0.5:11)';
>> ydata=3.8*xdata+2.1+2*randn(size(xdata));

в которых есть два выброса (см. график ниже)

>> ydata(2)=35;
>> ydata(20)=5;


Данные с выбросами

При помощи функции fittype построим линейную параметрическую модель - полином первой степени - для проведения линейной регрессии (создание пользовательских линейных моделей в Curve Fitting Toolbox описано в разделе Приближение с созданием объекта для пользовательской линейной параметрической модели).

>> ftype=fittype({'x','1'})

ftype =
     Linear model:
       ftype(a,b,x) = a*x + b

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

>> fres=fit(xdata,ydata,ftype)

Получаем следующие значения параметров модели

res =
     Linear model:
       fres(x) = a*x + b
     Coefficients (with 95% confidence bounds):
       a =       2.638  (1.421, 3.854)
       b =       8.297  (0.4845, 16.11)

Теперь создадим объект с нужными настройками вычислительного алгоритма:

  • опция Method должна принимать значение 'LinearLeastSquares';
  • опция Robust должна принимать значение 'on'.
>> opts=fitoptions('Method', 'LinearLeastSquares','Robust','on');

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

>> frobres=fit(xdata,ydata,ftype,opts)

frobres =
     Linear model:
       frobres(x) = a*x + b
     Coefficients (with 95% confidence bounds):
       a =       3.739  (3.199, 4.28)
       b =       2.262  (-1.21, 5.734)

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

>> figure
>> subplot(1,2,1)
>> plot(fres,xdata,ydata)
>> subplot(1,2,2)
>> plot(frobres,xdata,ydata)

В результате получаем


Приближение данных без адаптивного выбора весов (слева) и с адаптивным выбором весов (справа)

Опции для нелинейных параметрических моделей

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

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

  • опцию Robust для выбора адаптивного алгоритма нахождения параметров, устойчивого к выбросам в исходных данных
  • опции Lower и Upper для задания нижних и верхних границ параметров модели.

Задание этих опций в случае линейных и нелинейных параметрических моделей производится аналогично.

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

то, например вектор [0.1 2 -3 4.8], являющийся значением свойства StartPoint, соответствует следующим начальным значениям параметров модели:

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

Для нелинейной модели, определенной пользователем, начальное приближение каждого параметра по умолчанию выбирается из отрезка [0, 1], а ограничения на параметры по умолчанию не задаются.

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

Начальные значения параметров и ограничения для стандартных параметрических моделей
Названия моделей Вид моделей Начальное приближение Ограничения на параметры
Экспоненциальные модели: exp1, exp2 Вычисляется по начальным данным по эвристическому алгоритму Нет
Отрезки ряда Фурье: fourier1, fourier2, ..., fourier8 Вычисляется по начальным данным по эвристическому алгоритму Нет
Гауссовы модели: gauss1, gauss2, ..., gauss8 Вычисляется по начальным данным по эвристическому алгоритму ck > 0
Полиномиальные модели: poly1, poly2, ..., poly9 Не требуется Нет
Степенные модели: power1, power2 Вычисляется по начальным данным по эвристическому алгоритму Нет
Дробно-рациональные модели: rat01, rat02, …, rat55 (первая цифра - степень числителя, вторая - степень знаменателя)
Сумма синусов: sin1, sin2, … , sin8
Случайное для каждого параметра из интервала [0,1] Нет
Сумма синусов: sin1, sin2, … , sin8 Вычисляется по начальным данным по эвристическому алгоритму bk > 0
Модель Вейбула: weibull Случайное для каждого параметра из интервала [0,1] a > 0
b > 0

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

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

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

Для настроек алгоритмов минимизации служат следующие опции:

  • TolFun - точность по функции (для завершения итерационного алгоритма нелинейной минимизации), по умолчанию 10e-6, при достижении этой точности алгоритм минимизации останавливается.
  • TolX - точность по искомым параметрам (для завершения итерационного алгоритма нелинейной минимизации), по умолчанию 10e-6, при достижении этой точности алгоритм минимизации останавливается.
  • DiffMinChange - минимальный шаг по каждой из искомых переменных (параметров модели) для вычисления приближенного вычисления частных производных (используемых в алгоритмах нелинейной минимизации) при помощи конечных разностей, по умолчанию 10e-8.
  • DiffMaxChange - максимальный шаг по каждой из искомых переменных (параметров модели) для вычисления приближенного вычисления частных производных (используемых в алгоритмах нелинейной минимизации) при помощи конечных разностей, по умолчанию 0.1.
  • MaxFunEvals - максимальное количество вычислений минимизируемой функции (для предотвращения зацикливания), по умолчанию минимизируемая функция вычисляется не более 600 раз, после чего алгоритм минимизации останавливается.
  • MaxIter - максимальное число итераций алгоритма минимизации (для предотвращения зацикливания), по умолчанию делается не более 400 итераций, после чего алгоритм минимизации останавливается.

Пример подбора параметров нелинейной модели

Возьмем в качестве исходных данные, полученные возмущением данных, которым соответствует нелинейная модель

y = 3ln(x - 0.9) - 7x

>> xdata=(1:0.02:3)';
>> ydata=3*log(xdata-0.9) - 7*xdata + 0.1*randn(size(xdata));
>> plot(xdata,ydata,'.')


Исходные данные для приближения нелинейной моделью

При помощи функции fittype построим для них нелинейную модель

>> ftype=fittype('a*log(x-b)+c*x')

Если теперь попытаться сразу применить функцию fit для подбора параметров в нашей модели

>> fres=fit(xdata,ydata,ftype)

то получим сообщение об ошибке

??? Complex value computed by model function, fitting cannot continue.
Try using or tightening upper and lower bounds on coefficients.

поскольку в процессе подбора под логарифмом оказалось неположительное значение.

Выход состоит в указании верхней границы для второго параметра , скажем 0.9 (см. раздел Опции для линейных параметрических моделей). Для этого создадим вектор с верхними границами параметров, положив для и верхние границы равные бесконечности (Inf)

>> up=[Inf 0.9 Inf]

и укажем этот вектор при задании настроек функцией fitoptions:

>> opts=fitoptions('Method', 'NonlinearLeastSquares',  'Upper', up);

Теперь подбор параметров выполняется успешно:

>> fres=fit(xdata,ydata,ftype,opts)

В командное окно выводятся значения коэффициентов вместе с границами доверительных интервалов, отвечающих вероятности 95%

   General model:
       fres(x) = a*log(x-b)+c*x
     Coefficients (with 95% confidence bounds):
       a =        2.92  (2.824, 3.016)
       b =      0.9064  (0.8946, 0.9183)
       c =      -6.982  (-7.007, -6.956)

Для визуализации данных и построенного приближения осталось применить переопределенную в Curve Fitting Toolbox функцию plot

>> figure
>> plot(fres,xdata,ydata)


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

В оглавление книги \ К следующему разделу


Поиск по сайту:

Система Orphus

Яндекс.Метрика