# How to find the root of the equation which contains imaginary I in it

 ClearAll["Global*"]
zz = FullSimplify[-(((0. + 396232. I) x Cos[
0.000198116 Sqrt[x^2]] Csc[(Sqrt[157/10] Sqrt[x^2])/20000])/
Sqrt[x^2]) - (I (x^2)^(3/4))/(4945.28 x Csc[
0.186346 (x^2)^(1/4)] Sin[0.0621153 (x^2)^(1/4)] Sin[
0.124231 (x^2)^(1/4)] -
4945.28 x Csch[0.186346 (x^2)^(1/4)] Sinh[
0.0621153 (x^2)^(1/4)] Sinh[0.124231 (x^2)^(1/4)])]
Plot[{Re[zz], Im[zz]}, {x, 0, 100000}]
FindRoot[zz == 0, {x, 8000}]


I wanted to find the root of this equation but seems like NSolve is not working for these kinds of equation. How to deal about these kind of situation. I tried NSolve but it is failing. Findroot function is working but demands initial guess all the time. How to implement NSolve for this kind of problem.

## 2 Answers

You can specify the region where to look for the solutions:

NSolve[0 == zz && Abs[x] < 100000, x]

(*{{x -> -87215.4 + 0. I}, {x -> -71358. + 0. I}, {x -> -55500.7 +
0. I}, {x -> -39643.3 + 0. I}, {x -> -23786. +
0. I}, {x -> -7928.67 + 0. I}, {x -> 7928.67 + 0. I}, {x ->
23786. + 0. I}, {x -> 39643.3 + 0. I}, {x -> 55500.7 + 0. I}, {x ->
71358. + 0. I}, {x -> 87215.4 + 0. I}}*)

• Tricky solution! The result is real and I'm wondering why NSolve[0 == zz && 0 < x < 100000, x , Reals] fails. – Ulrich Neumann Nov 17 '18 at 13:11
• According to the manual, In NSolve[expr,vars,Reals] all variables, parameters, constants, and function values are restricted to be real. So technically, since the function is complex valued, you should use NSolve[0 == z && x \[Element] Reals && 0 < x < 100000, x, Complexes]. Nevertheless it fails. I would guess it has something to do with the way MMA deals with expressions like $\sqrt{x^2}$. – yuriyi Nov 18 '18 at 14:26
• @ yuriyi Thanks! – Ulrich Neumann Nov 18 '18 at 14:45

I don't know why NSolve fails. Here is a workaround which uses the datapoints used in Plot

pict = Plot[{Im[zz], 0}, {x, 0, 100000}, MaxRecursion -> 5 ]
(* added "0" as second argument *)

np = GraphicsMeshFindIntersections[pict[[All, 1]]  ];
(* intersection points Im[zz] and 0 *)
(*{{7929.56, 7.27596*10^-12}, {23786.7, 0.}, {39643.5,7.27596*10^-12},
{55500.7, -3.63798*10^-12}, {71358., 0.}, {87215.5,0.}}*)


These are the points Im[zz]==0!

Show[{pict, Graphics[{Red, PointSize[Large], Point[np]}]}]
` If you need more precision you can take the result as Starting values inside FindRoot.