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.

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

Создайте подходящий тип для пользовательской нелинейной модели, определяя 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 object. The axes object contains 2 objects of type line. These objects represent data, fitted curve.

Можно задать любую команду MATLAB и поэтому любой .m файл.

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

Идентифицируйте, что линейная модель называет вас, должен ввести к fittype: a*x + b*sin(x) + c. Модель линейна в aB и 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

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

Задайте функцию в файле 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

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

свернуть все

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

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

Описание

'poly1'

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

'poly11'

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

'poly2'

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

'linearinterp'

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

'cubicinterp'

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

'smoothingspline'

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

'lowess'

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

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

Пример: 'poly2'

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

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

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

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

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

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

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

Аргументы name-value

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

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

Коэффициент называет в виде разделенной запятой пары, состоящей из 'coefficients' и вектор символов, строковый скаляр, массив ячеек из символьных векторов или массив строк. Можно использовать мультисимвольные имена символа. Вы не можете использовать эти имена: iJ\PiInfNaNeps.

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

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

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

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

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

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

Проблемный зависимый (зафиксировал) названия параметра в виде разделенной запятой пары, состоящей из 'problem' и вектор символов, строковый скаляр, массив ячеек из символьных векторов или массив строк с одним элементом на проблемного постоянного зависимого.

Типы данных: char | string | 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' пара "имя-значение" аргумента. Однако безотносительно имени или имен вы выбираете, эти аргументы должны быть последними аргументами к анонимной функции.

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

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

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

    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
линейно в aB, и c. Это имеет три термина x, sin(x) и 1 (потому что c=c*1) и поэтому expr :
LinearModelTerms = {'x','sin(x)','1'}

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

Алгоритмы

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

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

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