%% ЕйубгщгЮ уфз ЧщсйкЮ РбсемвплЮ
% *ЦбЯдщн КхсйбкЯдзт*
%
% ФмЮмб ГещгсбцЯбт РбнерйуфзмЯпх БйгбЯпх

%% ЕйубгщгЮ дедпмЭнщн вспчьрфщузт уе уфбимпэт кбй рлзспцпсЯет
load bayAreaData.mat
who
opengl software % ерйлпгЮ гсбцйкюн

%% РспкбфбскфйкЬ
Data = bayprecip
% 1з уфЮлз -> бэопнфбт бсйимьт вспчпмефсйкпэ уфбимпэ
% 2з уфЮлз -> гещгсбцйкь мЮкпт уфбимпэ
% 3з уфЮлз -> гещгсбцйкь рлЬфпт уфбимпэ
% 4з уфЮлз -> вспчьрфщуз уе mm
% 5з уфЮлз -> вспчьрфщуз (уе mm) рпх кбфбгсЬцзке брь Энб Ьллп ьсгбнп
nDat = size(bayprecip,1);
idStation = num2str(Data(:,1));
% ухмвплпуейсЬ ме фпн бэопнфб бсйимь фпх кЬие уфбимпэ
plotPars = {'color', 'vbar'}; 
% color -> Эгчсщмз брейкьнйуз, vbar -> ме кЬиефп хрьмнзмб чсюмбфпт

%% Брейкьнйуз дедпмЭнщн
bulletSize = 30;
cLims = [1 15]; % чсщмбфйкЬ ьсйб
scattermap(bayprecip,[2 3],bulletSize,4,'cont',cLims,plotPars);
% [2 3] -> уфЮлет ме ухнфефбгмЭнет уфбимюн
% 4 -> уфЮлз ме мефсЮуейт уфбимюн
title('Bay Area precipitation data set');
hold on
plot(baycoast(:,1),baycoast(:,2),'k-');
% baycoast -> ухнфефбгмЭнет бкфпгсбммЮт
hold off

%% КбфбукехЮ кбннЬвпх рбсемвплЮт
figure
minmax = []; % ўдейпт рЯнбкбт мйксьфесщн кбй мегблэфесщн ухнфефбгмЭнщн 
nx = 10; ny = 10;
GridSpecs10x10 = makegridspecs(bayprecip(:,[2 3]),minmax,[nx ny],'dataplot');
% bayprecip(:,[2 3]) -> ухнфефбгмЭнет уфбимюн
hold on
plot(baycoast(:,1),baycoast(:,2),'k-');
hold off

%% ЕнбллбкфйкЬ
figure
%scattermap(bayprecip,[2 3],bulletSize,4,'cont',cLims,plotPars);
xy = makegrid(GridSpecs10x10);
hold on
plot(xy(:,1),xy(:,2),'k.');
plot(baycoast(:,1),baycoast(:,2),'k-');
hold off
axis image
size(xy)

%% РбсемвплЮ рлзуйЭуфеспх геЯфпнб (Thiessen or Voronoi)
precipNN = fastinterp('scatter',xy,bayprecip,[2 3],4,'nn');
size(precipNN)

%% Брейкьнйуз екфймЮуещн вспчьрфщузт уфб узмеЯб рбсемвплЮт
figure
scattermap([xy precipNN],[1 2],bulletSize,3,'cont',cLims,plotPars);
% [xy precipNN]
hold on
plot(baycoast(:,1),baycoast(:,2),'k-');
hold off
axis image

%% Voronoi рплэгщнб
[vx,vy] = voronoi(bayprecip(:,2),bayprecip(:,3));
hold on
plot(vx,vy,'k-');
hold off

%% Рхкньфесз кЬннбвпт (300 x 360)
GridSpecs
prod(GridSpecs(:,1))
nx = GridSpecs(1,1); xmin = GridSpecs(1,2); xsize = GridSpecs(1,3); 
ny = GridSpecs(2,1); ymin = GridSpecs(2,2); ysize = GridSpecs(2,3);
%x = (xmin:xsize:xmin+(nx-1)*xsize);
%y = (ymin:ysize:ymin+(ny-1)*ysize);

%% РбсемвплЮ рлзуйЭуфеспх геЯфпнб (Thiessen or Voronoi)
precipNN = fastinterp('regular',GridSpecs,bayprecip,[2 3],4,'nn');
size(precipNN)

%% Брейкьнйуз ерйцЬнейбт рбсемвплЮт вспчьрфщузт
figure
rastermap(GridSpecs,precipNN,1,'cont',cLims,plotPars);
hold on
%scattermap(bayprecip,[2 3],20,4,'cont',cLims,{'color','nobar'});
plot(baycoast(:,1),baycoast(:,2),'k-');
hold off

%% РбсемвплЮ TIN уфпхт кьмвпхт мйбт кбнпнйкЮт кбннЬвпх
precipTIN = fastinterp('regular',GridSpecs,bayprecip,[2 3],4,'tin');
help delaunay

%% Брейкьнйуз ерйцЬнейбт вспчьрфщузт ме рбсемвплЮ TIN
figure
rastermap(GridSpecs,precipTIN,1,'cont',cLims,plotPars);
hold on
%scattermap(bayprecip,[2 3],20,4,'cont',cLims,{'color','nobar'});
plot(baycoast(:,1),baycoast(:,2),'k-');
hold off

%% Tсйгщнйумьт TIN
TRI = delaunay(bayprecip(:,2),bayprecip(:,3));
hold on
triplot(TRI,bayprecip(:,2),bayprecip(:,3),'k');
hold off

%%
figure
trisurf(TRI,bayprecip(:,2),bayprecip(:,3),bayprecip(:,4));
trimesh(TRI,bayprecip(:,2),bayprecip(:,3),bayprecip(:,4));

%% РбсемвплЮ вспчьрфщузт ме фз мЭипдп Spline
precipSpline = fastinterp('regular',GridSpecs,bayprecip,[2 3],4,'spline');
size(precipSpline)

%% Брейкьнйуз ерйцЬнейбт вспчьрфщузт ме рбсемвплЮ Spline
figure
rastermap(GridSpecs,precipSpline,1,'cont',cLims,plotPars);
hold on
%scattermap(bayprecip,[2 3],20,4,'cont',cLims,{'color','nobar'});
plot(baycoast(:,1),baycoast(:,2),'k-');
hold off

%% МЬук уфесйЬт/иЬлбуубт
size(baymask)
rastermap(GridSpecs,baymask,1,'cont',[],plotPars);

%% МЬукб ерйцЬнейбт вспчьрфщузт
precipSpline(baymask == 0) = NaN; 
rastermap(GridSpecs,precipSpline,1,'cont',cLims,plotPars);
hold on
%scattermap(bayprecip,[2 3],20,4,'cont',cLims,{'color','nobar'});
plot(baycoast(:,1),baycoast(:,2),'k-');
hold off

%% РбсемвплЮ ме фз мЭипдп фпх фпрйкпэ мЭупх ьупх
searchSpecs = [0 0.5 0.5];
% searchSpecs = дйеэихнуз (бжймпэийп) кэсйпх Ьопнб Эллейшзт 
%               уе мпЯсет брь фп ВН, мЮкпт кэсйпх змйЬопнб,
%               мЮкпт дехфесеэпнфб змйЬопнб
searchData = [4 12]; 
% srchData = елЬчйуфпт кбй мЭгйуфпт бсйимьт рлзуйЭуфесщн гейфьнщн,
%            мЭуб уфпн кэклп, рпх иб чсзуймпрпйзипэн 
precipLocMean = locmeaninterp('regular',GridSpecs,bayprecip,[2 3],4,searchSpecs,searchData);

%% Брейкьнйуз ерйцЬнейбт вспчьрфщузт ме рбсемвплЮ фпрйкпэ мЭупх
figure
rastermap(GridSpecs,precipLocMean,1,'cont',cLims,plotPars);
hold on
%scattermap(bayprecip,[2 3],20,4,'cont',cLims,{'color','nobar'});
plot(baycoast(:,1),baycoast(:,2),'k-');
hold off

%% РбсемвплЮ ме фз мЭипдп фщн бнфЯуфспцщн брпуфЬуещн (global)
pow = 2; % екиЭфзт
precipIDW2glob = idwinterp('regular',GridSpecs,bayprecip,[2 3],4,pow);

%% Брейкьнйуз ерйцЬнейбт вспчьрфщузт
figure
%precipIDW2glob(baymask == 0) = NaN; 
rastermap(GridSpecs,precipIDW2glob,1,'cont',cLims,plotPars);
hold on
%scattermap(bayprecip,[2 3],20,4,'cont',cLims,{'color','nobar'});
plot(baycoast(:,1),baycoast(:,2),'k-');
hold off

%% РбсемвплЮ ме фз мЭипдп фщн бнфЯуфспцщн брпуфЬуещн (global)
pow = 5; % екиЭфзт
precipIDW5glob = idwinterp('regular',GridSpecs,bayprecip,[2 3],4,pow);

%% Брейкьнйуз ерйцЬнейбт вспчьрфщузт
figure
precipIDW5glob(baymask == 0) = NaN; 
rastermap(GridSpecs,precipIDW5glob,1,'cont',cLims,plotPars);
hold on
%scattermap(bayprecip,[2 3],20,4,'cont',cLims,{'color','nobar'});
plot(baycoast(:,1),baycoast(:,2),'k-');
hold off

%% РбсемвплЮ ме фз мЭипдп фщн бнфЯуфспцщн брпуфЬуещн (local)
pow = 2; % екиЭфзт
precipIDW2loc = idwinterp('regular',GridSpecs,bayprecip,[2 3],4,pow,searchSpecs,searchData);

%% Брейкьнйуз ерйцЬнейбт вспчьрфщузт
figure
precipIDW2loc(baymask == 0) = NaN; 
rastermap(GridSpecs,precipIDW2loc,1,'cont',cLims,plotPars);
hold on
%scattermap(bayprecip,[2 3],20,4,'cont',cLims,{'color','nobar'});
plot(baycoast(:,1),baycoast(:,2),'k-');
hold off

%% Cross-validation (leave-one-out) уе рбсемвплЮ рлзуйЭуфеспх геЯфпнб
precipNN = fastinterp('crossval',[],bayprecip,[2 3],4,'nn');
disp(precipNN(1:5,:))
% 1h -> x ухнфефбгмЭнз
%    -> y ухнфефбгмЭнз
%    -> бсчйкЮ фймЮ
%    -> екфймпэменз фймЮ
%    -> cross-validation уцЬлмб

%% Йуфьгсбммб кбй уфбфйуфйкЬ уцблмЬфщн
plothist(precipNN(:,5),[],'dens',50)
univstats(precipNN(:,5))

%% Cross-validation (leave-one-out) уе рбсемвплЮ TIN
precipTIN = fastinterp('crossval',[],bayprecip,[2 3],4,'tin');
disp(precipTIN(1:5,:))
% 1h -> x ухнфефбгмЭнз
%    -> y ухнфефбгмЭнз
%    -> бсчйкЮ фймЮ
%    -> екфймпэменз фймЮ
%    -> cross-validation уцЬлмб

%% Йуфьгсбммб кбй уфбфйуфйкЬ уцблмЬфщн
plothist(precipTIN(:,5),[],'dens',50)
univstats(precipTIN(:,5))

%% **** МЕЧСЙ ЕДЩ ****

%% ЕрЯредп фЬузт уфб узмеЯб рбсбфЮсзузт
Out = trendsurface(Data,[2 3],4,{'x','y'});
size(Out)
Out(1:5,:)
%
bulletSize = 20;
scattermap(Out,[1 2],bulletSize,3,'cont',[],plotPars);
hold on; plot(baycoast(:,1),baycoast(:,2),'k-'); hold off
figure
scattermap(Data,[2 3],bulletSize,4,'cont',[],plotPars);
hold on; plot(baycoast(:,1),baycoast(:,2),'k-'); hold off

%% ЕрЯредп фЬузт уфб узмеЯб фзт кбннЬвпх рбсемвплЮт
Out = trendsurface(Data,[2 3],4,{'x','y'},'regular',GridSpecs);
size(Out)
figure
rastermap(GridSpecs,Out,1,'cont',[],plotPars);
hold on; plot(baycoast(:,1),baycoast(:,2),'k-'); hold off

%% ЕрйцЬнейб фЬузт уфб узмеЯб рбсбфЮсзузт
Out2 = trendsurface(Data,[2 3],4,{'x','y','xx','yy','xy'});
size(Out2)
Out2(1:5,:)
%
bulletSize = 20;
scattermap(Out2,[1 2],bulletSize,3,'cont',[],plotPars);
hold on; plot(baycoast(:,1),baycoast(:,2),'k-'); hold off
figure
scattermap(Data,[2 3],bulletSize,4,'cont',[],plotPars);
hold on; plot(baycoast(:,1),baycoast(:,2),'k-'); hold off

%% ЕрЯредп фЬузт уфб узмеЯб фзт кбннЬвпх рбсемвплЮт
Out2 = trendsurface(Data,[2 3],4,{'x','y','xx','yy','xy'},'regular',GridSpecs);
size(Out2)
figure
rastermap(GridSpecs,Out2,1,'cont',[],plotPars);
hold on; plot(baycoast(:,1),baycoast(:,2),'k-'); hold off