Re: FindRoot on complex 'interval'

*To*: mathgroup at smc.vnet.net*Subject*: [mg36967] Re: [mg36943] FindRoot on complex 'interval'*From*: Daniel Lichtblau <danl at wolfram.com>*Date*: Thu, 3 Oct 2002 00:17:22 -0400 (EDT)*References*: <200210020733.DAA20798@smc.vnet.net>*Sender*: owner-wri-mathgroup at wolfram.com

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 suggestions. (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}, {x,y}] 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

**References**:**FindRoot on complex 'interval'***From:*David J Strozzi <dstrrozzi@MIT.EDU>