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…]
?是的,这是最好的方式,我没有意识到这可能发生!