MathGroup Archive 2011

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

Search the Archive

Re: DynamicModule Pure Function

  • To: mathgroup at smc.vnet.net
  • Subject: [mg121896] Re: DynamicModule Pure Function
  • From: DrMajorBob <btreat1 at austin.rr.com>
  • Date: Thu, 6 Oct 2011 04:21:19 -0400 (EDT)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • References: <201110050758.DAA06856@smc.vnet.net>
  • Reply-to: drmajorbob at yahoo.com

In the first example, 1 - x happens to be its own inverse, so the two  
arguments of Dynamic in the first slider looked the same (1 - x and 1 -  
#&)... but most functions are NOT their own inverse.

In this case, the code is:

ap = Appearance -> "Labeled";
DynamicModule[{x = 0}, {Slider[Dynamic[x], ap],
   Slider[Dynamic[2 - 2 x, (x = 1 - #/2) &], {0, 2}, ap]}]

If 2 - 2 x and 1 - # /2& are not obvious to you, Mathematica can help as  
follows:

Fit[{{0, 2}, {1, 0}}, {1, x}, x] // Rationalize

2 - 2 x

Fit[Reverse /@ {{0, 2}, {1, 0}}, {1, x}, x] // Rationalize

1 - x/2

The second is inverse function to the first:

Solve[2 - 2 x == y, x] // Expand

{{x -> 1 - y/2}}

The functions are even easier to see from:

Rescale[x, {0, 1}, {2, 0}]

2 - 2 x

Rescale[x, {0, 2}, {1, 0}]

1 - x/2

Bobby

On Wed, 05 Oct 2011 02:58:13 -0500, Don <donabc at comcast.net> wrote:

> Thank you all for instructive insights into this problem of why the
> pure function works the way it does.
>
> To see if I understood the points made in the emails, I changed
> the original problem very slightly and tried to find
> a similar solution to the new problem using a modified pure function
> from the original problem.
>
> The new problem is exactly the same as the original problem except
> that the range for Slider #2 goes from 0 to 2 instead of 0 to 1.
> That is the only modification to the original problem.
> The problem is to find an inverse function that will allow Slider #1 to
> control Slider #2 throughout its range and vice versa.
>
> To define this modified problem completely:
>
> (1) The starting position of Slider #1 with range 0 to 1 is 0.
>
> (2) The starting position of Slider #2 with range 0 to 2 is 2.
>
> (3) When Slider #1 in moved to the right, over its range from  0 to 1,  
> Slider #2
> should go to the left from 2 to 0.
>
> (4) When Slider #2 is moved to the left, over its range from 2 to 0,  
> Slider #1
> should go to the right from 0 to 1.
>
> I was not able to solve this problem.
>
> The closest I was able to do is to break up the problem
> into component parts, hoping to synthesize a solution
> from the parts.
>
> The code below works when Slider #1 is controlling both Sliders. That is  
> to say,
> it satisfies the requirements 1, 2 and 3 above:
> the starting positions are 0 for Slider #1 and 2 for Slider #2 and when
> Slider #1 is moved to the right over its range of 0 to 1, Slider #2 goes  
> to the left
> from   2 to 0.
>
> ap = Appearance->"Labeled";
>
> DynamicModule[{x = 0}, {Slider[Dynamic[x], ap],
>   Slider[Dynamic[2 - 2 x, (x = 2 - 2 #) &], {0, 2}, ap]}]
>
>
>
> But, I was not able to find a function that would satisfy requirements  
> 1, 2 and 4 above
> where Slider #2 is controlling the action.
>
> In addition, to solve the problem completely, there would have to be a  
> synthesis
> of both component solutions.
>
> Is there a way to do this?
>
> Thank you in advance.
>


-- 
DrMajorBob at yahoo.com



  • Prev by Date: Re: Thread::tdlen: Objects of unequal length
  • Next by Date: Re: DynamicModule Pure Function
  • Previous by thread: Re: DynamicModule Pure Function
  • Next by thread: Re: DynamicModule Pure Function