基于MATLAB的分段线性曲线拟合
在我的实验中,我需要用n个线性段来近似或拟合测量y=f_m(x)。n的值可以选择为1、2、3、4、5。。。大概不到10个。为了清楚起见,如果可以比较不同情况下的误差,找到误差最小的一个,这是很好的 我发现了一个使用MATLAB()的示例: 这类似于我在2段中所寻找的情况。我试图通过更改函数句柄来修改此函数以满足我的需要:基于MATLAB的分段线性曲线拟合,matlab,mathematical-optimization,curve-fitting,least-squares,Matlab,Mathematical Optimization,Curve Fitting,Least Squares,在我的实验中,我需要用n个线性段来近似或拟合测量y=f_m(x)。n的值可以选择为1、2、3、4、5。。。大概不到10个。为了清楚起见,如果可以比较不同情况下的误差,找到误差最小的一个,这是很好的 我发现了一个使用MATLAB()的示例: 这类似于我在2段中所寻找的情况。我试图通过更改函数句柄来修改此函数以满足我的需要: F = @(B,xdata) min(B(1),B(2)+B(3)*xdata); %Form of the equation 到 但我的修改似乎在同一条线上产生了两段
F = @(B,xdata) min(B(1),B(2)+B(3)*xdata); %Form of the equation
到
但我的修改似乎在同一条线上产生了两段
我对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]);
但MATLAB响应与I.C.错误:
Failure in initial user-supplied objective function evaluation
你能马上帮我检查一下这里的身份证吗?函数句柄中的“min”函数有什么用?我在运行代码时遇到以下错误:
??? Error using ==> lsqncommon at 101
LSQCURVEFIT cannot continue because user supplied objective function failed with the following error:
Attempted to access B(4); index out of bounds because numel(B)=3.
IC = [max(ydata) max(ydata) max(ydata) 0]; %Initial guess
B = lsqcurvefit( F,IC,xdata,ydata,[min(ydata) -inf -inf -inf],[max(xdata) inf inf 0]);
因此,这意味着B(4)
中没有任何内容。我将尝试修改IC
、lb
和ub
以使其具有4个元素
因此,请尝试在代码中添加以下两行:
??? Error using ==> lsqncommon at 101
LSQCURVEFIT cannot continue because user supplied objective function failed with the following error:
Attempted to access B(4); index out of bounds because numel(B)=3.
IC = [max(ydata) max(ydata) max(ydata) 0]; %Initial guess
B = lsqcurvefit( F,IC,xdata,ydata,[min(ydata) -inf -inf -inf],[max(xdata) inf inf 0]);