# refine(List,List) -- refine numerical solutions to a system of polynomial equations

## Synopsis

• Function: refine
• Usage:
solsR = refine(T,sols)
• Inputs:
• T, a list, contains the polynomials of the system (may be of type PolySystem)
• sols, a list, contains (a) solution(s) (points or lists of coordinates of points)
• Optional inputs:
• Bits => ..., default value null, options for core functions of Numerical Algebraic Geometry
• ErrorTolerance => ..., default value null, options for core functions of Numerical Algebraic Geometry
• Iterations => ..., default value null, options for core functions of Numerical Algebraic Geometry
• ResidualTolerance => ..., default value null, options for core functions of Numerical Algebraic Geometry
• SingularConditionNumber => ..., default value null, set/get the default parameters for continuation algorithms
• Software => ..., default value null, specify internal or external software
• Outputs:
• solsR, a list, contains refined solutions (as points)

## Description

Uses Newton's method to correct the given solutions so that the resulting approximation has its estimated relative error bounded by min(ErrorTolerance,2^(-Bits)). The number of iterations made is at most Iterations.

 i1 : R = CC[x]; i2 : F = polySystem {x^2-2}; i3 : P := refine(F, point{{1.5+0.001*ii}}, Bits=>1000) o3 = {1.41421} o3 : Point i4 : first coordinates P o4 = 1.4142135623730950488016887242096980785696718753769480731766797379907324 784621070388503875343276415727350138462309122970249248360558507372126441 214970999358314132226659275055927557999505011527820605714701095599716059 702745345968620147285174186408891986095523292304843087143214508397626036 2799525140799 o4 : CC (of precision 1002) i5 : R = CC[x,y]; i6 : T = {x^2+y^2-1, x*y}; i7 : sols = { {1.1,-0.1}, {0.1,1.2} }; i8 : refine(T, sols, Software=>M2, ErrorTolerance=>.001, Iterations=>10) o8 = {{1, -2.17629e-17}, {7.01931e-15, 1}} o8 : List

In case of a singular (multiplicity>1) solution, while solveSystem and track return the end of the homotopy paths marked as a 'failure', it is possible to improve the quality of approximation with refine. The resulting point will be marked as singular:

 i9 : R = CC[x,y]; i10 : S = {x^2-1,y^2-1}; i11 : T = {x^2+y^2-1, (x-y)^2}; i12 : solsS = {(1,1),(-1,-1)}; i13 : solsT = track(S,T,solsS) o13 = {[M,t=.999998], [M,t=.999998]} o13 : List i14 : solsT / coordinates o14 = {{.70667, .707543}, {-.70667, -.707543}} o14 : List i15 : refSols = refine(T, solsT) o15 = {(.707107, .707107), (-.707107, -.707107)} o15 : List i16 : refSols / status o16 = {Singular, Singular} o16 : List

The failure to complete the refinement procedure is indicated by warning messages and the resulting point is displayed as [R].

 i17 : R = CC[x]; i18 : F = polySystem {x^2-2}; i19 : Q := refine(F, point{{1.5+0.001*ii}}, Bits=>1000, Iterations=>2) o19 = [RF] o19 : Point i20 : peek Q o20 = Point{cache => CacheTable{...4...}} Coordinates => {1.41422}

## Caveat

There are 2 'safety' bits in the computation. If the condition of the system at the refined point is poor the number of correct bits may be much smaller than requested.