Matlab-使用多个条件绘制向量值

Matlab-使用多个条件绘制向量值,matlab,if-statement,vector,conditional-statements,Matlab,If Statement,Vector,Conditional Statements,我在这里有我的价值观: 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.

我在这里有我的价值观:

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')

在我看来,这就是你想要的:

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
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
也可能是您想要的:

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
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
xx=x((y>4.5&[1,(arrayfun)(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和[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)另一个带有for循环的解决方案,因为原始问题被标记为
for循环
。它精确返回示例的解决方案:

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')
v=[0,0,y,0,0];
u=[0,0,x,0,0];
对于k=3:1:numel(v)
如果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)=0;
终止
终止
yy=v(v>0);
xx=u(v>0);
图(2)
图(x,y,'g',xx,yy,'k')

可以通过更改if案例来优化此代码。我使用此设置是因为它与问题完全相同。

…除了“如果我有一个孤立的值,但它在两个值之间>4.5,那么它应该被计数”但如果值>4.5被隔离,则不应计算:D@TheMinion,我不确定这是否正确。包含了4.9。看起来它只是措词不好。嗯,但前4.6不是。OP的评论在这里会很好…OP?我想他考虑过循环数据,如果他有一个元素更大,他会检查下一个或下一个后一个的蚂蚁(英语单词是什么?)也更大
4.5
。因此第一个
4.6
不包括在内,而
4.9
包括在内,因为它之前的两个元素也是
>4.5
。你说的正是这个[4.9 3 4.6 4.1 4.7 4.1 4.2 4.6 4.3 4.9…]结果将是[4.9 4.6 4.7 4.6 4.9…]当你的y数据是:
[4.9 3 4.6 4.1 4.7 4.1 4.2 4.6 4.3 4.9…]
?这会导致:
[4.9 4.6 4.7 4.6 4.9…]
?是的,这是最好的方式,我没有意识到这可能发生!