Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于MATLAB的分段线性曲线拟合_Matlab_Mathematical Optimization_Curve Fitting_Least Squares - Fatal编程技术网

基于MATLAB的分段线性曲线拟合

基于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 到 但我的修改似乎在同一条线上产生了两段

在我的实验中,我需要用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

但我的修改似乎在同一条线上产生了两段

我对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]);