RE: Substitution ignored?

*To*: mathgroup at smc.vnet.net*Subject*: [mg48751] RE: [mg48738] Substitution ignored?*From*: "David Park" <djmp at earthlink.net>*Date*: Sat, 12 Jun 2004 23:33:40 -0400 (EDT)*Sender*: owner-wri-mathgroup at wolfram.com

Jos, Let's look at a simpler case. f = x^2; Plot[f /. x -> x - 1, {x, 0, 2}]; The arguments of Plot are held unevaluated until all the substitutions are made. For each value of x, f and x are substituted into the held expression and then the expression is evaluated. The following illustrates the process for a particular value of x. (Copy it and evaluate in a notebook.) Print["The first argument held"] Hold[f /. x -> x - 1] Print["For each plotting value the routine substitutes for f"] %% /. HoldPattern[f] -> x^2 Print["And also substitutes the current choice for x, say 0.01"] %% /. x -> 0.01 Print["Then it releases the Hold to obtain the value"] %% // ReleaseHold The rule does not match because 0.01^2 is evaluated first to 0.0001. If you evaluate the first argument, then it will work because the rule is applied before any numerical values are substituted. f = x^2 Plot[{ f, f /. x -> x - 1 } // Evaluate, {x, 0, 2}]; David Park djmp at earthlink.net http://home.earthlink.net/~djmp/ From: Jos R Bergervoet [mailto:Jos.Lastname at Companyname.com] To: mathgroup at smc.vnet.net Dear MathGroup, Why is the following going wrong? f = x^2 Plot[{ f, f /. x->x-1 }, {x,0,2}] (* Identical functions plotted !!! *) g = f /. x->x-1 Plot[{f, g}, {x,0,2}] (* OK, different functions plotted *) -- Jos