Re: a question about plot a list of functions.

• To: mathgroup at smc.vnet.net
• Subject: [mg58222] Re: a question about plot a list of functions.
• From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
• Date: Thu, 23 Jun 2005 05:34:02 -0400 (EDT)
• Organization: The Open University, Milton Keynes, England
• References: <d9av6m\$vn\$1@smc.vnet.net>
• Sender: owner-wri-mathgroup at wolfram.com

```Zhou Jiang wrote:
> I defined a function as
>
> K=(2 r/(1-r^2))^2;
> y=1/(1+K (Sin[x])^2);
> y=y/.{r->{0.2,0.9,0.995}}
>
> Now the result is a list.
> I want to plot y vs. x in one figure and I did the following
>
> Plot[y, {x, 0, 10 Pi}];
>
> But Mathematica gave me an error.
> I changed it to
>
> Plot[{y[[1]], y[[2]], y[[3]]}, {x, 0, 10 Pi}];
>
> Mathematica gave me a correct plot. Can anyone give me some idea why the error message is given by Mathematica since y is a list and nothing is diffrent from {y[[1]], y[[2]], y[[3]]}?
>
> Thanks.
>
>
Hi,

Using _Evaluate_ in the plot command will solve your problem:

In[1]:=
K = (2*(r/(1 - r^2)))^2

Out[1]=
(4*r^2)/(1 - r^2)^2

In[2]:=
y = 1/(1 + K*Sin[x]^2)

Out[2]=
1/(1 + (4*r^2*Sin[x]^2)/(1 - r^2)^2)

In[3]:=
y = y /. {r -> {0.2, 0.9, 0.995}}

Out[3]=
{1/(1 + 0.17361111111111113*Sin[x]^2),
1/(1 + 89.75069252077569*Sin[x]^2),
1/(1 + 39799.7500015707*Sin[x]^2)}

In[4]:=
Plot[Evaluate[y], {x, 0, 10*Pi}];

Why? Although both lists are alike as we can see below

In[5]:=
{y[[1]], y[[2]], y[[3]]} == y

Out[5]=
True

The _Plot_ command has the attribute _HoldAll_ that tells Mathematica
not to evaluate the arguments.

In[6]:=
Attributes[Plot]

Out[6]=
{HoldAll, Protected}

So in line 4 we force the _Plot_ command to evaluate its arguments that
is, in our case, to replace the symbol 'y' by its value which is a list
of functions. _Plot_ knows how to deal with a list of functions and the
graphs are created.

On the other hand, line 7 is interpreted as it is, thus _Plot_ tries to
compute some numerical values with the symbol 'y' that has been keept
untouched due to the argument _HoldAll_

In[7]:=
Plot[y, {x, 0, 10*Pi}];

Plot::plnr: y is not a machine-size real number at x = \
1.3089969389957471`*^-6.

We can see in the error message that Mathematica complains that the
symbol 'y' is not a number, which is true in this case since Mathematica
never replace 'y' by its value (a list of function that can be
numerically evaluated).

Best regards,
/J.M.

```

• Prev by Date: Re: How to remove curly brackets and arrow symbols from a list.
• Next by Date: Re: General 3-state stochastic matrix
• Previous by thread: Re: a question about plot a list of functions.
• Next by thread: Re: a question about plot a list of functions.