Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

fittype

곡선과 곡면 피팅을 위한 피팅 유형

설명

예제

aFittype = fittype(libraryModelName)libraryModelName으로 지정된 모델에 대한 fittype 객체 aFittype을 만듭니다.

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 쌍의 인수로 지정된 추가 옵션을 사용하여 피팅 유형을 생성합니다.

예제

모두 축소

라이브러리 모델 이름을 지정하여 피팅 유형을 생성합니다.

3차 다항식 라이브러리 모델에 대한 fittype 객체를 생성합니다.

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

라이브러리 모델 rat33(분자와 분모 모두 3차로 이루어진 유리 모델)에 대해 피팅 유형을 생성합니다.

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("n*u^a",...
            problem="n",...
            independent="u")
g = 
     General model:
     g(a,n,u) = n*u^a

일부 데이터에 대한 로그 피팅에 대해 피팅 유형을 만들고 해당 피팅 유형을 사용하여 피팅을 만든 다음 피팅을 플로팅합니다.

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

Figure contains an axes object. The axes object with xlabel x, ylabel y contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent data, fitted curve.

이 플롯은 피팅이 데이터를 따라가고 있음을 보여줍니다.

선형 피팅 알고리즘을 사용하려면 항으로 구성된 셀형 배열을 지정하십시오.

a*x + b*sin(x) + c라는 fittype에 입력해야 하는 선형 모델 항을 식별합니다. 모델은 a, b, c에서 선형입니다. 모델에는 x, sin(x), 1(c=c*1이므로)이라는 3개 항이 있습니다. 이 모델을 지정하려면 항으로 구성된 셀형 배열 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' ) )

샘플 계수값으로 밑변 b=1.1과 높이 h=-0.8을 지정하여 fittype을 플로팅합니다.

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

입력 인수

모두 축소

피팅할 라이브러리 모델로, 문자형 벡터나 string형 스칼라로 지정됩니다. 다음 표에는 몇 가지 일반적인 예가 나와 있습니다.

라이브러리 모델 이름

설명

'poly1'

1차 다항식 곡선

'poly11'

1차 다항식 곡면

'poly2'

2차 다항식 곡선

'linearinterp'

조각별 선형 보간

'cubicinterp'

조각별 3차 보간

'smoothingspline'

평활화 스플라인(곡선)

'lowess'

국소 선형 회귀(곡면)

'log10'

밑이 10인 로그 곡선

'logistic4'

4개의 파라미터를 갖는 로지스틱 곡선

라이브러리 모델 이름 목록은 모델 이름과 방정식 항목을 참조하십시오.

예: 'poly2'

데이터형: char | string

피팅할 모델로, 문자형 벡터나 string형 스칼라로 지정됩니다. MATLAB 명령이나 .m 파일로도 지정할 수 있습니다. 파일로 정의된 곡선 피팅하기 항목을 참조하십시오.

데이터형: char | string

피팅할 모델로, 문자형 벡터로 구성된 셀형 배열이나 string형 배열로 지정됩니다. 문자형 벡터나 string형 스칼라의 표현식처럼 모델 항을 지정합니다. 항에 대한 표현식에는 계수를 포함하지 마십시오. 선형 모델 항 항목을 참조하십시오.

데이터형: cell

피팅할 모델로, 익명 함수로 지정됩니다. 자세한 내용은 익명 함수의 입력 순서 항목을 참조하십시오.

데이터형: char

이름-값 인수

선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name을 따옴표로 묶으십시오.

예: 'coefficients',{'a1','a2'}

계수 이름으로, 'coefficients'와 함께 문자형 벡터, string형 스칼라, 문자형 벡터로 구성된 셀형 배열 또는 string형 배열이 쉼표로 구분되어 지정됩니다. 다중문자 기호 이름을 사용할 수 있습니다. i, j, pi, inf, nan, eps는 이름으로 사용할 수 없습니다.

데이터형: char | string | cell

종속 변수(응답 변수) 이름으로, 'dependent'와 함께 문자형 벡터 또는 string형 스칼라가 쉼표로 구분되어 지정됩니다. 종속 변수를 지정하지 않으면 함수는 y가 종속 변수라고 간주합니다.

데이터형: char | string

독립 변수(응답 변수) 이름으로, 'independent'와 함께 문자형 벡터 , string형 스칼라, 문자형 벡터로 구성된 셀형 배열 또는 string형 배열이 쉼표로 구분되어 지정됩니다. 독립 변수를 지정하지 않으면 함수는 x가 독립 변수라고 간주합니다.

데이터형: char | string | cell

피팅 옵션으로, 'options'와 함께 fitoptions 객체의 이름이 쉼표로 구분되어 지정됩니다.

문제 종속적(고정) 파라미터 이름으로, 'problem'과 함께 문자형 벡터, string형 스칼라, 문자형 벡터로 구성된 셀형 배열 또는 string형 배열(문제 종속적 상수 하나당 하나의 요소를 가짐)이 쉼표로 구분되어 지정됩니다.

데이터형: char | string | cell

출력 인수

모두 축소

피팅할 모델로, fittype으로 반환됩니다. fittype은 모델을 설명하는 정보를 캡슐화합니다. 피팅을 만들려면 데이터, fittype, 그리고 (선택적으로) fitoptions와 제외 규칙이 필요합니다. fittypefit 함수에 대한 입력값으로 사용할 수 있습니다.

세부 정보

모두 축소

종속 변수와 독립 변수

어느 변수가 종속 변수이고 어느 변수가 독립 변수인지 어떻게 구분할 수 있습니까?

종속 변수, 독립 변수, 계수를 구분하려면 다음 방정식을 살펴보십시오.

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

  • y는 종속 변수입니다.

  • x는 독립 변수입니다.

  • a, b, c는 계수입니다.

독립('independent') 변수는 사용자가 제어하는 것입니다. 종속('dependent') 변수는 사용자가 구하여 얻고자 하는 것입니다. 즉, 독립 변수에 종속적입니다. 계수('coefficients')는 피팅 알고리즘이 추정하는 파라미터입니다.

예를 들어, 인구 조사 데이터가 있는 경우 연도는 아무것에도 종속되지 않으므로 독립 변수입니다. 인구는 그 값이 조사된 연도에 종속적이므로 종속 변수입니다. 증가율과 같은 파라미터가 모델에 포함되어 있는 경우, 피팅 알고리즘이 이를 추정하므로 이 파라미터는 계수('coefficients') 중 하나입니다.

fittype 함수는 변수 이름에 대해 피팅 유형 표현식 입력값을 검색하여 입력 인수를 확인합니다. fittypex가 독립 변수이고 y가 종속 변수이고 다른 모든 변수는 모델의 계수라고 간주합니다. 변수가 존재하지 않으면 x가 사용됩니다.

익명 함수의 입력 순서

피팅 유형 표현식 입력값이 익명 함수인 경우 입력값의 순서가 정확해야 합니다. 입력 순서는 fittype 함수가 추정할 계수가 무엇이고, 문제 종속적인 파라미터가 무엇이고, 독립 변수가 무엇인지 확인할 수 있도록 해 줍니다.

익명 함수에 대한 입력 인수의 순서는 다음과 같아야 합니다.

fcn = @(coefficients,problemparameters,x,y) expression
최소 하나의 계수가 필요합니다. 문제 파라미터와 y는 선택적입니다. 마지막 인수 xy는 독립 변수를 나타냅니다. 곡선의 경우 x만 필요하고, 곡면의 경우 xy가 필요합니다. x 및/또는 y를 사용하여 독립 변수의 이름을 지정하고 싶지 않다면 'independent' 인수 이름-값 쌍을 사용하여 다른 이름을 지정할 수 있습니다. 그러나 어떤 이름을 선택하든 이 인수는 익명 함수에 대한 마지막 인수가 되어야 합니다.

익명 함수를 사용하면 fittype 함수와 fit 함수로 다른 데이터를 보다 쉽게 전달할 수 있습니다.

  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의 값은 고정되어 있습니다. fit을 호출하는 시점에 c의 값을 지정하려면 문제 파라미터를 사용하면 됩니다. 예를 들어, 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를 항으로 구성된 셀형 배열이나 string형 배열로 지정하십시오. 예를 들어, 다음과 같이 입력합니다.

afittype = fittype({expr1,...,exprn})
문자형 벡터 expr2,...,exprn의 표현식처럼 모델 항을 지정합니다. 항에 대한 표현식에는 계수를 포함하지 마십시오. 상수항이 있으면 셀형 배열의 해당 위치에서 '1'로 표현하십시오.

선형 모델이 다음 형식을 갖고

 coeff1 * term1 + coeff2 * term2 + coeff3 * term3 + ...
term1, term2 등에 계수가 나타나지 않도록 지정하려면 다음과 같이 expr의 셀이나 요소에 각 항이 계수 없이 지정된 셀형 배열 또는 string형 배열을 사용하십시오.
LinearModelTerms = {'term1', 'term2', 'term3', ... }

예를 들어, 다음 모델은

a*x + b*sin(x) + c
a, b, c에서 선형입니다. 이 모델에는 x, sin(x), 1(c=c*1이므로)이라는 3개 항이 있으며 따라서 expr은 다음과 같습니다.
LinearModelTerms = {'x','sin(x)','1'}

곡선 피팅기 앱의 피팅 유형 섹션에 있는 사용자 지정 그룹에서 선형 피팅을 선택합니다.

알고리즘

피팅 유형 표현식 입력값이 문자형 벡터, string형 스칼라 또는 익명 함수이면 이 툴박스는 비선형 피팅 알고리즘을 사용하여 모델을 데이터에 피팅합니다.

피팅 유형 표현식 입력값이 항으로 구성된 셀형 배열 또는 string형 배열이면 이 툴박스는 선형 피팅 알고리즘을 사용하여 모델을 데이터에 피팅합니다.

버전 내역

R2006a 이전에 개발됨

모두 확장