Alain,
The problem occurs because Plot has the Attribute HoldFirst. But I am not
certain of the exact sequence of internal evaluations that causes the
problem.
In any case, you can easily circumvent the problem by evaluating the first
argument.
Plot[{f[x], g[x]} /. {a -> 1} // Evaluate, {x, 0, 1}]
David Park
djmp at earthlink.net
http://home.earthlink.net/~djmp/
From: Alain Cochard [mailto:alain at geophysik.uni-muenchen.de]
To: mathgroup at smc.vnet.net
Hello. I would be grateful if someone could explain to me the
following behavior (i.e., is it normal? why?), or point me to a
relevant part of a manual:
Mathematica 4.0 for Linux
Copyright 1988-1999 Wolfram Research, Inc.
-- Motif graphics initialized --
In[1]:= f[x_]:=a x ; g[x_]:=2 a x ;
In[2]:= Plot[ f[x]/.{a->1} , {x,0,1}] (* Fine *)
Out[2]= -Graphics-
In[3]:= {f[x],g[x]}/.{a->1}
Out[3]= {x, 2 x} (* Fine, just checking *)
In[4]:= Plot[{f[x],g[x]}/.{a->1} , {x,0,1}]
Plot::plnr: {f[x], g[x]} /. {a -> 1} is not a machine-size real number at x
=
-8
4.16667 10 .
Plot::plnr: {f[x], g[x]} /. {a -> 1} is not a machine-size real number at x
=
0.040567.
Plot::plnr: {f[x], g[x]} /. {a -> 1} is not a machine-size real number at x
=
0.0848088.
General::stop: Further output of Plot::plnr
will be suppressed during this calculation.
Out[4]= -Graphics-
(* So the question is: why does it work for f[x] alone, and not for
f[x] and g[x]? *)
(* The following works fine, but is there a better workaround? *)
In[5]:= data={a->1} ; Plot[{ f[x]/.data , g[x]/.data }, {x,0,1}]
Many thanks in advance,
Alain Cochard