MathGroup Archive 2002

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Finding many complex roots

  • To: mathgroup at smc.vnet.net
  • Subject: [mg37777] Re: [mg37757] Finding many complex roots
  • From: Selwyn Hollis <selwynh at earthlink.net>
  • Date: Tue, 12 Nov 2002 03:13:50 -0500 (EST)
  • References: <200211111010.FAA16126@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

Marco,

Here a piece of code that might do what you want. It's hardly an elegant 
solution, but it works fairly well. This indicates the arguments (and 
the name suggests the method):

     shotgun[ fn, {z, z1, z2, dz}, tol, fuzz]

It returns a list of zeros of fn in the rectangle whose lower-left and 
upper-right corners are z1 and z2. I hope the other arguments are 
explained by the comments within the code.

shotgun[fn_, {z_Symbol, z1_?NumericQ, z2_?NumericQ, dz_?NumericQ},
    tol_?NumericQ, fuzz_?NumericQ]:= Module[{gridpts,shot,solns},

  (* Construct a list of grid points. The mesh size is dz.*)
   gridpts = Table[x + I*y, {x,Re[z1],Re[z2],dz}, {y,Im[z1],Im[z2],dz}];

  (* It's a bit faster if we compile Abs[fn]. *)
   fc = Compile[{{z,_Complex,2}}, Abs[fn]];

  (* Keep only the grid points where Abs[fn] < tol. *)
   starters = Extract[gridpts, Position[fc[gridpts], _?(#<tol&)]];

  (* Map FindRoot through the list of starting points.*)
   shot = Chop@FindRoot[fn,{z,#}]&/@starters;

  (* Sort by magnitude and remove "repetitions".
     A "repetition" occurs when consecutive solutions differ by  	
     less than fuzz. *)
   solns = Sort[shot,(Abs[z/.#1] < Abs[z/.#2])&];
   solns = First/@Split[solns,(Abs[(z/.#1)-(z/.#2)] < fuzz)&];

  (* Sort again and remove "repetitions". *)
   First/@Split[Sort[solns],(Abs[(z/.#1)-(z/.#2)] < fuzz)&]

     ]

Example:
This seems to catch all the zeros of Sin[Sin[Sin[z]]] in the rectangle 
0<=Re[z]<=Pi, 0<=Im[z]<=2:

   shotgun[ Sin[Sin[Sin[z]]], {z, 0, Pi+2*I, .01}, .2, 10^(-5)]

Of course, being "sure" that all the zeros are found will require some 
experimenting with the parameters.


----
Selwyn Hollis




Marco wrote:
> Hi,
> I have to find many complex roots of complex function like
> f[z]=0  where z is complex.
> I try first the graphical approch:
> ImplicitPlot[{Re[f[a+ Ib]]==0,Im[f[a+I b]]==0},{a,amin,amax},{b,bmin,bmax}]
> or somethink else, and it works good and I visualize the solution in the
> specificated region.
> Now I'd like to compute the finding automaticaly.
> I' seen other posts which illustrates how find many roots of real function
> of real varible but I'm unable to genaralize in 2D case.
> Some one can help me?
> 
> P.S. sorry for my english
> 
> Thanks x1000
> 
> 
> 
> 
> 




  • Prev by Date: Re: HELP! Why are the solutions from NDSolve and DSolve not identical?
  • Next by Date: RE: Re: How to use error message return values
  • Previous by thread: Finding many complex roots
  • Next by thread: Re: Finding many complex roots