samples matlab,气象万千(冯锦明课题组)-MATLAB: Samples

本文介绍了如何使用MATLAB进行气象数据的处理,包括文件读取、字符串处理、时间信息提取、NetCDF和GRIB文件的读写。此外,还详细讲解了图形绘制,如错误条形图、填充等值线、风矢量图以及区域屏蔽的实现,同时探讨了MATLAB与其他应用程序的交互,如编译为可执行文件和调用外部接口。
摘要由CSDN通过智能技术生成

bf3c4df53eeb315a63c4c72e48f9a99a.png

各类应用示例

字符串处理

当前路径下包含文件名以'fnl_20110705'开头的4个文件:

fnl_20110705_00_00_c

fnl_20110705_06_00_c

fnl_20110705_12_00_c

fnl_20110705_18_00_c

fn=dir('fnl_20110705*');

则fn.name中保存了每个文件名字符串

将前两个文件名与第三个文件名前8个字符连接起来:

fns=[fn(1:2).name, fn(3).name(1:8)];

fns=strcat(fn(1:2).name, fn(3).name(1:8)); %与上一行结果相同

垂直方向连接成一个字符矩阵:

fns=char({fn(1:2).name,fn(3).name(1:8)});

fns=strvcat(fn(1:2).name,fn(3).name(1:8));

函数cellfun的使用技巧:

fns={fn.name}:(为包含四个文件名字符串的cell数组)

读出这些文件名中包含的时间信息,保存为数值矩阵:

方法一:

tim=zeros(numel(fns),4)

for i=1:numel(fns)

tim(i,:)=sscanf(fns{i}, 'fnl_%4d%2d%2d_%2d');

end

方法二:

tim=cellfun(@(x)sscanf(x, 'fnl_%4d%2d%2d_%2d')',fns,'UniformOutput',false);

tim=cell2mat(tim);

regexp的使用:

将文件名中的小时数读出来:

tim=regexp(fns,‘\d*(?=_00_c)','match')

%tim=regexp(fns,'[0-9]*(?=_00_c)','match')

tim=[tim{:}];

tim =  (cell类型)

'00'    '06'    '12'    '18’

将文件名中的’00_c’替换为’30’:

fns2=regexprep(fns,'\d*_c','30')

日期和时间函数

计算1950年1月到2012年12月每月1号相对于1950年1月1日的天数,并将日期转换为英文日期形式:

yr=repmat([1950:2012],[12 1]);

mon=repmat([1:12]', [1 size(yr,2)]);

dy=ones(size(yr));

mydate=[yr(:) mon(:) dy(:)];

daten=datenum(mydate)-datenum([1950 1 1]);

sdate=datestr(datenum(mydate));

% sdate=datestr([mydate zeros(mydate)]);  %与上行结果相同

sdate2=datestr(datenum(mydate), 'mmm dd, yyyy');

如果要使用无闰年的相应计算方法,则可使用MetToolbox中的相应函数:

datenum365, datevec365

各类气象数据文件的读写

NetCDF文件

NetCDF文件的读写方法较多,可以直接利用Matlab的内置函数ncread, ncwrite, nccreate等high-level函数来实现,也可利用netcdf.open, netcdf.inqVar, netcdf.getVar等low-level函数来完成。利用high-level相关函数来读写nc文件的例子代码:

nctest_inner.m

利用MetToolbox中的NetCDF Toolboxc对netcdf文件进行各种操作,更具特色,往往实现起来更为便捷。利用其读取变量的方法:

nc=netcdf(‘data.nc’);

var=nc{‘var’}(:);

close(nc);

读取并创建NETCDF4压缩文件的方法,具体代码见:

GRIB1/2

利用MetToolbox中的nctoolbox-1.1.1对grib文件中的变量进行读取:

fn='xxx.grib2';

vname='var';

ds=ncgeodataset(fn);

vv=ds.geovariable(vname);

att=cell2struct(vv.attributes(:,2),vv.attributes(:,1),1);

tim=vv.gettimedata();

disp(datestr(tim,'yyyy-mm-dd HH:MM:SS'))

lon=vv.getlondata();

lat=vv.getlatdata();

zz=double(vv.data(:));

Fortran unformatted 顺序存取文件读取

写文件的F90代码如下:

real:: aa(10,20)

aa=reshape((/((i,j=1,10),i=1,20)/),(/10,20/))

open(12,file=‘test.dat’,fo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值