fittype

Тип подгонки для кривого и поверхностного подбора кривой

Описание

пример

aFittype = fittype(libraryModelName) создает fittype aFittype объекта для модели, заданной как libraryModelName.

пример

aFittype = fittype(expression) создает тип подгонки для модели, заданный MATLAB® выражение.

пример

aFittype = fittype(expression,Name,Value) создает тип модели с дополнительными опциями, заданными одной или несколькими Name,Value аргументы в виде пар.

aFittype = fittype(linearModelTerms) создает тип аппроксимации для пользовательской линейной модели с терминами, заданными массивом ячеек выражений векторов символов в linearModelTerms.

aFittype = fittype(linearModelTerms,Name,Value) создает тип модели с дополнительными опциями, заданными одной или несколькими Name,Value аргументы в виде пар.

пример

aFittype = fittype(anonymousFunction) создает тип модели, заданный как anonymousFunction.

пример

aFittype = fittype(anonymousFunction,Name,Value) создает тип модели с дополнительными опциями, заданными одной или несколькими Name,Value аргументы в виде пар.

Примеры

свернуть все

Создавать типы подгонки путем определения имен библиотечных моделей.

Создайте fittype объект для кубической модели полиномиальной библиотеки.

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

Создайте тип подгонки для модели библиотеки rat33 (рациональная модель третьей степени как для числителя, так и для знаменателя).

f = fittype('rat33')
f = 
     General model Rat33:
     f(p1,p2,p3,p4,q1,q2,q3,x) = (p1*x^3 + p2*x^2 + p3*x + p4) /
               (x^3 + q1*x^2 + q2*x + q3)

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

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

Идентифицируйте линейные условия модели, которые вы должны ввести в fittype: a*x + b*sin(x) + c. Модель линейна в a, b и c. У него три условия x, sin(x) и 1 (потому что c=c*1). Чтобы задать эту модель, вы используете этот массив ячеек терминов: LinearModelTerms = {'x','sin(x)','1'}.

Используйте массив ячеек линейных членов модели в качестве входов для fittype.

ft = fittype({'x','sin(x)','1'})
ft = 
     Linear model:
     ft(a,b,c,x) = a*x + b*sin(x) + c

Создайте тип линейной модели для a*cos(x) + b.

ft2 = fittype({'cos(x)','1'})
ft2 = 
     Linear model:
     ft2(a,b,x) = a*cos(x) + b

Создайте тип подгонки еще раз и укажите имена коэффициентов.

ft3 = fittype({'cos(x)','1'},'coefficients',{'a1','a2'})
ft3 = 
     Linear model:
     ft3(a1,a2,x) = a1*cos(x) + a2

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

Создайте тип модели для пользовательской нелинейной модели, обозначая n как зависимый от задачи параметр и u как независимая переменная.

g = fittype('a*u+b*exp(n*u)',...
            'problem','n',...
            'independent','u')
g = 
     General model:
     g(a,b,n,u) = a*u+b*exp(n*u)

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

g = fittype('a*time^2+b*time+c','independent','time','dependent','height')
g = 
     General model:
     g(a,b,c,time) = a*time^2+b*time+c

Создайте тип подгонки для логарифмической подгонки к некоторым данным, используйте тип подгонки для создания подгонки и постройте график подгонки.

x = linspace(1,100);  
y = 5 + 7*log(x);
myfittype = fittype('a + b*log(x)',...
    'dependent',{'y'},'independent',{'x'},...
    'coefficients',{'a','b'})
myfittype = 
     General model:
     myfittype(a,b,x) = a + b*log(x)
myfit = fit(x',y',myfittype)
Warning: Start point not provided, choosing random start point.
myfit = 
     General model:
     myfit(x) = a + b*log(x)
     Coefficients (with 95% confidence bounds):
       a =           5  (5, 5)
       b =           7  (7, 7)
plot(myfit,x,y)

Figure contains an axes. The axes contains 2 objects of type line. These objects represent data, fitted curve.

Можно задать любую команду MATLAB и, следовательно, любую .m файл.

Определите функцию в файле и используйте ее, чтобы создать тип подгонки и подгонку кривой.

Задайте функцию в файле MATLAB.

function y = piecewiseLine(x,a,b,c,d,k)
% PIECEWISELINE   A line made of two pieces
% that is not continuous.

y = zeros(size(x));

% This example includes a for-loop and if statement
% purely for example purposes.
for i = 1:length(x)
    if x(i) < k,
        y(i) = a + b.* x(i);
    else
        y(i) = c + d.* x(i);
    end
end
end

Сохраните файл.

Задайте некоторые данные, создайте тип подгонки, задающий функцию piecewiseLine, создать подгонку с использованием типа подгонки ft, и постройте график результатов.

x = [0.81;0.91;0.13;0.91;0.63;0.098;0.28;0.55;...
    0.96;0.96;0.16;0.97;0.96];
y = [0.17;0.12;0.16;0.0035;0.37;0.082;0.34;0.56;...
    0.15;-0.046;0.17;-0.091;-0.071];
ft = fittype( 'piecewiseLine( x, a, b, c, d, k )' )
f = fit( x, y, ft, 'StartPoint', [1, 0, 1, 0, 0.5] )
plot( f, x, y ) 

Создайте тип модели с помощью анонимной функции.

g = fittype( @(a, b, c, x) a*x.^2+b*x+c )

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

g = fittype( @(a, b, c, d, x, y) a*x.^2+b*x+c*exp(...
 -(y-d).^2 ), 'independent', {'x', 'y'},...
     'dependent', 'z' );

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

g = fittype( @(a,b,c,d,x,y) a*x.^2+b*x+c*exp( -(y-d).^2 ), ...
        'problem', {'c','d'}, 'independent', {'x', 'y'}, ...
        'dependent', 'z' ); 

Используйте анонимную функцию, чтобы передать данные рабочей области в fittype и fit функций.

Создайте и постройте график S-образной кривой. На последующих шагах вы растягиваете и перемещаете эту кривую, чтобы соответствовать некоторым данным.

% Breakpoints.
xs = (0:0.1:1).';
% Height of curve at breakpoints.
ys = [0; 0; 0.04; 0.1; 0.2; 0.5; 0.8; 0.9; 0.96; 1; 1];
% Plot S-shaped curve.
xi = linspace( 0, 1, 241 );
plot( xi, interp1( xs, ys, xi, 'pchip' ), 'LineWidth', 2 )
hold on
plot( xs, ys, 'o', 'MarkerFaceColor', 'r' )
hold off
title S-curve

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

ft = fittype( @(b, h, x) interp1( xs, b+h*ys, x, 'pchip' ) )

Постройте график fittype определение примера коэффициентов основы b=1.1 и высота h=-0.8.

plot( xi, ft( 1.1, -0.8, xi ), 'LineWidth', 2 )
title 'Fittype with b=1.1 and h=-0.8'

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

% Load some data
xdata = [0.012;0.054;0.13;0.16;0.31;0.34;0.47;0.53;0.53;...
   0.57;0.78;0.79;0.93];
ydata = [0.78;0.87;1;1.1;0.96;0.88;0.56;0.5;0.5;0.5;0.63;...
   0.62;0.39];
% Fit the curve to the data
f = fit( xdata, ydata, ft, 'Start', [0, 1] )
% Plot fit
plot( f, xdata, ydata )
title 'Fitted S-curve'

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

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

% Load some data.
xdata = [0.098;0.13;0.16;0.28;0.55;0.63;0.81;0.91;0.91;...
    0.96;0.96;0.96;0.97];
ydata = [0.52;0.53;0.53;0.48;0.33;0.36;0.39;0.28;0.28;...
    0.21;0.21;0.21;0.2];

% Create a fittype that has a problem parameter.
g = fittype( @(a,b,c,x) a*x.^2+b*x+c, 'problem', 'c' )

% Examine coefficients. Observe c is not a coefficient.
coeffnames( g )

% Examine arguments. Observe that c is an argument.
argnames( g )

% Call fit and specify the value of c.
f1 = fit( xdata, ydata, g, 'problem', 0, 'StartPoint', [1, 2] )

% Note: Specify start points in the calls to fit to
% avoid warning messages about random start points
% and to ensure repeatability of results.

% Call fit again and specify a different value of c,
% to get a new fit.
f2 = fit( xdata, ydata, g, 'problem', 1, 'start', [1, 2] )

% Plot results. Observe the specified c constants
% do not make a good fit.
plot( f1, xdata, ydata )
hold on
plot( f2, 'b' )
hold off

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

% Remove c from the argument list.
try
    g = fittype( @(a,b,x) a*x.^2+b*x+c )
catch e
    disp( e.message )
end
% Observe error because now c is undefined.
% Define c and create fittype:
c = 0;
g1 = fittype( @(a,b,x) a*x.^2+b*x+c )

% Call fit (now no need to specify problem parameter).
f1 = fit( xdata, ydata, g1, 'StartPoint', [1, 2] )
% Note that this f1 is the same as the f1 above.
% To change the value of c, recreate the fittype.
c = 1;
g2 = fittype( @(a,b,x) a*x.^2+b*x+c ) % uses c = 1
f2 = fit( xdata, ydata, g2, 'StartPoint', [1, 2] )
% Note that this f2 is the same as the f2 above.
% Plot results
plot( f1, xdata, ydata )
hold on
plot( f2, 'b' )
hold off

Входные параметры

свернуть все

Подбираемая модель библиотеки, заданная как вектор символов. В этой таблице показаны некоторые общие примеры.

Имя модели библиотеки

Описание

'poly1'

Линейная полиномиальная кривая

'poly11'

Линейная полиномиальная поверхность

'poly2'

Квадратичная полиномиальная кривая

'linearinterp'

Кусочно-линейная интерполяция

'cubicinterp'

Кусочно-кубическая интерполяция

'smoothingspline'

Сглаживание сплайна (кривая)

'lowess'

Локальная линейная регрессия (поверхность)

Список имен библиотечных моделей см. в разделе Имена моделей и уравнения.

Пример: 'poly2'

Типы данных: char

Модель для подгонки, заданная как вектор символов. Можно задать любую команду MATLAB и, следовательно, любую .m файл. См. «Подгонка кривой, заданной файлом».

Типы данных: char

Модель для подгонки, заданная как массив ячеек из векторов символов. Задайте условия модели по выражениям в векторах символов. Не включать коэффициенты в выражения терминов. См. Условия линейной модели.

Типы данных: cell

Модель для подгонки, заданная как анонимная функция. Для получения дополнительной информации смотрите Вход для анонимных функций.

Типы данных: char

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: 'coefficients',{'a1','a2'}

Имена коэффициентов, заданные как разделенная разделенными запятой парами, состоящая из 'coefficients' и вектор символов или массив ячеек с векторами символов для нескольких имен. Можно использовать мультисимволы символов. Вы не можете использовать эти имена: i, j, pi, inf, nan, eps.

Типы данных: char | cell

Имя зависимой (ответной) переменной, заданное как разделенная разделенными запятой парами, состоящая из 'dependent' и вектор символов. Если вы не задаете зависимую переменную, функция принимает y - зависимая переменная.

Типы данных: char

Независимые (ответные) имена переменных, заданные как разделенная разделенными запятой парами, состоящая из 'independent' и вектор символов или массив ячеек векторов символов. Если вы не задаете независимую переменную, функция принимает x - независимая переменная.

Типы данных: char

Опции подгонки, заданные как разделенная разделенными запятой парами, состоящая из 'options' и имя fitoptions объект.

Зависимые от задачи (фиксированные) имена параметров, заданные как разделенная разделенными запятой парами, состоящая из 'problem' и вектор символов, или массив ячеек векторов символов с одним элементом на константу, зависящую от задачи.

Типы данных: char | cell

Выходные аргументы

свернуть все

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

Подробнее о

свернуть все

Зависимые и независимые переменные

Как решить, какие переменные являются зависимыми и независимыми?

Чтобы определить зависимые и независимые переменные и коэффициенты, рассмотрим это уравнение:

y=f(x)=a+(b*x)+(c*x2).

  • y - зависимая переменная.

  • x является независимой переменной.

  • a, b и c являются коэффициентами.

The 'independent' переменная - это то, чем вы управляете. The 'dependent' переменная - это то, что вы измеряете, т.е. это зависит от независимой переменной. The 'coefficients' являются параметрами, которые оценивает алгоритм аппроксимации.

Например, если у вас есть данные переписи, то год является независимой переменной, потому что она ни от чего не зависит. Население является зависимой переменной, поскольку его значение зависит от года, в котором проводится перепись. Если такой параметр, как скорость роста, является частью модели, поэтому алгоритм аппроксимации оценивает его, то параметр является одним из 'coefficients'.

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

Вход для анонимных функций

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

Порядок входных параметров в анонимную функцию должен быть:

fcn = @(coefficients,problemparameters,x,y) expression
Вам нужен хотя бы один коэффициент. Параметры задачи и y являются необязательными. Последние аргументы, x и y, представляют независимые переменные: просто x для кривых, но x и y для поверхностей. Если вы не хотите использовать x и/или y чтобы назвать независимые переменные, задайте различные имена с помощью 'independent' аргумент пары "имя-значение". Однако, независимо от имени или имен, которые вы выберете, эти аргументы должны быть последними аргументами анонимной функции.

Анонимные функции облегчают передачу других данных в fittype и fit функций.

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

    c = 1;
     g = fittype( @(a, b, x) a*x.^2+b*x+c )
  2. The fittype функция может использовать значения переменных в рабочей рабочей области при создании типа подгонки. Чтобы передать новые данные из рабочей области, воссоздайте тип модели, например,

    c = 5 % Change value of c.
    g = fittype( @(a, b, x) a*x.^2+b*x+c )
    
  3. Здесь, значение c фиксируется при создании типа подгонки. Чтобы задать значение c в то время, когда вы звоните fit, можно использовать параметры задачи. Для примера сделайте подгонку с c = 2 а затем новая подгонка с c = 3.

    g = fittype( @(a,b,x,c) a*x.^2+b*x+c, 'problem', 'c' )
    f1 = fit( xdata, ydata, g, 'problem', 2 )
    f2 = fit( xdata, ydata, g, 'problem', 3 ) 

Условия линейной модели

Как задать линейные модельные условия?

Чтобы использовать алгоритм линейной аппроксимации, задайте linearModelTerms как массив ячеек с терминами.

afittype = fittype({expr1,...,exprn})
Задайте условия модели по выражениям в векторах символов expr2,...,exprn. Не включать коэффициенты в выражения терминов. Если существует постоянный термин, используйте '1' как соответствующее выражение в массиве ячеек.

Чтобы задать линейную модель следующей формы:

 coeff1 * term1 + coeff2 * term2 + coeff3 * term3 + ...
где ни один коэффициент не появляется ни в одном из term1, term2, и т.д., используйте массив ячеек, где каждый член, без коэффициентов, задан в камере expr, следующим образом:
LinearModelTerms = {'term1', 'term2', 'term3', ... }

Для примера, модель

a*x + b*sin(x) + c
линейный в a, b, и c. У него три условия x, sin(x) и 1 (потому что c = c * 1) и, следовательно expr является:
LinearModelTerms = {'x','sin(x)','1'}

В приложении Аппроксимирование Кривыми см. Linear Fitting тип модели.

Алгоритмы

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

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

Представлено до R2006a