在 MATLAB 中,我想知道在x
特定范围内获取 -range 值的最佳方法是什么y
。
例如,如果我有一个y
相对于时间 ( x
-axis) 的波动温度 (-axis) 图表,我想知道温度高于 550°C 但低于 600°C 的次数。
温度会随着时间的推移而波动,因此可以沿着图表找到这些温度之间的许多间隔。
我想你正在寻找这样的东西:
T = rand(100,1); %Your temperature variable
c = (T > 0.2) & (T < 0.8); %Your threshholds, in your case switch the 0.2 for 550 and the 0.8 for 600
sum(diff([0; c]) == 1)
这里发生的是这样的:
c = (T > 0.2) & (T < 0.8)
创建一个掩码,其中您的阈值之间的1
点是 和外面的点是0
。现在diff
找到每个相邻点之间的差异,例如diff([1 0 0 1 1 1 0])
将返回-1 0 1 0 0 -1
,但我们只想计算每次c
向量从0
到1
(或者我们可以计算它从1
到0
,只要我们不计算两者),因此== 1
. 最后,我们不想错过从开头开始的一组,因此我们在开头添加了一个0
。
编辑:
根据您的评论并假设您有一个名为的时间向量x
和一个名为的温度向量y
:
dx = x(2)-x(1) %I'm assuming this remains constant throughout x, i.e. x(n) - x(n-1) is constant
mask = (y >= 550) & (y <= 600)
totalTime = sum(mask)*dx
如果时间差x
不是恒定的,请执行以下操作:
mask = (y >= 550) & (y <= 600)
dx = x(end) - x(end-1);
d = -diff([0;mask;0]).*[x; x(end)+dx];
totalTime = sum(d)