function OUT = var_spher(M,varargin)

%VAR_SPHER estimates a spherical variogram for a given data set
%using nonlinear least squares.

%Written by: TONY E. SMITH, 2/21/98

%Functions called: variogram.m, var_fit.m, spher.m
%
%INPUTS:  M = (nx3)-matrix of locations and data values,
%              M(i) = (Xi,Yi,Zi), i = 1:n
%         varargin = optional bandwidth specification (if not 
%                    specified, the default value is Dmax/2).
%
%OUTPUTS: OUT = cell(6,1) with
%         (i)   OUT{1}= [r,s,a] (= estimated [range,sill,nugget])
%         (ii)  OUT{2}= distance values, (Di, i=1:b) 
%         (iii) OUT{3}= empirical variogram values Gi at Di
%         (iv)  OUT{4}= spherical values Vi at Di
%         (v)   OUT{5}= number of iterations in FMINS
%         (vi)  OUT{6}= Bandwidth used in variogram estimates


if nargin > 1
   
   d = varargin{:} ;
      
	[DAT,d] = variogram(M,d) ;

else
   
   [DAT,d] = variogram(M) ;

end

D = DAT(:,1) ;

G = DAT(:,2) ;

N = DAT(:,3);

z = M(:,3);

var = std(z)^2;   %sample variance

r0 = max(D)/2 ;      %initial estimate of range = Dmax/2

a0 = min(G) ;     %initial estimate of nugget

y = [r0,a0];

DAT = var_fit_test(y,D,G,N,var) ;

p = DAT{1};

iter = DAT{2} ;
   
OUT = cell(4,1) ;

OUT{1} = p ;

OUT{2} = D ;

OUT{3} = G ;

OUT{4} = spher(p,D) ;

OUT{5} = iter ;

OUT{6} = d;



