0
在我的实验中,我需要用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函数句柄了解不多。特别是在这里,它有“最小”功能。而且,我应该如何将这个例子扩展到几个线性段?
预先感谢您!
编辑01:
谢谢!!您的答案已使我的代码按需运行。但是,我可以在这里问一些问题。如前所述,我最初想要将近似值扩展到几个线性段。所以,我走:
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]);
但MATLAB响应I.C.错误:
Failure in initial user-supplied objective function evaluation
你能帮我在这里很快与I.C?以及函数句柄中的“min”函数是什么?