       Re: manipulate plot

• To: mathgroup at smc.vnet.net
• Subject: [mg107404] Re: [mg107378] manipulate plot
• From: Carl Woll <carlw at wolfram.com>
• Date: Thu, 11 Feb 2010 08:20:31 -0500 (EST)
• References: <201002111018.FAA28056@smc.vnet.net>

```you can call me al wrote:
> Hi all,
>    Often after arriving at the result of some calculation in
> Mathematica I have an expression in many variables and would like to
> plot the function inside of a manipulate box so that I can observe the
> effect of changing the parameters.  To make the discussion here more
> concrete let's say I have
>
> y = f(x,a,b)
>
> A natural thing to try to do is something like:
>
> Manipulate[Plot[y,{x,0,1}],{a,0,1},{b,0,1},....]
>
> This of course fails to produce output seemingly because Mathematica
> can't understand that f is actually an expression in the variables
> x,a, and b.  It seems that the only way to get what I'm after is to go
> through a lot of syntactic acrobatics geared at turning the results of
> my calculations (which are usually just algebraic expressions) into
> some sort of function definition.  This is generally a huge pain in
> the ass and also tends to clutter and obfuscate the notebook that I'm
> working in.  So....
>
> When I'D LIKE to do this:
>
> y = m x;
> Manipulate[Plot[y,{x,0,1}],{{m,1},0,2}];
>
>
You can inject the value of y into the Manipulate with a construct like:

With[{y = y}, Manipulate[Plot[y, {x, 0, 1}], {{m, 1}, 0, 2}]]

Carl Woll
Wolfram Research
> I MUST INSTEAD do either:
>
> Manipulate[Plot[m x,{x,0,1},PlotRange->{0,2}],{{m,1},0,2}]
>
> -OR-
>
> y = Function[{m,x},m x];
> Manipulate[Plot[y[m,x],{x,0,1},PlotRange->{0,2}],{{m,1},0,2}]
>
> -OR-
>
> y[m_,x_] := m x;
> Manipulate[Plot[y[m,x],{x,0,1},PlotRange->{0,2}],{{m,1},0,2}]
>
>
> or god knows what else...
>
> In the example above the problem doesn't seem so bad but when the
> expressions become larger functions of more variables and/or I'm
> plotting more than one function then the constructs above start to get
> unweildly and I start really wondering why there is no support for me
> to type something like:
>
> Manipulate[Plot[{f1,f2,f3},{x,0,1}],{a,0,1},{b,0,1}]
>
>
> RATHER THAN:
>
> Manipulate[Plot[{Exp[-(a-b)*x],Exp[-a*x]Cos[2*Pi*b*x],Exp[-
> a*x]*Sin[2*Pi*b*x]},{x,0,1}],{a,0,1},{b,0,1}]
>
> -OR-
>
> f1 = Function[{a,b,x},Exp[-(a-b)*x]];
> f2 = Function[{a,b,x},Exp[-a*x]Cos[2*Pi*b*x]];
> f3 = Function[{a,b,x},Exp[-a*x]Cos[2*Pi*b*x]];
> Manipulate[Plot[f1[a,b,x],f2[a,b,x],f3[a,b,x]},{x,0,1}],{a,0,1},{b,
> 0,1}]
>
> -OR-
>
> f1[a_,b_,x_] = Exp[-(a-b)*x];
> f2[a_,b_,x_] = Exp[-a*x]Cos[2*Pi*b*x];
> f3[a_,b_,x_] = Exp[-a*x]Cos[2*Pi*b*x];
> Manipulate[Plot[f1[a,b,x],f2[a,b,x],f3[a,b,x]},{x,0,1}],{a,0,1},{b,
> 0,1}]
>
>
> there are any tricks out there to simplify the use of the
> Manipulate[Plot[{my_algebraic_results},{x,0,1}],my_parameters]
> construct i'd really love to hear them.  I think the Manipulate
> functionality is VERY attractive but i'm always VERY frustrated that I
> usually have to bend over backwards to operate it in anything but the
> simplest context.
>