MathGroup Archive 2002

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

Search the Archive

Re: FindRoot on complex 'interval'

  • To: mathgroup at
  • Subject: [mg36967] Re: [mg36943] FindRoot on complex 'interval'
  • From: Daniel Lichtblau <danl at>
  • Date: Thu, 3 Oct 2002 00:17:22 -0400 (EDT)
  • References: <>
  • Sender: owner-wri-mathgroup at

David J Strozzi wrote:
> Hello,
> I am trying to use FindRoot in mathematica 4.0 to find the zeros of a
> complex-valued function of one complex variable.  In particular, I am
> looking for the one root with a positive imaginary part.  I have a rough
> approximation for where the root should be, and this is good enough to
> give a reasonable guess.
> However, there are always two other roots near the one I want - one with
> 0 imaginary part and another with negative imag part.  (For those who
> are interested, the zeros are the roots of the dispersion relation for a
> plasma interacting with a laser).  Sometimes FindRoot picks up one of
> these instead of the one I want.
> So, I'd like to tell mathematica to look for a root only in a certain
> rectangular region of the complex plane.  Well, if I could tell it,
> 'look for roots with imag. part > something', I'd be happy too.
> I tried specifying complex values for the start and stop points of an
> interval, hoping mathematica would interpret these as the corners of a
> rectangle.  No such luck.
> Any help would be greatly appreciated.
> I'd also like to point out that this and other issues about complex
> roots are not clearly addressed in the built-in help files.
> Thanks much.

I believe it is difficult to restrict FindRoot. Below are several

(1) You might try
rigging the function, say with
g[x_?NumberQ] := f[x] + If[Im[x]<=0,1000,0]

(2) If you have version 4.2 a related approach would be to take
advantage of constrained optimization and do

NMinimize[{Re[f[x,y]]^2 + Im[f[x,y]]^2, rectangle range constraints},

or something along those lines.

(3) If proximity of the other roots is the main problem it might be
alleviated by rescaling your variable.

(4) Alternatively you could write your function as a pair of real valued
functions of two real valued arguments. Then you can use Interval to
split the rectangle into parts, keeping subrectangles for which {0,0}
lives in f[Interval[x],Interval[y]] where Interval[x], for example, is a
shorthand for an interval for the x part of the rectangle being split.

Daniel Lichtblau
Wolfram Research

  • Prev by Date: Re: simple two step optimization
  • Next by Date: Re: simple two step optimization
  • Previous by thread: Re: FindRoot on complex 'interval'
  • Next by thread: Re: FindRoot on complex 'interval'