数据来自网站http://uhslc.soest.hawaii.edu/data/?rq#uh288a,普通浏览器如果进不去就Fanqiang吧。
中国沿海有十几个验潮站,大部分验潮站是75-97年的每小时的数据。我下载的是dat格式的ascii文本数据,个人觉得csv格式更好,数据方便读取。选取其中七个计算,分别是'Dalian','lianyungang','Lusi','Kanmen','Shanwei','Zhapo','Beihai',算各个验潮站每一年的调和常数。只算四个主要分潮'M2';'S2';'O1';'K1'。
数据是这样:
数据只需要第四列到最后一列。
下面附上代码:
1 clear; 2 tic 3 location={'Dalian','lianyungang','Lusi','Kanmen','Shanwei','Zhapo','Beihai'}; 4 latitude=[38.925,34.750,32.133,28.088,22.750,21.583,21.483]; 5 for j=1:length(location) 6 Dir=fullfile('C:','Users','Lenovo','Desktop','Documents','本科生毕业论文','验潮站数据资料',location{j}); 7 File=dir(Dir); 8 File_num=length(File); 9 amp_pha=struct('time',{[]},'data',{[]}); 10 for i=3:File_num 11 File_name=File(i).name; 12 fileID=fopen(fullfile(Dir,File_name)); 13 C = textscan(fileID,'%s %s %s %f %f %f %f %f %f %f %f %f %f %f %f','headerlines',1); 14 fclose(fileID); 15 data=zeros(size(C{1},1),12); 16 for m=1:12 17 data(:,m)=C{1,m+3}; 18 end 19 data=data'; 20 data=reshape(data,[1,numel(data)]); 21 data(data==9999)=NaN; 22 [NAME,FREQ,TIDECON,XOUT]=t_tide(data,'interval',1,'latitude',latitude(j),'start time',[str2double(File_name(6:7))+1900,00,00,00],'rayleigh',['M2';'S2';'O1';'K1'] ); 23 amp_pha(i-2).time=str2double(File_name(6:7))+1900; amp_pha(i-2).data=TIDECON(:,[1,3]); 24 end 25 save([location{j},'.mat'],'amp_pha'); 26 end 27 toc
关于T_Tide的使用可以参考http://blog.sina.com.cn/s/blog_aed5bd1d0102w9vb.html。
第21行,数据有很多9999的坏数据用NaN代替。
最终得到的结果用struct类型保存,第一个字段是多少年time,第二个字段是四个分潮调和常数data。结果用mat文件保存。
查看Beihai的结果:
>> clear; >> load('Beihai.mat')