datachk.m
来自「Kriging插值matlab toolbox」· M 代码 · 共 168 行
M
168 行
function datachk(opt)
%% function datachk(opt)
%% datachk.m perform several operations on the original data
%% 1. check raw data to remove overlapping data points
%% 2. data subsampling using averaged data over support ninc
%% 3. coordinate conversion
%% opt = 1 called from data preparation window
%% 2 called from kriging window using the same data format as in the dataprep window.
%% 3 called from kriging window using a specified data format.
%%
%% Kriging Software Package version 3.0, May 1, 2004
%% Copyright (c) 1999, 2001, 2004, property of Dezhang Chu and Woods Hole Oceanographic
%% Institution. All Rights Reserved.
global para data hdl
DEG2RAD=pi/180;
EPS=1e-10;
if para.dataprep.ext_prog== 1
x=data.in.var1;
y=data.in.var2*para.dataprep.ytox;
z=data.in.var3*para.dataprep.ztox;
var=data.in.var;
else
switch para.dataprep.x_axis_indx % x-axis variable
case 1
data.in.var1=data.in.var1_raw;
case 2
data.in.var1=data.in.var2_raw;
case 3
data.in.var1=data.in.var3_raw;
end
switch para.dataprep.y_axis_indx % y-axis variable
case 1
data.in.var2=data.in.var1_raw;
case 2
data.in.var2=data.in.var2_raw;
case 3
data.in.var2=data.in.var3_raw;
end
if data.in.dim == 3
switch para.dataprep.z_axis_indx % z-axis variable
case 1
data.in.var3=data.in.var1_raw;
case 2
data.in.var3=data.in.var2_raw;
case 3
data.in.var3=data.in.var3_raw;
end
else
data.in.var3=data.in.var3_raw;
end
x=data.in.var1;
y=data.in.var2*para.dataprep.ytox;
z=data.in.var3*para.dataprep.ztox;
var=data.in.var_raw;
end
% remove data points that have the same coordinates
while 1
if data.in.dim == 3
r=sqrt(diff(x).^2+diff(y).^2+diff(z).^2);
else
r=sqrt(diff(x).^2+diff(y).^2);
end
rmin=0.01*mean(r);
indxs=find(r < rmin);
if ~isempty(indxs)
x(indxs)=[];
y(indxs)=[];
var(indxs)=[];
if data.in.dim == 3
z(indxs)=[];
end
else
break
end
end
%% remove data points with NaN's
data.in.var1=x;
data.in.var2=y/para.dataprep.ytox;
if data.in.dim == 3
data.in.var3=z/para.dataprep.ztox;
end
data.in.var=var;
if data.in.dim == 2
indx1=find(isnan(x)|isnan(y)|isnan(var));
if ~isempty(indx1)
x(indx1)=[];
y(indx1)=[];
var(indx1)=[];
end
else
indx1=find(isnan(x)|isnan(y)|isnan(z)|isnan(var));
if ~isempty(indx1)
x(indx1)=[];
y(indx1)=[];
z(indx1)=[];
var(indx1)=[];
end
end
data.in.x=x;
data.in.y=y;
data.in.z=z;
data.in.v=var;
% data reduction
datareduction(opt);
%%%%%% data x-y scale normalization (0-1)%%%%%%
if para.krig.batch_file_proc == 0 | (para.krig.batch_file_proc == 1 & para.krig.bat_proc_cnt == 1)
para.dataprep.x_norm=max(x)-min(x);
para.dataprep.x_offset=mean_nan(x);
para.dataprep.y_norm=max(y)-min(y);
para.dataprep.y_offset=mean_nan(y);
if para.dataprep.x_norm == 0 % x = const.
para.dataprep.x_norm=max(EPS,x(1));
end
if para.dataprep.y_norm == 0 % y = const.
para.dataprep.y_norm=max(EPS,y(1));
end
if data.in.dim == 3
para.dataprep.z_norm=max(z)-min(z);
para.dataprep.z_offset=mean_nan(z);
if para.dataprep.z_norm == 0 % z = const.
para.dataprep.z_norm=max(EPS,z(1));
end
end
end
if para.krig.load_data_format_file == 0
para.dataprep.var1_indx=get(hdl.dataprep.var1,'value');
para.dataprep.var2_indx=get(hdl.dataprep.var2,'value');
end
%% convert longitude to latitude degrees
if para.dataprep.var1_indx == 1 & para.dataprep.var2_indx == 2 % Long/Lat
para.dataprep.latlonfac=cos(DEG2RAD*data.in.y);
elseif para.dataprep.var1_indx == 2 & para.dataprep.var2_indx == 1 % Lat/Long
para.dataprep.latlonfac=cos(DEG2RAD*data.in.x);
else
para.dataprep.latlonfac=1;
end
%% save the un-normalized coordinates
data.in.x0=data.in.x;
data.in.y0=data.in.y;
data.in.z0=data.in.z;
if para.dataprep.var1_indx == 1 & para.dataprep.var2_indx == 2 %y-axis -> Lat
data.in.x=(data.in.x-para.dataprep.x_offset).*para.dataprep.latlonfac./para.dataprep.x_norm;
data.in.y=(data.in.y-para.dataprep.y_offset)/para.dataprep.y_norm;
elseif para.dataprep.var1_indx == 2 & para.dataprep.var2_indx == 1 %x-axis -> Lat
data.in.x=(data.in.x-para.dataprep.x_offset)/para.dataprep.x_norm;
data.in.y=(data.in.y-para.dataprep.y_offset).*para.dataprep.latlonfac/para.dataprep.y_norm;
else % other variables
data.in.x=(data.in.x-para.dataprep.x_offset)/para.dataprep.x_norm;
data.in.y=(data.in.y-para.dataprep.y_offset)/para.dataprep.y_norm;
end
if data.in.dim == 3
data.in.z=(data.in.z-para.dataprep.z_offset)/para.dataprep.z_norm;
end
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?