【问题标题】:Matlab, values over specific y-rangeMatlab,特定y范围内的值
【发布时间】:2013-08-27 11:50:36
【问题描述】:

在 MATLAB 中,我想知道在特定的 y-range 上获取 x-range 值的最佳方法是什么。

例如,如果我有一个温度波动图(y-axis)相对于时间(x-axis),我想知道温度高于 550°C 但低于 600°C 的次数℃。
温度会随着时间的推移而波动,因此可以在图表中找到这些温度之间的许多间隔。

【问题讨论】:

    标签: matlab intervals


    【解决方案1】:

    我认为您正在寻找这样的东西:

    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 &gt; 0.2) &amp; (T &lt; 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)
    

    【讨论】:

    • 也可以使用length(find(c))?
    • @TryHard 这发现了一些不同的东西,尽管这可能是 OP 想要的。我正在寻找温度进入该范围的次数,您正在寻找有多少点落在该范围内。目前尚不清楚 OP 的目标是什么。
    • 我正在寻找的是图表超出特定值的时间,例如,如果图表中温度为 550
    • 用length(find(c)) 替换sum 位,您就有了该范围内的条目数...
    • 如果时间向量的值之间的差异不相等,有什么办法可以缓解这种情况?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多