fittype

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

Синтаксис

aFittype = fittype(libraryModelName)
aFittype = fittype(expression)
aFittype = fittype(expression,Name,Value)
aFittype = fittype(linearModelTerms)
aFittype = fittype(linearModelTerms,Name,Value)
aFittype = fittype(anonymousFunction)
aFittype = fittype(anonymousFunction,Name,Value)

Описание

пример

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)

Можно задать любую команду 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 ) 

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

Идентифицируйте, что линейная модель называет вас, должен ввести к 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

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

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' ); 

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

Создайте и постройте 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

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

свернуть все

Модель Library, чтобы соответствовать, заданный как вектор символов. Эта таблица показывает некоторые типичные примеры.

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

Описание

'poly1'

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

'poly11'

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

'poly2'

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

'linearinterp'

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

'cubicinterp'

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

'smoothingspline'

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

'lowess'

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

Для списка имен модели библиотеки смотрите Имена модели и уравнения.

Пример: 'poly2'

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

Модель, чтобы соответствовать, заданный как вектор символов. Можно задать любую команду MATLAB и поэтому любой файл .m. Сочтите целесообразным Кривая, Заданная Файлом.

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

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

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

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

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

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

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (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. fittype инкапсулирует информацию, описывающую модель. Чтобы создать подгонку, вам нужны данные, fittype, и (опционально) fitoptions и правило исключения. Можно использовать fittype в качестве входа к функции fit.

Больше о

свернуть все

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

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

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

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

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

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

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

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

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

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

Введите порядок для анонимных функций

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

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

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

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

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

    c = 1;
     g = fittype( @(a, b, x) a*x.^2+b*x+c )
  2. Функция 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) 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'}

В приложении Curve Fitting смотрите тип модели Linear Fitting.

Алгоритмы

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

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

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

Для просмотра документации необходимо авторизоваться на сайте