Skip to main content

bch_split

Function bch_split 

Source
pub fn bch_split<A: LieAlgebra>(z: &A) -> (A, A)
Expand description

Inverse BCH formula: Given Z, find X and Y such that exp(Z) = exp(X) · exp(Y).

This is useful for splitting a group element into a product of two elements. We use a simple midpoint splitting: X = Y = Z/2 + correction.

§Formula

For the splitting exp(Z) = exp(X) · exp(Y), we use:

X = Y = Z/2 - (1/8)[Z/2, Z/2] = Z/2 - (1/32)[Z,Z] = Z/2

Since [Z,Z] = 0, the second-order splitting is exact: X = Y = Z/2.

§Examples

use lie_groups::bch::bch_split;
use lie_groups::su2::Su2Algebra;
use lie_groups::traits::{LieAlgebra, LieGroup};
use lie_groups::SU2;

let z = Su2Algebra::new([0.4, 0.3, 0.2]);
let (x, y) = bch_split(&z);

// Verify exp(X) · exp(Y) ≈ exp(Z)
let gz = SU2::exp(&z);
let gx = SU2::exp(&x);
let gy = SU2::exp(&y);
let product = gx.compose(&gy);

let distance = gz.compose(&product.inverse()).distance_to_identity();
assert!(distance < 1e-10);