CurrentModule = AlgebraicSolving
DocTestSetup = quote
using AlgebraicSolving
end
using AlgebraicSolving
Pages = ["connectivity.md"]
AlgebraicSolving allows to compute a roadmap for the real trace of the zero-set of the ideal spanned by given input generators over the rationals.
It assumes that the underlying algebraic set is smooth, and its real trace is bounded.
The underlying engine is provided by msolve.
roadmap(
I::Ideal{P} where P <: QQMPolyRingElem;
C::Vector{Vector{Vector{QQFieldElem}}}=Vector{Vector{QQFieldElem}}[],
info_level::Int=0,
checks::Bool=false
)
In addition, AlgebraicSolving can compute equations definition critical loci of polynomial maps over the given algebraic set.
computepolar(
J::Union{Vector{Int},UnitRange{Int}},
V::Ideal{P};
phi::Vector{P} = P[],
dimproj = length(J)-1,
only_mins = false
) where (P <: MPolyRingElem)
AlgebraicSolving allows to compute a graph whose associated (3D) piecewise linear curve is semi-algebraically homeomorphic to a real algebraic curve given as input. This input can be:
- an
Idealgiven by generators over the rationals, whose real trace is the curve; - a one-dimensionnal parametrization given as a
RationalCurveParametrization. We refer to theTypespage for such a structure.
It is also possible to compute the arrangement of several curves by simply providing the corresponding vector of Ideals.
In both cases, user can, in addition, provide control points that will be correctly identified in the final graph, from a topological point of view.
The underlying engines are
- internal subresultants computations for paramtrization of critical points;
msolvefor univariate real root isolation.
curve_graph(
I::Ideal{P}, args...;
generic=true,
outf=true,
v=0,
kwargs...
) where {P <: QQMPolyRingElem}
curve_arrangement_graph(
curves::Vector{Ideal{P}};
generic=true,
outf=true,
v=0,
kwargs...
) where (P <: MPolyRingElem)
Once such a graph is computed, it is encoded in a CurveGraph object, whose description can be found in the Types section of this documentation. These are nothing but sets of verteices and nodes. One can perform different operations on such strutures.
connected_components(
G::CurveGraph{T}
) where T
group_by_components(
G::CurveGraph
)
number_of_connected_components(
G::CurveGraph
)
merge_graphs(
graphs::Vector{CurveGraph}
)
As e.g. Plots.jl is not part of AlgebraicSolving.jl, it cannot provide direct functions for plotting curve graphs. However, functions for exporting curve graphs in a format adapted to most ploting libraries, encoded in a GraphPlotData object. We refer to the Types section for more information on this structuree.
build_graph_data(
G::CurveGraph{T};
width=3.0,
vert=true,
color="#FF0000"
) where T <: Union{Float64,QQFieldElem}
build_graph_data(
CG::Vector{CurveGraph{T}};
width=3.0,
vert=true
) where T <: Union{Float64,QQFieldElem}