I'm trying to find the zeros of the Hankel function (the first few will do) of the first kind $H^{(1)}_\nu(z) = J_\nu(z) + i Y_\nu(z)$ for complex argument $z$ but I'm not sure what is the best function for this in mathematica.
EDIT: Per suggestion I have tried to implement the function FindAllCrossings2D
Options[FindAllCrossings2D] =
Sort[Join[
Options[FindRoot], {MaxRecursion -> Automatic,
PerformanceGoal :> $PerformanceGoal, PlotPoints -> Automatic}]];
FindAllCrossings2D[funcs_, {x_, xmin_, xmax_}, {y_, ymin_, ymax_},
opts___] :=
Module[{contourData, seeds, tt,
fy = Compile[{x, y}, Evaluate[funcs[[2]]]]},
contourData =
Map[First,
Cases[Normal[
ContourPlot[funcs[[1]], {x, xmin, xmax}, {y, ymin, ymax},
Contours -> {0}, ContourShading -> False,
PlotRange -> {Full, Full, Automatic},
Evaluate[
Sequence @@
FilterRules[Join[{opts}, Options[FindAllCrossings2D]],
DeleteCases[Options[ContourPlot], Method -> _]]]]], _Line,
Infinity]];
seeds =
Flatten[Map[#[[1 +
Flatten[Position[
Rest[tt = Sign[Apply[fy, #, 2]]] Most[tt], -1]]]] &,
contourData], 1];
If[seeds == {}, seeds,
Select[Union[
Map[{x, y} /.
FindRoot[{funcs[[1]] == 0,
funcs[[2]] == 0}, {x, #[[1]]}, {y, #[[2]]},
Evaluate[
Sequence @@
FilterRules[Join[{opts}, Options[FindAllCrossings2D]],
Options[FindRoot]]]] &,
seeds]], (xmin < #[[1]] < xmax && ymin < #[[2]] < ymax) &]]]
sols = FindAllCrossings2D[{Re[HankelH1[0, x + I y]],
Im[HankelH1[0, x + I y]]}, {x, -2, 2}, {y, -2, 2}]
But I receive this error "FindRoot::cvmit: Failed to converge to the requested accuracy or precision within 100 iterations."
I also looked at the contour plot and we can clearly see nontrivial zeros periodically for z = $x + i y$ and $x < 0$ and $y < 0$. I also attempted the get coordinate and then FindRoot[], but this failed to converge and appeared to be going away from the root.