我从非单调函数中插入问题。
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
)将不起作用。
错误:"网格向量并非严格单调递增。"
有没有办法插入两个点,然后计算它们的平均值,我无法找到适合我问题的任何内容。
答案 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
请注意,这会丢弃您的重复数据点。