getfieldfromcp.m

来自「麻省理工学院的人工智能工具箱,很珍贵,希望对大家有用!」· M 代码 · 共 114 行

M
114
字号
function [field]=getFieldfromEOF(cam,dmn,varargin)
%field=getFieldfromEOF(cam,dmn,var,time,level)
%
%Funcion que extrae el campo seleccionado del dominio correspondiente, recostruyendo los 
%datos a partir de sus CPs y EOFs, por defecto extrae todos los campos definidos en el 
%dominio
%
%En la entrada : 	
%	cam		:	ruta completa de donde se encuentran las CPs (cfg.cam)
%	dmn		:	domain utilizado para crear las CPs
%	varargin	:	param閠ros opcionales (por defecto toma los definidos en el dmn)
%		'ncp'			-	numero de cps que quiero utilizar para reconstruir los datos
%		'var'			-	numero de la variable, con la que se han creado las CPs, que quiero extraer
%		'time'		-	hora de analisis de la variable que quiero extraer (es necesario definir var)
%		'level'		-	nivel de analisis de la variable que quiero extraer (es necesario definir var)
%		'startdate'	-	fecha de inicio de los datos que quiero extraer en formato 'dd-mmm-yyyy'
%		'enddate'	-	fecha de fin de los datos que quiero extraer en formato 'dd-mmm-yyyy'
%ejemplo de llamada:
%	field = getFieldfromEOF(cfg.cam,dmn,'var',129,'time',12,'level',850,...
%			 'startdate','01-Dec-1992','enddate','05-Dec-1992');
%En la salida	:
%	field	: 	estructura con el siguiente formato
%		field.var		:	variable(s) utilizada
%		field.tim		:	hora(s) utilizada
%		field.lvl		:	nivel(es) utilizados
%		field.startdate:	fecha de inicio de los datos seleccionados
%		field.enddate	:	fecha de fin de los datos seleccionados
%		field.dat		:	matriz de datos de tama駉 (numero Dias)*...
%				[(longitud de var)*(longitud de time)*(longitud de level)*(numero de nodos)]
%
%
field=[];
CP=[];
NCP=[];
EOF=loadMtx(cam,'SV');
MN=loadMtx(cam,'MN');
DV=loadMtx(cam,'DV');
var=dmn.par;
time=dmn.tim;
level=dmn.lvl;
startDate1=datenum(dmn.startDate);
endDate1=datenum(dmn.endDate);
startDate2=[];
endDate2=[];
for i=1:2:length(varargin)
   switch lower(varargin{i}),
   case 'ncp', NCP = varargin{i+1};
   case 'var',    var = varargin{i+1};
   case 'time', time = varargin{i+1}; 
   case 'level', level = varargin{i+1};
   case 'startdate',   
      if ((datenum(varargin{i+1}))<startDate1),
         startDate1
         (varargin{i+1})
         error(['no existen los datos correspondientes a la fecha ' num2str(varargin{i+1})])
      else
         startDate2 = datenum(varargin{i+1}); 
      end
   case 'enddate',  
      if datenum(varargin{i+1})>endDate1,
         error(['no existen los datos correspondientes a la fecha' varargin{i+1}])
      else
         endDate2= datenum(varargin{i+1}); 
      end
   case 'cp', CP=varargin{i+1}; startDate1=1; endDate1=size(CP,1); 
   end
end
if isempty(CP),
   CP=loadMtx(cam,'CP');
end
if isempty(NCP),
   NCP=size(CP,2);
end


field.var=var;
field.tim=time;
field.lvl=level;
if (~isempty(startDate2))
   field.startDate=datestr(startDate2,'dd-mmm-yyyy');
else
   field.startDate=datestr(startDate1,'dd-mmm-yyyy');
end
if (~isempty(endDate2))
   field.endDate=datestr(endDate2,'dd-mmm-yyyy');
else
   field.endDate=datestr(endDate1,'dd-mmm-yyyy');
end

numDias=(endDate1-startDate1)+1;
if (~isempty(startDate2) & ~isempty(endDate2))
   fechas=[1+(startDate2-startDate1):1:numDias-(endDate1-endDate2)];
elseif (~isempty(startDate2)& isempty(endDate2))
   fechas=[1+(startDate2-startDate1):1:numDias];
elseif (~isempty(endDate2) & isempty(startDate2))
   fechas=[1:1:numDias-(endDate1-endDate2)];
else
   fechas=[1:1:numDias];
end


datos=((CP(fechas,1:NCP)*EOF(:,1:NCP)').*repmat(DV,[length(fechas) 1]))+repmat(MN,[length(fechas) 1]);

field.dat=[];
for p=1:length(var),
   for i=1:length(time)
      for j=1:length(level)
         ind=findVarPosition(var(p),time(i),level(j),dmn);
         field.dat=[field.dat datos(:,ind)];
      end
   end
end

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?