MathGroup Archive 2006

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

Search the Archive

Re: Using Map with a function of more than 1 argument

  • To: mathgroup at smc.vnet.net
  • Subject: [mg64255] Re: [mg64241] Using Map with a function of more than 1 argument
  • From: Murray Eisenberg <murray at math.umass.edu>
  • Date: Wed, 8 Feb 2006 03:53:47 -0500 (EST)
  • Organization: Mathematics & Statistics, Univ. of Mass./Amherst
  • References: <200602070836.DAA29926@smc.vnet.net>
  • Reply-to: murray at math.umass.edu
  • Sender: owner-wri-mathgroup at wolfram.com

Before spending too much time "rolling your own", you may want to take a 
look at David Park's add-on package Cardano3 (based on his DrawGraphics 
add-on).  See:

   http://home.earthlink.net/~djmp/Mathematica.html

You can find a few examples of use of this package also on the Files 
page at

   http://www.math.umass.edu/Courses/Math_421/

(not all the notebooks there involve Cardano3, and none are evaluated, 
so you'll need Park's package).  See, especially, 
IntroComplexGraphics.nb, VisualizeFunctions.nb, RiemannSphere.nb, 
ExponentialLogFunctions.nb, Poles.nb.

Matt wrote:
> Hello Mathematica group,
>   I'm starting down the path of trying to come up with my own complex
> mapping function.  I'm aware of CartesianMap and PolarMap, but I've
> been frustrated by those because of the lack of fine control I seem to
> have (I say 'seem to have' because it might very well be the case that
> I'm not aware of some of the finer points of these two functions).  The
> fine control that is lacking, is for example, the fact that within
> CartesianMap, if I want to specify different colors for the lines, I
> can't really.  Let's say I went with the default of $Lines which is I
> believe 25.  In order to have the lines draw in 25 different colours, I
> believe I'd have to supply 25 color primitives to PlotStyle.  If I
> supply less than 25, then the color primitives are recycled.  My first
> plan of attack was to take the Graphics object that is output by
> CartesianMap and try to manipulate the coloring primitive for each line
> drawn based upon starting and ending points (i.e. within a 'Line', if
> the first point's x value and the last point's x value were 'close',
> than I knew I was dealing with a vertical line, or if the first point's
> y value and the last points y value were 'close', then I knew I was
> dealing with a horizontal line).  So, given the Graphics object output
> by
> 
> graphicOne = CartesianMap[#1 & , {-1, 1}, {-1, 1}, Lines -> theLines,
>     ImageSize -> {500, Automatic}, PlotStyle -> {RGBColor[1, 0, 0],
> RGBColor[0, 0, 1]},
>     PlotPoints -> thePlotPoints];
> 
> I was hoping that invoking something like
> 
> Position[graphicOne, ({RGBColor[__], {Line[_]}})?
>    ((Print[Abs[First[#1[[2,1]]][[1,1]] - Last[#1[[2,1]]][[1,1]]]];
>      Abs[First[#1[[2,1]]][[1,1]] - Last[#1[[2,1]]][[1,1]]] < 1.*^-9) &
> )]
> 
> would give me the positions of all of the horizontal lines, but then,
> it seems that my lack of familiarity with Mathematica's rules for
> working with accuracy and precision, led to results that made no sense
> (i.e. it returned every Line as a match, instead of just the ones where
> the x-coordinates were 'close').  Even worse than that, I realized that
> my attempt was doomed to failure because even if I could get that
> approach to work for a rectangular domain, it would not work once I had
> applied a function that resulted in a graphic where the lines were
> curved, twisted and traveling back over themselves.  It was at this
> point that I decided to just work with single lines (i.e. graph a
> single curve, then operate on each of the points contained within the
> 'Line' object and then graph the result in another graphic).
> 
> So, as a first step towards my goal, I thought, "OK, I need to write a
> function that will be able to be used with Map on a list of points and
> return the 'transformed' points as well as accept an arbitrary function
> that will operate on each of the points."
> 
> Here is what I have thus far:
> 
> Clear[f, g];
> f[z_, func_] := Module[{result}, result = func[Complex[Sequence @@ z]];
> {Re[result], Im[result]}];
> g[z_] := f[z, #1^2 & ];
> 
> Which, using 'g', I can use Map on a list of ordered pairs:
> 
> g /@ {{x,y}, {x,y}, {x,y}, {x,y}, etc.}
> 
> If I wanted to use Sin, I would redefine g as follows:
> 
> g[z_] := f[z, Sin];
> 
> then reapply to the list of ordered pairs.  So, I'm wondering if
> there's a way to accomplish my task without the intermediary function
> definition 'g'?  Also, if what I'm attempting is totally wrong, I'd
> appreciate any pointers as to the correct 'path' as well.
> 
> Thanks,
> 
> Matt
> 
> 

-- 
Murray Eisenberg                     murray at math.umass.edu
Mathematics & Statistics Dept.
Lederle Graduate Research Tower      phone 413 549-1020 (H)
University of Massachusetts                413 545-2859 (W)
710 North Pleasant Street            fax   413 545-1801
Amherst, MA 01003-9305


  • Prev by Date: Re: Solve problems
  • Next by Date: Poisson equation
  • Previous by thread: Using Map with a function of more than 1 argument
  • Next by thread: Re: Using Map with a function of more than 1 argument