제 실험에서 필자는 선형 세그먼트가 n 인 측정 값 y = f_m (x)을 근사화하거나 피팅해야합니다. n의 값은 1, 2, 3, 4, 5 ... 및 아마도 10 미만으로 선택할 수 있습니다. 명확하게하기 위해 서로 다른 경우의 오류를 비교하여 오류가 가장 작은 오류를 찾는 것이 좋습니다.MATLAB을 사용한 피스 와이즈 선형 커브 피팅
내가 MATLAB (link)를 사용하여 하나의 예를 발견했습니다
% Random data...
xdata = linspace(-2,3,101);
ydata = log(abs(10./(10+1i*10.^xdata))) + 0.5*randn(size(xdata));
plot(xdata,ydata)
F = @(B,xdata) min(B(1),B(2)+B(3)*xdata); %Form of the equation
IC = [max(ydata) max(ydata) 0]; %Initial guess
B = lsqcurvefit(F,IC,xdata,ydata,[min(ydata) -inf -inf],[max(xdata) inf 0]);
hold all;
plot(xdata,F(B,xdata));
a = (B(1) - B(2))/B(3)
cte = B(1)
c = B(2)
d = B(3)
이 내가 2 개 세그먼트의 경우 무엇을 찾고 있어요과 유사합니다. 나는 함수 핸들을 변경 내 필요에 맞게이 기능을 수정하려고 :
F = @(B,xdata) min(B(1),B(2)+B(3)*xdata); %Form of the equation
F = @(B,xdata) min(B(1)+B(2)*xdata,B(3)+B(4)*xdata);
에 있지만 같은 줄에 2 개 세그먼트 내 수정 결과를 보인다.
나는 MATLAB 함수 핸들에 대해 많이 모른다. 특히 여기에는 "min"기능이 있습니다. 또한이 예제를 여러 선형 세그먼트로 확장하려면 어떻게해야합니까?
미리 감사드립니다.
Edit01 :
감사합니다. 귀하의 대답에 따라 원하는대로 내 코드가 실행됩니다. 그러나, 나는 여기서 약간의 질문을할지 모른다. 앞서 언급했듯이, 원래 근사를 여러 선형 세그먼트로 확장하려고합니다. 그래서 저는 다음과 같이갑니다 :
F = @(B,xdata) min(B(1)+B(2)*xdata, B(3)+B(4)*xdata, B(5)+B(6)*xdata); %Form of the equation
IC = [max(ydata) max(ydata) max(ydata) max(ydata) max(ydata) 0]; %Initial guess
B = lsqcurvefit(F,IC,xdata,ydata,[min(ydata) -inf -inf -inf -inf -inf],[max(xdata) inf inf inf inf 0]);
그러나 I.C. 오류 :
Failure in initial user-supplied objective function evaluation
여기에서 I.C를 곧 사용할 수 있습니까? 함수 핸들에서 "min"함수는 무엇입니까? 코드를 실행할 때