# This function returns an object of class "dist"
sim2dist <- function(mx)
as.dist(sqrt(outer(diag(mx), diag(mx), "+") - 2*mx))
# from similarity to distance matrix
d.mx = as.matrix(d.mx)
d.mx = sim2dist(d.mx)
# The distance matrix can be used to visualize
# hierarchical clustering results as dendrograms
hc = hclust(d.mx)
plot(hc)
See Multivariate Analysis (Probability and Mathematical Statistics)