Re: Plot Magic Voodoo ???
- To: mathgroup at smc.vnet.net
- Subject: [mg90949] Re: Plot Magic Voodoo ???
- From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
- Date: Thu, 31 Jul 2008 02:57:04 -0400 (EDT)
- Organization: The Open University, Milton Keynes, UK
- References: <g6q0nb$qeo$1@smc.vnet.net>
beckman wrote: > Consider the following: > > z := {L == x y, y == x, x == y} > > Solve[z, {L}] ---> {{L->y^2}} > > no surprises. now, > > Plot[L /. Solve[z, {L}][[1]], {y, 1, 10}] > > Works exactly as one would expect, BUT, this also works > > Plot[L /. Solve[z, {L}][[1]], {x, 1, 10}] > > BUT, the first argument of Plot is L /. Solve[z, {L}][[1]], which is > y^2, so my brain said that > > Plot[L /. Solve[z, {L}][[1]], {x, 1, 10}] ---> Plot[y^2, {x, 1, 10}] > > which, of course, cannot work. Btw, > > Plot[L /. Solve[z, {L}][[1]], {q, 1, 10}] > > does not work, so SOMEHOW, Plot is magically peeking at the innards of > the Solve expression, and is NOT evaluating it, and noticing that x is > a free variable in the set of equations, z, and ... my brain is > melting Trace[] is to the Mathematica user what the crystal ball is to the magician :) Below, you can see that first a value is assigned to y, x, or q by Plot, only then Solve[] is called. z := {L == x y, y == x, x == y} Plot[L /. Solve[z, {L}][[1]], {y, 1, 10}] // Trace {Plot[L/.Solve[z,{L}][[1]],{y,1,10}],{y=.,Null},{y=.,Null}, {{y}=.,{y=.},{y=.,Null},{Null}},{{{{z,{L==x y,y==x,x==y}, {{{y,1.00018},x 1.00018,1.00018 x},L==1.00018}, {{y,1.00018},1.00018==x},{{y,1.00018},x==1.00018}, {L==1.00018 x,1.00018==x,x==1.00018}}, Solve[{L==1.00018 x,1.00018==x,x==1.00018},{L}],{{L->1.00037}}}, {{L->1.00037}}[[1]],{L->1.00037}},L/.{L->1.00037},1.00037}, {y=.,Null},{y=.,Null},{y=.,Null},{y=.,Null}, [...] Plot[L /. Solve[z, {L}][[1]], {x, 1, 10}] // Trace {Plot[L/.Solve[z,{L}][[1]],{x,1,10}],{x=.,Null},{x=.,Null}, {{x}=.,{x=.},{x=.,Null},{Null}},{{{{z,{L==x y,y==x,x==y}, {{{x,1.00018},1.00018 y},L==1.00018 y}, {{x,1.00018},y==1.00018},{{x,1.00018},1.00018==y}, {L==1.00018 y,y==1.00018,1.00018==y}}, Solve[{L==1.00018 y,y==1.00018,1.00018==y},{L}], {{L->1.00037}}},{{L->1.00037}}[[1]],{L->1.00037}}, L/.{L->1.00037},1.00037},{x=.,Null},{x=.,Null},{x=.,Null}, [...] Plot[L /. Solve[z, {L}][[1]], {q, 1, 10}] // Trace {Plot[L/.Solve[z,{L}][[1]],{q,1,10}],{q=.,Null},{q=.,Null}, {{q}=.,{q=.},{q=.,Null},{Null}},{{{{z,{L==x y,y==x,x==y}}, Solve[{L==x y,y==x,x==y},{L}],{{L->y^2}}},{{L->y^2}}[[1]], {L->y^2}},L/.{L->y^2},y^2},{{q}=.,{q=.},{q=.,Null},{Null}}, {{q}=.,{q=.},{q=.,Null},{Null}},{{q}=.,{q=.},{q=.,Null},{Null}}, {{q}=.,{q=.},{q=.,Null},{Null}},{{q}=.,{q=.},{q=.,Null}, [...] Regards, -- Jean-Marc