Skip to content

chc.splitting

Stability tier: evolving.

Operator splitting (Lie-Trotter, Strang-Marchuk): integrate the known linear part exactly.

For ẋ = A x + r(x) the known linear (often stiff) operator is advanced by its exact flow exp(A dt) and the learned residual r by RK4. Strang-Marchuk composes them symmetrically for 2nd-order accuracy, so the network need not represent the stiff known dynamics. This is where the "Marchuk" framing earns its keep.

exact_linear_flow(a_matrix)

Exact flow of ẋ = A x: returns (x, dt) -> expm(A dt) @ x.

residual_flow(field, u)

RK4 flow of ẋ = field(x, u) at a fixed control u.

lie_trotter_step(flow_a, flow_b, x, dt)

First-order split: S_A(dt) ∘ S_B(dt).

strang_marchuk_step(flow_a, flow_b, x, dt)

Second-order symmetric split: S_A(dt/2) ∘ S_B(dt) ∘ S_A(dt/2).