Matlab:非单调插值

时间:2015-05-26 10:32:28

标签: matlab interpolation

我从非单调函数中插入问题。

x=[34,35,36,37,38,39,41,42,43,44,45,46]
y=[0.33 0.166 0.25 0.33 0.5 0.58 0.66 0.66 0.5 0.58 0.8 0.66]

我希望能够插入对应于Y值0.25的X值。

当绘制(x,y)时,我可以看到有两个点对应于Y值0.25,因此正常插值(使用interp1)将不起作用。

  

错误:"网格向量并非严格单调递增。"

有没有办法插入两个点,然后计算它们的平均值,我无法找到适合我问题的任何内容。

3 个答案:

答案 0 :(得分:2)

您可以先计算douplicates的平均值然后进行插值:

{{1}}

答案 1 :(得分:2)

遍历您的数组并检测您的查询值是否已通过。然后取平均值。

%test data
x=[34,35,36,37,38,39,41,42,43,44,45,46];
y=[0.33 0.166 0.25 0.33 0.5 0.58 0.66 0.66 0.5 0.58 0.8 0.66];

%value to query
yq = 0.25;
result = [];
for i = 1:length(y)-1
    if (y(i) <= yq && yq < y(i+1)) || (y(i) > yq && yq >= y(i+1))
        result(end+1) = interp1([y(i),y(i+1)],[x(i),x(i+1)],yq);
    end
end

xq = mean(result);

答案 2 :(得分:0)

您可以选择以下唯一点:

% x and y are your data available
[xN, index] = unique(x);
yN = y(index);

% Now you have only unique x and y values stored in xN and yN

请注意,这会丢弃您的重复数据点。