我的价值在这里:
x=[0.125 0.250 0.375 0.500 0.625 0.750 0.875 1.000 1.125 1.250 ...]
y=[4.1 4.6 4.3 4.4 4.8 4.6 4.3 4.9 4.1 4.2 ...]
然后我想要所有值>4.5
但:
>4.5
包围,那么它应该算在内。所以结果应该是:
xx=[0.625 0.750 0.875 1.000 ...]
yy=[4.8 4.6 4.3 4.9 ...]
plot(x,y,'g',xx,yy,'k')
答案 0 :(得分:0)
在我看来,这就是你想要的:
x=[0.125 0.250 0.375 0.500 0.625 0.750 0.875 1.000 1.125 1.250]
y=[4.1 4.6 4.3 4.4 4.8 4.6 4.3 4.9 4.1 4.2]
xx = x(y > 4.5 | [0, (arrayfun(@(n) (y(n-1) > 4.5 & y(n+1) ...
> 4.5 & y(n) <= 4.5), 2:length(y)-1)), 0])
yy = y(y > 4.5 | [0, (arrayfun(@(n) (y(n-1) > 4.5 & y(n+1) ...
> 4.5 & y(n) <= 4.5), 2:length(y)-1)), 0])
xx =
0.25000 0.62500 0.75000 0.87500 1.00000
yy =
4.6000 4.8000 4.6000 4.3000 4.9000
更新:使用评论中的新示例数据:
y = [4.9 3 4.6 4.1 4.7 4.1 4.2 4.6 4.3 4.9];
yy =
4.9000 3.0000 4.6000 4.1000 4.7000 4.6000 4.3000 4.9000
也可以是你想要的:
xx = x((y > 4.5 & [1, (arrayfun(@(n) (y(n-1) > 4.5 | y(n+1) ...
> 4.5), 2:length(y)-1)), 1]) | [0, (arrayfun(@(n) (y(n-1) > 4.5 & y(n+1) ...
> 4.5 & y(n) <= 4.5), 2:length(y)-1)), 0])
yy = y((y > 4.5 & [1, (arrayfun(@(n) (y(n-1) > 4.5 | y(n+1) ...
> 4.5), 2:length(y)-1)), 1]) | [0, (arrayfun(@(n) (y(n-1) > 4.5 & y(n+1) ...
> 4.5 & y(n) <= 4.5), 2:length(y)-1)), 0])
xx =
0.62500 0.75000 0.87500
yy =
4.8000 4.6000 4.3000
答案 1 :(得分:0)
另一个使用for循环的解决方案,因为原始问题标有for-loop
。这完全返回了示例的解决方案:
v=[0,0,y,0,0];
u=[0,0,x,0,0];
for k=3:1:numel(v)
if v(k)>4.5 && (v(k-2)>4.5 || v(k-1)>4.5 || v(k+1)>4.5 || v(k+2)>4.5)
elseif v(k)<4.5 && v(k-1)>4.5 && v(k+1)>4.5
else
v(k)=0;
end
end
yy=v(v>0);
xx=u(v>0);
figure(2)
plot(x,y,'g',xx,yy,'k')
可以通过更改if个案来优化此代码。我使用了这个设置,因为它与问题完全一样。