Monodromy Solve
Next to solve
, HomotopyContinuation.jl provides the function monodromy_solve
. Instead of taking a two systems f
and g
and tracking an array of start solutions from f
to g
, monodromy_solve
takes as input a single system with parameters p
and together with a start solution s
. Then by tracking s
around loops in the parameters p
, monodromy_solve
duplicates the solution until a stopping criterion is reached.
HomotopyContinuation.monodromy_solve
— Function.monodromy_solve(F, sols, p; parameters=..., options..., pathtrackerkwargs...)
Solve a polynomial system F(x;p)
with specified parameters and initial solutions sols
by monodromy techniques. This makes loops in the parameter space of F
to find new solutions.
Options
target_solutions_count=nothing
: The computations are stopped if this number of solutions is reached.done_callback=always_false
: A callback to end the computation early. This function takes 2 arguments. The first one is the new solutionx
and the second one are all current solutions (includingx
). Returntrue
if the compuation is done.maximal_number_of_iterations_without_progress::Int=10
: The maximal number of iterations (i.e. loops generated) without any progress.group_action=nothing
: A function taking one solution and returning other solutions if there is a constructive way to obtain them, e.g. by symmetry.strategy
: The strategy used to create loops. IfF
only depends linearly onp
this will bePetal
. Otherwise this will beTriangle
with weights ifF
is a real system.show_progress=true
: Enable a progress meter.distance_function=euclidean_distance
: The distance function used forUniquePoints
.identical_tol::Float64=1e-6
: The tolerance with which it is decided whether two solutions are identical.group_actions=nothing
: If there is more than one group action you can use this to chain the application of them. For example if you have two group actionsfoo
andbar
you can setgroup_actions=[foo, bar]
. SeeGroupActions
for details regarding the application rules.group_action_on_all_nodes=false
: By default the group_action(s) are only applied on the solutions with the main parameterp
. If this is enabled then it is applied for every parameterq
.parameter_sampler=independent_normal
: A function taking the parameterp
and returning a new random parameterq
. By default each entry of the parameter vector is drawn independently from the univariate normal distribution.equivalence_classes=true
: This only applies if there is at least one group action supplied. We then consider two solutions in the same equivalence class if we can transform one to the other by the supplied group actions. We only track one solution per equivalence class.check_startsolutions=true
: Iftrue
, we do a Newton step for each entry ofsols
for checking if it is a valid startsolutions. Solutions which are not valid are sorted out.timeout=float(typemax(Int))
: The maximal number of seconds the computation is allowed to run.minimal_number_of_solutions
: The minimal number of solutions before a stopping heuristic is applied. By default this is half oftarget_solutions_count
if applicable otherwise 2.
Strategies
HomotopyContinuation.Triangle
— Type.Triangle(;useweights=true)
A triangle is a loop consisting of the main node and two addtional nodes. If weights
is true the edges are equipped with additional random weights. Note that this is usually only necessary for real parameters.
HomotopyContinuation.Petal
— Type.Petal()
A petal is a loop consisting of the main node and one other node connected by two edges with different random weights.
GroupActions
If there is a group acting on the solution set of the polynomial system this can provided with the group_action
keyword for single group actions or with the group_actions
keyword for compositions of group actions. These will be internally transformed into GroupActions
.
GroupActions(actions::Function...)
Store a bunch of group actions (f1, f2, f3, ...)
. Each action has to return a tuple. The actions are applied in the following sense
- f1 is applied on the original solution
s
- f2 is applied on
s
and the results of 1 - f3 is applied on
s
and the results of 1) and 2)
and so on
Example
julia> f1(s) = (s * s,);
julia> f2(s) = (2s, -s, 5s);
julia> f3(s) = (s + 1,);
julia> GroupActions(f1)(3)
(3, 9)
julia> GroupActions(f1, f2)(3)
(3, 9, 6, -3, 15, 18, -9, 45)
julia> GroupActions(f1,f2, f3)(3)
(3, 9, 6, -3, 15, 18, -9, 45, 4, 10, 7, -2, 16, 19, -8, 46)
To help with the more common group actions we provide some helper functions:
SymmetricGroup(n)
Group action of the symmetric group S(n).
Helper functions
HomotopyContinuation.parameters
— Function.parameters(r::MonodromyResult)
Return the parameters corresponding to the given result r
.