Constrained problems

Experimental

This feature is still experimental. It has not been tested thoroughly and may not work, 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)$:

\[\left\{ \begin{array}{l} F(x,p)=0 \\ g(x,p)=0 \end{array}\right.\]

There are several situations where this proves useful:

  1. the pseudo-arclength continuation method is such a constrained problem, see continuation for more details.
  2. 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:

\[\left\{ \begin{array}{l} F(x) + p\cdot T\cdot x=0 \\ \langle T\cdot x_{ref},x-x_{ref}\rangle=0 \end{array}\right.\]

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.

Reference

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.BorderedProblemType
pb = BorderedProblem(;F, dxF, dpF, g, dg, 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).

Multidimensional constraint (Really Experimental)

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.