Construct a tridiagonal simplicial cone from consecutive angles
Source:R/utils.R
create_tridiagonal_cone.RdConstructs a set of \(n\) unit vectors in \(\mathbb{R}^n\) whose
Gram matrix \(V^\top V\) is tridiagonal with the prescribed
consecutive cosines on the off-diagonal. Supplies the canonical input
to tridiagonal_series.
Value
An \(n \times n\) numeric matrix V whose columns are
unit vectors satisfying \(v_i \cdot v_{i+1} = \cos(\text{angles}[i])\)
and \(v_i \cdot v_j = 0\) for \(|i - j| > 1\).
Details
The construction builds the desired tridiagonal Gram matrix
\(G_{ij} = \delta_{ij} + \cos(\text{angles}[i]) (\delta_{i, j-1} +
\delta_{i, j+1})\) and recovers V as the Cholesky factor: \(V\)
upper triangular with \(V^\top V = G\). If the constructed \(G\) is
not positive definite (which happens when the consecutive angles are
too large to admit a coherent set of generators), the function stops
with an informative error.
References
Fitisone, A., & Zhou, Y. (2023). Solid angle measure of polyhedral cones. arXiv:2304.11102 (math.CO). https://arxiv.org/abs/2304.11102
See also
tridiagonal_series for the natural consumer of the
returned matrix; is_tridiagonal for the predicate it
satisfies; compute_dot_product_matrix for inspecting the
resulting Gram structure; compute_solid_angle for the
dispatcher that auto-selects the tridiagonal backend.
Examples
if (FALSE) { # \dontrun{
angles <- rep(pi / 3, 3) # consecutive 60-degree angles in R^4
V <- create_tridiagonal_cone(angles)
is_tridiagonal(t(V) %*% V) # TRUE
tridiagonal_series(V)$solid_angle
} # }