Выполнение обычного кригинга на MATLAB - PullRequest
0 голосов
/ 21 апреля 2019

Я пытаюсь использовать функцию из следующей ссылки, чтобы выполнить обычный кригинг моих данных в MATLAB! https://www.mathworks.com/matlabcentral/fileexchange/29025-ordinary-kriging

Это кажется достаточно простым, но у меня есть некоторые проблемы, заставляющие это работать. В настоящее время, используя код, который я предоставлю, я получаю ошибки:

Error using griddedInterpolant
The grid vectors do not define a grid of points that match the given values.

Error in interp2/makegriddedinterp (line 214)
            F = griddedInterpolant(varargin{:});

Error in interp2 (line 127)
        F = makegriddedinterp({X, Y}, V, method,extrap);

Error in untitled (line 18)
    z = interp2(X,Y,Z,x,y); 

Я пытался объединить сетки для лат и долг, но я не знаю, если это необходимо, и когда я выполняю эти задачи, я сталкиваюсь с проблемой памяти, превышающей предел памяти, который говорит мне, даже если это работает, это будет слишком медленно, чтобы быть осуществимым, потому что массивы будут ~ 88000x88000.

Вот мой код:

lat = ncread('/projectnb/atmchem/ahsouri/MCIP/GRIDCRO2D_1km_HGB_2013249', 'LAT'); % degrees
no2 = ncread('/projectnb/atmchem/ahsouri/CCTM/CCTM_US1k.CONC.1km_HGB.2013249', 'NO2'); % ppm
lon = ncread('/projectnb/atmchem/ahsouri/MCIP/GRIDCRO2D_1km_HGB_2013249', 'LON'); % degrees 
no2_snip = [no2(1,1,1,12), no2(100,100,1,12), no2(260,260,1,12)];
lat_snip = [lat(1,1),lat(100,100),lat(260,260)];
lon_snip = [lon(1,1), lon(100,100),lon(260,260)];

% create random field with autocorrelation
x = lat;
y = lon;
no2_surf = no2(:,:,1,12);
Z = no2_surf;

% sample the field
n = 500;
X = lat_snip;
Y = lon_snip;
z = interp2(X,Y,Z,x,y);

% plot the random field
subplot(2,2,1)
imagesc(X(1,:),Y(:,1),Z); axis image; axis xy
hold on
plot(x,y,'.k')
title('random field with sampling locations')

% calculate the sample variogram
v = variogram([x y],z,'plotit',false,'maxdist',100);
% and fit a spherical variogram
subplot(2,2,2)
[dum,dum,dum,vstruct] = variogramfit(v.distance,v.val,[],[],[],'model','stable');
title('variogram')

% now use the sampled locations in a kriging
[Zhat,Zvar] = kriging(vstruct,x,y,z,X,Y);
subplot(2,2,3)
imagesc(X(1,:),Y(:,1),Zhat); axis image; axis xy
title('kriging predictions')
subplot(2,2,4)
contour(X,Y,Zvar); axis image
title('kriging variance')

лат 336x264 длина 336x264 №2 (:,:, 1,12): 336х264

lat snip, lon snip и no2 snip имеют длину 3 переменные и задают значения lat, lon и no2 в точках, из которых я хочу интерполировать соответственно

Я рассчитываю интерполировать из трех точек, которые я указал, через целую фигуру. Любая помощь будет принята с благодарностью!

...