where \(\gamma \)  is a randomly chosen complex number with \(\Vert \gamma  \Vert =1\)  (introduced for numerical stability) and \(t\)  is a new variable. The key observation is now that the solution of \(\mathbf {H}(\mathbf {x},t=0)=\mathbf {0}\)  corresponds to the solution of \(\mathbf {F}(\mathbf {x})=\mathbf {0}\)  and the solution of \(\mathbf {H}(\mathbf {x},t=1)=\mathbf {0}\)  corresponds to the solution of \(\mathbf {G}(\mathbf {x})=\mathbf {0}\) . Furthermore, it can be shown that when \(t\)  varies from 1 to 0, the roots of (REF ) vary smoothly from the roots of \(\mathbf {G}\)  to the roots of \(\mathbf {F}\) . This gives a recipe for the homotopy solver: fix a small step \(h\)  and iteratively solve the equation \(\mathbf {H}(\mathbf {x},t_k-h)\)  using Newton iteration and the solution of \(\mathbf {H}(\mathbf {x},t_k)\)  as initial guess. By the smoothness assumption, the solution at each step will be close to the solution at the previous step and hence the system can be solved efficiently in a few iterations. The homotopy algorithm is initialized with the solution of \(\mathbf {G}(\mathbf {x})=\mathbf {0}\)  which can be computed efficiently by the assumptions on \(\mathbf {G}\) . In the experiments of this paper, we use the publicly available HomotopyContinuation.jl [1]} library.
