# deflate -- first-order deflation

## Synopsis

• Usage:
r = deflate(F,P); r = deflate(F,r); r = deflate(F,B), ...
• Inputs:
• Optional inputs:
• Variable => ..., default value null
• Outputs:
• r, an integer, the rank used in the (last) deflation
• Consequences:
• Attaches the keys Deflation and DeflationRandomMatrix which are MutableHashTables that (for rank r, a potential rank of the jacobian J of F) store the deflated system DF and a matrix B used to obtain it. Here B is a random matrix of size n x (r+1), where n is the number of variables and DF is obtained by appending to F the matrix equation J*B*[L_1,...,L_r,1]^T = 0. The polynomials of DF use the original variables and augmented variables L_1,...,L_r.

## Description

The purpose of deflation is to restore quadratic convergence of Newton's method in a neighborhood of a singular isolated solution P. This is done by constructing an augmented polynomial system with a solution of strictly lower multiplicity projecting to P.

Apart from P, an instance of the type Point, one can pass various things as the second argument.

• an integer r specifies the rank of the Jacobian dF (that may be known to the user)
• B specifies a fixed (r+1)-by-n matrix to use in the deflation construction.
• a pair of matrices (B,M) specifies additionally a matrix that is used to squareUp.
• a list{(B1,M1),(B2,M2),...} prompts a chain of successive deflations using the provided pairs of matrices.
The option Variable specifies the base name for the augmented variables.
 i1 : CC[x,y,z] o1 = CC [x..z] 53 o1 : PolynomialRing i2 : F = polySystem {x^3,y^3,x^2*y,z^2} o2 = F o2 : PolySystem i3 : P0 = point matrix{{0.000001, 0.000001*ii,0.000001-0.000001*ii}} o3 = P0 o3 : Point i4 : isFullNumericalRank evaluate(jacobian F,P0) o4 = false i5 : r1 = deflate (F,P0) o5 = 0 i6 : P1' = liftPointToDeflation(P0,F,r1) o6 = P0 o6 : Point i7 : F1 = F.Deflation#r1 o7 = F1 o7 : PolySystem i8 : P1 = newton(F1,P1') o8 = P1 o8 : Point i9 : isFullNumericalRank evaluate(jacobian F1,P1) o9 = false i10 : r2 = deflate (F1,P1) o10 = 1 i11 : P2' = liftPointToDeflation(P1,F1,r2) o11 = P2' o11 : Point i12 : F2 = F1.Deflation#r2 o12 = F2 o12 : PolySystem i13 : P2 = newton(F2,P2') o13 = P2 o13 : Point i14 : isFullNumericalRank evaluate(jacobian F2,P2) o14 = true i15 : P = point {take(coordinates P2, F.NumberOfVariables)} o15 = P o15 : Point i16 : assert(residual(F,P) < 1e-50) 

## Caveat

Needs more documentation!!!