我在MATLAB中创建了一个类,它定义了一个用于拟合一组数据点的自定义方程。该类应该表示一个非对称方程,其中峰的左侧独立于右侧(example here)。
当我在字符串中使用它来创建fittype
对象时,下面的静态方法有效:
function Y = AsymmCutoff(x, side, xdata)
numPts=length(xdata);
step = zeros(1,numPts);
if side == 1
for i=1:numPts
if xdata(i) < x
step(i)=1;
else
step(i)=0;
end
end
elseif side == 2
for i=1:numPts
if xdata(i) < x
step(i)=0;
else
step(i)=1;
end
end
end
Y=step';
end
对于xdata
指定的1xN数据点数组,上述函数返回Nx1列数组0和1,具体取决于您是想要左侧(peak = 1
)还是右侧峰值(peak = 2
)。峰值位置由参数x
指定。
毫不奇怪,我发现在运行探查器之后需要花费大量时间来遍历for循环,所以我重写了如下:
function Y = AsymmCutoff(x, side, xdata)
if side == 1
step = xdata < x;
elseif side == 2
step = xdata > x;
end
Y=step';
end
然而,即使它们输出相同大小Y
,Matlab也会抛出此错误,即使我的其余代码保持不变:
Custom equations must produce an output vector, matrix, or array that is the same size and shape as the input data. This custom equation fails to meet that requirement.
为了确定,我仔细检查过这个函数是通过在两个不同版本之间来回切换而给我的错误。正如所料,原始功能起作用,新功能引发了错误。
任何人都可以向我解释原因吗?