# Constrained problems

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:

- 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:

\[\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*.

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`

— Type`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)`

.

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`

.