Main Content

lsqcurvefit을 사용한 비선형 곡선 피팅

lsqcurvefit을 사용하면 파라미터화된 비선형 함수를 데이터에 손쉽게 피팅할 수 있습니다. lsqnonlin도 사용할 수 있지만, lsqcurvefit은 곡선 피팅을 위해 lsqnonlin을 호출할 수 있는 편리한 방법입니다.

이 예제에서 벡터 xdata는 100개의 데이터 점을 나타내고 벡터 ydata는 관련된 측정값을 나타냅니다. 문제에 대한 데이터를 생성합니다.

rng(5489,'twister') % reproducible
xdata = -2*log(rand(100,1));
ydata = (ones(100,1) + .1*randn(100,1)) + (3*ones(100,1)+...
    0.5*randn(100,1)).*exp((-(2*ones(100,1)+...
   .5*randn(100,1))).*xdata);

xdataydata 간의 모델링된 관계는 다음과 같습니다.

ydatai=a1+a2exp(-a3xdatai)+εi.

이 코드는 평균이 2인 지수 분포의 100개 독립 샘플에서 xdata를 생성합니다. 또한 정의 방정식에 a = [1;3;2]를 사용하여 ydata를 생성합니다. 이것은 표준편차 [0.1;0.5;0.5]를 갖는 정규편차를 추가하여 섭동된 것입니다.

데이터를 최적으로 피팅하는 모델에 대한 파라미터 aˆi, i = 1, 2, 3을 구하는 것이 목적입니다.

lsqcurvefit을 사용하여 데이터에 파라미터를 피팅하려면 피팅 함수를 정의해야 합니다. 다음과 같이 피팅 함수 predicted를 익명 함수로 정의합니다.

predicted = @(a,xdata) a(1)*ones(100,1)+a(2)*exp(-a(3)*xdata); 

데이터에 모델을 피팅하려면 lsqcurvefit에 파라미터의 초기 추정값 a0이 필요합니다.

a0 = [2;2;2];

lsqcurvefit을 호출하여 최적의 파라미터 aˆi를 구합니다.

[ahat,resnorm,residual,exitflag,output,lambda,jacobian] =...
   lsqcurvefit(predicted,a0,xdata,ydata);
Local minimum possible.

lsqcurvefit stopped because the final change in the sum of squares relative to 
its initial value is less than the value of the function tolerance.

결과로 생성된 파라미터를 검토합니다.

disp(ahat)
    1.0169
    3.1444
    2.1596

피팅된 값 ahata = [1;3;2]의 8% 내에 있습니다.

Statistics and Machine Learning Toolbox™가 있으면 nlparci 함수를 사용하여 ahat 추정값에 대한 신뢰구간을 생성하십시오.

참고 항목

| (Statistics and Machine Learning Toolbox)

관련 항목