이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
최적화를 통한 곡선 피팅
이 예제에서는 비선형 함수를 데이터에 피팅하는 방법을 보여줍니다. 이 예제에서, 비선형 함수는 표준 지수 감쇠 곡선입니다.
여기서 는 시간 에서의 응답이고, 와 는 피팅할 파라미터입니다. 곡선을 피팅한다는 것은 제곱 오차의 합을 최소화하는 파라미터 와 를 구한다는 의미입니다.
여기서 시간은 이고 응답은 입니다. 제곱 오차의 합은 목적 함수입니다.
샘플 데이터 만들기
대개의 경우, 측정값 데이터가 있습니다. 이 예제에서는 , 인 모델을 기반으로 하고 의사 난수 오차가 정규분포하는 인위적 데이터를 만듭니다.
rng default % for reproducibility tdata = 0:0.1:10; ydata = 40*exp(-0.5*tdata) + randn(size(tdata));
목적 함수 작성하기
파라미터 A
와 lambda
, 데이터 tdata
와 ydata
를 받고 모델 의 제곱 오차의 합을 반환하는 함수를 작성합니다. 최적화할 모든 변수(A
와 lambda
)를 단일 벡터 변수(x
)에 추가합니다. 자세한 내용은 다변수 함수 최소화하기 항목을 참조하십시오.
type sseval
function sse = sseval(x,tdata,ydata) A = x(1); lambda = x(2); sse = sum((ydata - A*exp(-lambda*tdata)).^2);
이 목적 함수를 MATLAB® 경로에 sseval.m
이라는 파일로 저장합니다.
fminsearch
솔버는 단일 변수 x
의 함수에 적용됩니다. 그러나 sseval
함수는 세 개의 변수를 갖습니다. 추가 변수 tdata
와 ydata
는 최적화할 변수가 아니라 최적화를 위한 데이터입니다. fminsearch
에 대한 목적 함수를 x
만의 함수로 정의합니다.
fun = @(x)sseval(x,tdata,ydata);
tdata
및 ydata
와 같은 추가 파라미터를 포함하는 데 대한 자세한 내용은 함수를 파라미터화하기 항목을 참조하십시오.
최적의 피팅 파라미터 구하기
임의의 양수 파라미터 세트 x0
에서 시작하여, fminsearch
를 사용해 목적 함수를 최소화하는 파라미터를 구합니다.
x0 = rand(2,1); bestx = fminsearch(fun,x0)
bestx = 2×1
40.6877
0.4984
결과 bestx
는 해당 데이터를 생성한 파라미터인 A = 40
과 lambda = 0.5
에 상당히 가깝습니다.
피팅 품질 확인하기
피팅의 품질을 확인하려면 데이터와 결과로 생성되는 피팅된 응답 곡선을 플로팅해 보십시오. 모델의 반환된 파라미터에서 응답 곡선을 만듭니다.
A = bestx(1); lambda = bestx(2); yfit = A*exp(-lambda*tdata); plot(tdata,ydata,'*'); hold on plot(tdata,yfit,'r'); xlabel('tdata') ylabel('Response Data and Curve') title('Data and Best Fitting Exponential Curve') legend('Data','Fitted Curve') hold off
관련 항목
- 비선형 함수 최적화하기
- 비선형 데이터 피팅 (Optimization Toolbox)
- Nonlinear Regression (Statistics and Machine Learning Toolbox)