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
continuation
for 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
.