##First create some random locations
x <- rnorm(5)
y <- rnorm(5)
##compute distance matrix
D <- crossDist( cbind(x,y) )
##create a block diagonal matrix exponential covariance matrix
##with different range, sill, and nugget
pars <- list(c(.3,2), c(2,1), c(1,3))
nugget <- c(.5,0,1)
Sigma1 <- makeSigmaB(pars, D, type="exp", nugget=nugget)
##or using different covariance functions for each block
Sigma2 <- makeSigmaB(pars, D, type=c("exp","exp2","cubic"),
                     nugget=nugget)
##make a cross-covariance matrix
Dcross <- D[1:3,c(1,1,2,2)]
Sigma.cross <- makeSigmaB(pars, Dcross, type="exp", nugget=nugget,
                          ind2.to.1=c(1,1,2,2))
Sigma.alt <- matrix(0, length(pars)*dim(D)[1], length(pars)*dim(D)[1])
  for(i in 1:length(pars)){
    Ind <- (1:dim(D)[1]) + (i-1)*dim(D)[1]
    Sigma.alt[Ind, Ind] <- pars[[i]][2]*exp(-D/pars[[i]][1])
    diag(Sigma.alt[Ind, Ind]) <- diag(Sigma.alt[Ind, Ind])+nugget[i]
  }
  if( abs(max(Sigma1-Sigma.alt)) > 1e-13){
    stop("makeSigmaB: Results not equal, covariance")
  }
  Ind <- c(1,1,2,2)
  Sigma.alt.cross <- Sigma.alt[c(1:3,6:8,11:13),c(Ind, 5+Ind, 10+Ind)]
  if( abs(max(Sigma.cross-Sigma.alt.cross)) > 1e-13){
    stop("makeSigmaB: Results not equal, cross-covariance")
  }Run the code above in your browser using DataLab