Path Tracking

The certified tracking implementation follows Krawczyk-based homotopy tracking ideas from [DL24, GL24].

Basic Usage

julia> @variables x y;
julia> CC = AcbField(256);
julia> F = [x^2 + 3y - 4, y^2 + 3];
julia> G = [x^2 - 1, y^2 - 1];
julia> H = straight_line_homotopy(F, G, [x, y]; CCRing=CC, gamma=CC(0.5, 0.5));Compilation Done.
julia> res = track_path(H, [CC(1), CC(-1)]; show_progress=false)TrackResult(success, status=success, iterations=19, accepted=19, rejected=17, final_radius=0.08388608, precision=53->53, final_krawczyk_norm=0.6637106351554394, approx=ComplexF64[2.29754636 + 1.1308047im, -0.0 - 1.73205081im])
julia> success(res)true
julia> solution(res)2-element Vector{ComplexF64}: 2.297546356910025 + 1.130804696731974im -6.455301105644087e-16 - 1.7320508075688894im
julia> evaluate_H(H, certified_region(res), CC(1))2-element Vector{AcbFieldElem}: -[5.64904665864591492734298534814525665370376083406671677278332310834230156615376e-13 +/- 4.73e-91] - [8.26199768032912061040426643556365540610622279953448310330088588671060279011726e-14 +/- 3.80e-92]*im -[4.19575535858305058121681790752147301909618935626991180088611749989272536376263e-14 +/- 4.98e-92] + [2.23618189862623717062326312022523248333330021278306355042698843852656608944054e-15 +/- 4.84e-93]*im
CertifiedHomotopyTracking.track_pathFunction
track_path(sys::SpecializedHomotopy, x_start; kwargs...) -> TrackResult
track_path(compiled::CompiledHomotopy, x_start; kwargs...) -> TrackResult

Track one certified path for a specialized homotopy.

The input sys is usually produced by straight_line_homotopy for a direct homotopy, or by make_edge_system from a CompiledHomotopy created with compile_edge_homotopy. For a direct homotopy created with compile_homotopy, the compiled homotopy can be passed directly; the ACB precision is inferred from x_start.

Example

@variables x y;
CC = AcbField(256);
F = [x^2 + 3y - 4, y^2 + 3];
G = [x^2 - 1, y^2 - 1];
H = straight_line_homotopy(F, G, [x, y]; CCRing=CC, gamma=CC(0.5, 0.5));

res = track_path(H, [CC(1), CC(-1)]; show_progress=false)
success(res)
solution(res)
evaluate_H(H, certified_region(res), CC(1))

Main options

  • adaptive_precision=true: retry failed certified tracking at higher Arb/ACB precision.
  • min_precision=53: first precision used when adaptive precision is enabled.
  • max_precision=max(100_000, precision(sys.CC)): largest retry precision.
  • precision_rejection_threshold=8: with adaptive precision enabled, retry the path at higher precision after this many consecutive rejected steps whose Krawczyk norms do not improve significantly.
  • t_start=0.0, t_end=1.0: homotopy parameter interval.
  • h_init=0.1: initial step size.
  • rho=0.7: Krawczyk contraction threshold.
  • show_progress=false: print accepted-step progress.
  • projective=false: require projective chart tracking. This requires sys to have been compiled with projective=true.
  • affine_chart_atol=1e-10: threshold used when deciding whether a projective endpoint is near infinity in the original affine chart.
  • store_boxes=:summary: use :full to keep path boxes for later visualization.
  • visualize=false: when not false, keep path boxes and optionally export a path visualization. Pass true, a filename, or a named tuple such as (filename="path.tex", axes=(:t, 1)).
  • visualize_options=(;): visualization/export options. See Visualization for related export helpers.
    • filename: output filename for automatic export.
    • axes: two or three axes. Axis entries may be :t, an integer coordinate, or (i, :real), (i, :imag), (i, :abs).
    • show_trace: draw stored trace points when available.

Projective example

H_projective = straight_line_homotopy(F, G, [x, y]; CCRing=CC, projective=true);
res = track_path(H_projective, [CC(1), CC(-1)]; projective=true);
projective_solution(res)

Visualization example

res = track_path(H, [CC(1), CC(-1)]; visualize=true);
path_boxes(res)
export_path_tikz(res, "path.tex"; axes=(:t, 1))
source
Open example path PDF

References

[DL24]
T. Duff and K. Lee. Certified homotopy tracking using the Krawczyk method. In: Proceedings of the 2024 International Symposium on Symbolic and Algebraic Computation (2024); pp. 274–282.
[GL24]
A. Guillemot and P. Lairez. Validated numerics for algebraic path tracking. In: Proceedings of the 2024 International Symposium on Symbolic and Algebraic Computation (2024); pp. 36–45.