MathGroup Archive 2007

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

Search the Archive

Re: Locator question

  • To: mathgroup at smc.vnet.net
  • Subject: [mg79501] Re: Locator question
  • From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
  • Date: Sat, 28 Jul 2007 05:27:22 -0400 (EDT)
  • Organization: The Open University, Milton Keynes, UK
  • References: <f86r55$pc7$1@smc.vnet.net> <200707250930.FAA26363@smc.vnet.net> <f89pve$5jn$1@smc.vnet.net> <46A8751F.8000907@gmail.com> <f8cfd5$2ue$1@smc.vnet.net>

Murray Eisenberg wrote:
> Responses in-line below and at bottom....
> 
> Jean-Marc Gulliet wrote:
>> Murray Eisenberg wrote:
>>> I'd like to define a function that would do that, taking as argument 
>>> the function name, the interval on which to plot, and an optional 
>>> point at which to place the locator.
>>>
>>> Here are two attempts, each with unpleasant consequences...
>>>
>>> Attempt 1:
>>>
>>>    trackPointOnPlot[f_, {a_, b_}, start_: {a, f[a]}] :=
>>>     DynamicModule[{p = start},
>>>      Column[{LocatorPane[Dynamic[p, (p = {First@#, f[First@#]}) &],
>>>         Plot[Sin[x], {x, a, b}]], Dynamic[p]}]]
>>>
>>> With a third argument supplied, this works OK, e.g.:
>>>
>>>    trackPointOnPlot[Sin, {0, 10}, {Pi, Sin[Pi]}]
>>>
>>> However, if I evaluate, say,
>>>
>>>    trackPointOnPlot[Sin,{0,10}]
>>>
>>> then the locator appears initially to the left of the x-axis. So I ask 
>>> whether that syntax on the left for trackPointOnPlot is legitimate? 
>>> That is, can the default value for variable 'start' refer legitimately 
>>> to the value of a preceding argument?
>> [snip]
>>
>> Hi Murray,
>>
>> The short answer to your question is 'No'. You cannot refer to 
>> 'previous' patterns in your function declaration. The same restriction 
>> applies to initializations within *Module*, *With*, or *Block* 
>> constructs. For instance, one cannot expect correct result from, say, 
>> Module[{a = 1, b = 2, c = a + b}, somecode]. (Note that if a and/or b 
>> have also some global values, this is these values that are going to be 
>> taken at this stage for computing c.) A valid expression would be
>> Module{{a = 1, b = 2, c}, c = a + b; somecode], expression that 
>> guarantee that c is equal to 3. (There is a discussion about that in the 
>> Mathematica Book, Section 2.7 "Modularity and the Naming of Things".)
> 
> I was aware of the prohibition in the initializations in Module, etc., 
> but I did not recall having seen that mentioned with respect to the 
> arguments on the left side of a SetDelayed function definition.
> 
> Can you point me to where in the Mathematica 6.0 documentation this 
> prohibition for function definitions is stated. (I can find it for 
> Module, etc.)

Honestly, I have not the slightest idea where in the documentation 
center one could possibly find anything about that... I have to admit 
that most of the time I rely on memory and The Mathematica Book (as well 
as some other works) to find what I need. Only in last resort (or for 
learning the new graphic features) I will dig in the documentation 
center (This means that I do not use the full potential of version 6.0).

> Actually, reference within the initializations of a Module is somewhat 
> muddier than first appears.  Indeed, there's nothing wrong with:
> 
>    Module[{a = 1, b = 2, c = a + b}, c]
> a+b
> 
> (It's just that the assignment c = a + b refers to global a and global b 
> but, since there are no global values assigned to them, the values of a 
> and b are themselves.)  The docs for 6.0 give an even more direct example:
> 
>    Module[{t = 6, u = t}, u^2]
> 
> Now back to the topic at hand...
>> Back to your function, the following modified version will work as you 
>> wanted (I hope!).
>>
>> trackPointOnPlot[f_, {a_, b_}, start_: {0, 0}] :=
>>  DynamicModule[{p = If[start == {0, 0}, {a, f[a]}, start]},
>>   Column[{LocatorPane[Dynamic[p, (p = {First@#, f[First@#]}) &],
>>      Plot[f[x], {x, a, b}]], Dynamic[p]}]]
>>
>> trackPointOnPlot[Cos, {0, 10}, {Pi, Cos[Pi]}]
>> trackPointOnPlot[Sin, {0, 10}, {Pi, Sin[Pi]}]
>> trackPointOnPlot[Cos, {0, 10}]
>> trackPointOnPlot[Sin, {0, 10}]
> 
> I don't think that does quite what I expect:  E.g., if you evaluate
> 
>    trackPointOnPlot[Cos, {Pi, 10}, {0, 0}]
> 
> then the locator starts NOT at the explicitly specified point {0,0}, but 
> instead at {Pi,f[Pi]}.  And this is not an artifact of the plot 
> interval, since if in the Plot expression I insert AxesOrigin->{0,0}, 
> still the locator will be at {Pi,f[Pi]} instead of
> 
> 



  • Prev by Date: Re: StackGraphics[] absent in Mathematica 6.0?
  • Next by Date: RE: Workbench 1.1 start up bomb
  • Previous by thread: Re: Locator question
  • Next by thread: [HELP - confirmation requested] truncated File -> Save As -> HTML conversion problem