Surface area of the intersection of two hyperspherical caps
Surface area of the intersection of two hyperspherical caps
Computation of [REMOVE_ME]Ax(θij):=ωp1∫Sp−11{Xi′γ≤x,Xj′γ≤x}dγ,Ax(θij):=ωp1∫Sp−11Xi′γ≤x,Xj′γ≤xdγ,[REMOVEME2]
where θij:=cos−1(Xi′Xj)∈[0,π], x∈[−1,1], and ωp is the surface area of Sp−1. Ax(θij) is the proportion of surface area of Sp−1 covered by the intersection of two hyperspherical caps centered at Xi and Xj and with common solid angle π−cos−1(x).
A_theta_x(theta, x, p, N =160L, as_matrix =TRUE)
Arguments
theta: vector with values in [0,π].
x: vector with values in [−1,1].
p: integer giving the dimension of the ambient space Rp that contains Sp−1.
N: number of points used in the Gauss-Legendre quadrature . Defaults to 160.
as_matrix: return a matrix with the values of Ax(θ) on the grid formed by theta and x? If FALSE, Ax(θ) is evaluated on theta and x if they equal in size. Defaults to TRUE.
Returns
A matrix of size c(length(theta), length(x)) containing the evaluation of Ax(θ) if as_matrix = TRUE. Otherwise, a vector of size c(length(theta) if theta and x equal in size.
where θij:=cos−1(Xi′Xj)∈[0,π], x∈[−1,1], and ωp is the surface area of Sp−1. Ax(θij) is the proportion of surface area of Sp−1 covered by the intersection of two hyperspherical caps centered at Xi and Xj and with common solid angle π−cos−1(x).
Details
See García-Portugués et al. (2023) for more details about the Ax(θ) function.
Examples
# Plot A_x(theta) for several dimensions and x'sA_lines <-function(x, th = seq(0, pi, l =200)){ plot(th, A_theta_x(theta = th, x = x, p =2), type ="l", col =1, ylim = c(0,1.25), main = paste("x =", x), ylab = expression(A[x](theta)), xlab = expression(theta), axes =FALSE) axis(1, at = c(0, pi /4, pi /2,3* pi /4, pi), labels = expression(0, pi /4, pi /2,3* pi /4, pi)) axis(2); box() abline(h = c(0,1), lty =2) lines(th, A_theta_x(theta = th, x = x, p =3), col =2) lines(th, A_theta_x(theta = th, x = x, p =4), col =3) lines(th, A_theta_x(theta = th, x = x, p =5), col =4) legend("top", lwd =2, legend = paste("p =",2:5), col =1:4, cex =0.75, horiz =TRUE)}old_par <- par(mfrow = c(2,3))A_lines(x =-0.75)A_lines(x =-0.25)A_lines(x =0)A_lines(x =0.25)A_lines(x =0.5)A_lines(x =0.75)par(old_par)# As surface of (theta, x) for several dimensionsA_surf <-function(p, x = seq(-1,1, l =201), th = seq(0, pi, l =201)){ col <- c("white", viridisLite::viridis(20)) breaks <- c(-1, seq(1e-15,1, l =21)) A <- A_theta_x(theta = th, x = x, p = p) image(th, x, A, main = paste("p =", p), col = col, breaks = breaks, xlab = expression(theta), axes =FALSE) axis(1, at = c(0, pi /4, pi /2,3* pi /4, pi), labels = expression(0, pi /4, pi /2,3* pi /4, pi)) axis(2); box() contour(th, x, A, levels = breaks, add =TRUE)}old_par <- par(mfrow = c(2,2))A_surf(p =2)A_surf(p =3)A_surf(p =4)A_surf(p =5)par(old_par)# No matrix returnth <- seq(0, pi, l =5)x <- seq(-1,1, l =5)diag(A_theta_x(theta = th, x = x, p =2))A_theta_x(theta = th, x = x, p =2, as_matrix =FALSE)
References
García-Portugués, E., Navarro-Esteban, P., Cuesta-Albertos, J. A. (2023) On a projection-based class of uniformity tests on the hypersphere. Bernoulli, 29(1):181--204. tools:::Rd_expr_doi("10.3150/21-BEJ1454") .