最近接到了一个小任务,具体要求是计算某地19km和21km高度的风速情况,根据原始的风速数据,算出该地6到9月份吹南风和北风各有多少天,平均的风速是多少,以及标准差等指标。
考虑到MATLAB具有强大的数据处理能力,因此用MATLAB完成了这个题目,程序如下:
%function [daysouth,daynorth,nthvec,sthvec,nthstd,sthstd,nsvec,nsstdvec]=DayOfSouthWind(S1,hlow,hhigh)
function DayOfSouthWindWriteExcel
S1='wind_Malan_SpeedAngle2015060100.dat';
table=zeros(8,8);%初始化风速表
daysouth=0;%南风的天数
daynorth=0;%北风的天数
vecmonth=[];%该月的南北风向平均风速向量,每个元素为一天的平均风速,总共31个
hlow=18500;
hhigh=19500;
for i=0:3%6到9月四个月
if i==0|i==3 %6月份和9月份都是30天
mndays=30;
else
mndays=31;%7月份和8月份都是31天
end
S1(26:27)=num2str(i+6,'%0.2d');%更新月份
for j=0:6:18%00时刻,06时刻,12时刻,18时刻
S1(30:31)=num2str(j,'%0.2d');%更新时刻
for k=1:mndays
S1(28:29)=num2str(k,'%0.2d');
A=load(S1);
index=find(hlow<A(:,1)&A(:,1)<hhigh);%找到高度向量中hlow~hhigh范围的所有高度的下标
vecArray=A(index,2).*cosd(A(index,3));%hlow~hhigh范围的南北风向风速向量
vec=mean(vecArray);%该时刻19公里附近的南北风向平均风速
vecmonth=[vecmonth vec];
if vec>0
daynorth=daynorth+1;
else
daysouth=daysouth+1;
end
end
vecnthmon=vecmonth(find(vecmonth>0));%该月北风平均风速数组
vecsthmon=vecmonth(find(vecmonth<=0));%该月南风平均风速数组
table(i*4+j/6+1,1)=daysouth;%该月南风天数
table(i*4+j/6+1,2)=daynorth;%该月北风天数
table(i*4+j/6+1,3)=mean(vecsthmon);%该月南风平均风速
table(i*4+j/6+1,4)=mean(vecnthmon);%该月北风平均风速
table(i*4+j/6+1,5)=std(vecsthmon);%该月南风风速标准差
table(i*4+j/6+1,6)=std(vecnthmon);%该月北风风速标准差
table(i*4+j/6+1,7)=mean(vecmonth);%该月南北方向总平均风速
table(i*4+j/6+1,8)=std(vecmonth);%该月南北方向风速标准差
daynorth=0;
daysouth=0;
vecmonth=[];
end
end
xlswrite('C.xls',table,'Sheet1','B2:I17');
hlow=20500;
hhigh=21500;
for i=0:3%6到9月四个月
if i==0|i==3 %6月份和9月份都是30天
mndays=30;
else
mndays=31;%7月份和8月份都是31天
end
S1(26:27)=num2str(i+6,'%0.2d');%更新月份
for j=0:6:18%00时刻,06时刻,12时刻,18时刻
S1(30:31)=num2str(j,'%0.2d');%更新时刻
for k=1:mndays
S1(28:29)=num2str(k,'%0.2d');
A=load(S1);
index=find(hlow<A(:,1)&A(:,1)<hhigh);%找到高度向量中hlow~hhigh范围的所有高度的下标
vecArray=A(index,2).*cosd(A(index,3));%hlow~hhigh范围的南北风向风速向量
vec=mean(vecArray);%该时刻19公里附近的南北风向平均风速
vecmonth=[vecmonth vec];
if vec>0
daynorth=daynorth+1;
else
daysouth=daysouth+1;
end
end
vecnthmon=vecmonth(find(vecmonth>0));%该月北风平均风速数组
vecsthmon=vecmonth(find(vecmonth<=0));%该月南风平均风速数组
table(i*4+j/6+1,1)=daysouth;%该月南风天数
table(i*4+j/6+1,2)=daynorth;%该月北风天数
table(i*4+j/6+1,3)=mean(vecsthmon);%该月南风平均风速
table(i*4+j/6+1,4)=mean(vecnthmon);%该月北风平均风速
table(i*4+j/6+1,5)=std(vecsthmon);%该月南风风速标准差
table(i*4+j/6+1,6)=std(vecnthmon);%该月北风风速标准差
table(i*4+j/6+1,7)=mean(vecmonth);%该月南北方向总平均风速
table(i*4+j/6+1,8)=std(vecmonth);%该月南北方向风速标准差
daynorth=0;
daysouth=0;
vecmonth=[];
end
end
xlswrite('C.xls',table,'Sheet1','B19:I34');
风速原始数据文件列表如图:
运行MATLAB程序即可自动将结果写到EXCEL文档里。