Constrained problems
This feature is still experimental. It has not been tested thoroughly, especially the case of multiple constraints and matrix-free functionals.
This section is dedicated to the study of an equation (in x) F(x,p)=0 where one wishes to add a constraint g(x,p)=0. Hence, one is interested in solving in the couple $(x,p)$:
There are several situations where this proves useful:
- the pseudo-arclength continuation method is such a constrained problem, see
continuationfor more details. - when the equation $F(x)$ has a continuous symmetry described by a Lie group $G$ and action $g\cdot x$ for $g\in G$. One can reduce the symmetry of the problem by considering the constrained problem:
where $T$ is a generator of the Lie algebra associated to $G$ and $x_{ref}$ is a reference solution. This is known as the freezing method.
See Beyn and Thümmler, Phase Conditions, Symmetries and PDE Continuation. for more information on the freezing method.
Encoding of the functional
A composite type which implements this functional:
BifurcationKit.BorderedProblem — Typepb = BorderedProblem(;F, dxF, dpF, g, ∇g, dpg)This composite type encodes a bordered problem, one by which we add a scalar constraint g(x, p) = 0 to an equation F(x, p) = 0. This composite type thus allows to define the functional G((x, p)) = [F(x, p) g(x, p)] and solve G = 0.
You can then evaluate the functional using or pb(z) where z = BorderedArray(x, p) or z = vcat(x, p), i.e. the last component of the vector is the Lagrange Multiplier.
Arguments
The arguments correspond to the functions F, g and their derivatives.
Simplified constructor
You can create such functional as pb = BorderedProblem(F, g).
It is in fact possible, using this composite type, to define a bordered problem with constraint of dimension npar > 1. One has to pass the dimension to pb = BorderedProblem(F, g, npar) and possibly the derivatives as well. The second argument of F,g is npar dimensional (for now an AbstractVector). Finally, the only possible linear (bordered) solver in this case is ::MatrixBLS.