【问题标题】:Find average value of variable in an interval in MATLAB在MATLAB中查找区间内变量的平均值
【发布时间】:2021-08-23 22:02:00
【问题描述】:

我在 MATLAB 中有一些数据。在图片上你可以看到一小部分:-

我感兴趣的数字是 RPM 和 Lambda。如您所见,它们既不是严格减少也不是严格增加(可以说它们是非线性的)。我想在 RPM 间隔中找到平均 Lambda 值,例如 250-500、500-750、1000-1250 等。但是我不知道如何在 MATLAB 中编写这样的代码,原因是我不知道这会发生在什么索引上,因为 RPM 数字并不是严格地减少/增加。

while RPM >= 1000 && RPM < 1250
    Lambda_avg = sum of Lambda values in interval / number of Lambdas in interval
end

while RPM >= 1250 && RPM < 1500
...
end

我也许可以将 RPM 列从最低到最高排序,然后也相应地对 Lambda 列进行排序,尽管我也不知道该怎么做。

有什么方法可以在所有数据中找到某个 RPM 间隔内的平均 lambda 值?我希望我的问题足够清楚。

【问题讨论】:

    标签: matlab average non-linear


    【解决方案1】:

    如果变量lambda 中包含所有lambda 值,RPM 变量中包含所有RPM 值,那么您只需这样做,例如

    RPM1 = 1000;
    RPM2 = 1500;
    lambda_avg = mean(lambda((RPM >= RPM1) & (RPM < RPM2)));
    

    单个&amp; 进行逐元素与比较,单个| 进行逐元素或。

    例如,如果您的数据组织为名为 data 的 MATLAB 表,那么您可以这样做

    lambda_avg = mean(data.lambda((data.RPM >= RPM1) & (data.RPM < RPM2)));
    

    此方法利用 MATLAB 的逻辑索引功能,并允许您跳过您尝试在问题中编写的循环...

    仅供参考,如果你想显式写一个循环来计算这个平均值,你可以这样做:

    lambda_avg = 0;
    n_lambda = 0; % number of lambdas you found in the interval
    for i = 1:numel(RPM)
        if (RPM(i) >= RPM1) && (RPM(i) < RPM2)
            lambda_avg = lambda_avg + lambda(i);
            n_lambda = n_lambda + 1;
        end
    end
    lambda_avg = lambda_avg / n_lambda;
    

    【讨论】:

      猜你喜欢
      • 2020-04-03
      • 2021-11-03
      • 2017-10-28
      • 2017-11-09
      • 1970-01-01
      • 2014-02-24
      • 1970-01-01
      • 1970-01-01
      • 2021-10-08
      相关资源
      最近更新 更多