You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matlab中如何按每8个单元计算考虑环形特性的平均风向

问题根源

直接对0~360°范围的风向做算术平均无法得到正确结果,本质是风向属于环形圆周变量:0°与360°指向完全相同的方向,数值差358°的359°和1°实际夹角仅2°,跨0/360°边界时算术平均会出现严重偏差,例如350°与10°的算术平均结果为180°(正南),但二者实际平均方向为0°(正北)。

正确计算逻辑

日平均风向需采用圆周平均法,计算步骤如下:

  • 将每个风向角度分别分解为东向分量(角度的正弦值)、北向分量(角度的余弦值)
  • 按日分组,分别计算当日所有样本两个分量的算术平均值
  • 通过四象限反正切函数对两个平均分量做反算,得到平均角度
  • 将反算结果映射到0~360°的标准风向区间即可
MATLAB 实现代码

注意不要使用dir作为变量名,dir是MATLAB内置的目录查询函数,容易引发命名冲突。针对你使用的3小时时间步长、每日共8个样本的数据结构,实现代码如下:

% wind_dir 为按时间顺序排列的一维风向数据向量
% 生成每个样本对应的日期分组序号
day_group = ceil((1:numel(wind_dir))/8)';
% 分日计算正弦、余弦分量的平均值
mean_sin = accumarray(day_group, sind(wind_dir(:)), [], @mean);
mean_cos = accumarray(day_group, cosd(wind_dir(:)), [], @mean);
% 反算平均风向,转换为0~360°区间结果
daily_avg_winddir = mod(atan2d(mean_sin, mean_cos), 360);
样本数据计算验证

用你提供的3天样本数据计算,结果与实际风向分布完全匹配:

  • 2020年4月1日平均风向:25.24°(东北偏北方向),原算术平均得到的161.4°为完全错误的结果
  • 2020年4月2日平均风向:288.17°(西北偏西方向)
  • 2020年4月3日平均风向:304.94°(西北方向)

补充说明:如果单日的正弦、余弦分量平均值均接近0,说明当日风向在各方向均匀分布,此时计算得到的平均风向没有实际物理意义,可增加判断逻辑过滤这类特殊情况。

内容的提问来源于stack exchange,提问作者user5618251

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 10:31:02