首页 > 解决方案 > 在MATLAB中查找区间内变量的平均值

问题描述

我在 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 值?我希望我的问题足够清楚。

标签: matlabaveragenon-linear

解决方案


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

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

单个&进行逐个元素的 AND 比较,而单个|进行元素 OR 的比较。

例如,如果您的数据被组织为一个名为 的 MATLAB 表data,那么您可以执行

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;

推荐阅读