# Why plot returns empty in this example?

Let me rewrite this question, showing the original problem, as it is more subtle than the simple example I showed before using Sin[t]. Here we go again.

When I write this:

foo[$s_,$t_]:=Module[{s=$s,t=$t,r},
r= OutputResponse[TransferFunctionModel[Evaluate[1/(s^2+2*s+1)],s],UnitStep[t],t];
Plot[Chop@First@r,{t,0,20}]
];
foo[s, t]

I get an empty plot. But when I write this

foo[s_,t_]:=Module[{r},
r= Chop@First@OutputResponse[TransferFunctionModel[1/(s^2+2*s+1),s],UnitStep[t],t];
Plot[r,{t,0,20}]
];
foo[s, t]

I do not get an empty plot.

My question is: Why first example above does not produce a plot?

I know it has to do with how 's' and 't', the free parameters, to the calls to TransferFunctionModel[] and OutputResponse[]. But I do not see exactly why that is.

thanks,

-
It's good to see you are back, Nasser. – Leonid Shifrin Apr 17 '12 at 9:05
Thanks Leonid. I have been busy writing Mathematica demos for the last few months. I finished 7 new demos, there are numbers 25-31 in this table here: 12000.org/my_notes/mma_demos/KERNEL/KERNEL.htm (send copies of these to WRI demonstrations project also). Whenever I finish one, I get new idea for a new one. Took 7 months to do these 7. The more I use Mathematica, the more I find how little I know about it :) – Nasser Apr 17 '12 at 23:12

In your first example, the Plot is inside a Module that localizes t into something like t$23. So, when you run foo[s, t], you are actually running something similar to t$23=t;
r=E^-t$23 UnitStep[t$23];
Plot[Chop@First@r,{t$23,0,20}] The second line returns an expression of t. When you insert it in the last Plot, it doesn't run properly, because, the {t$23, ...} argument in Plot is held, it doesn't evaluate to t before plotting.

In the second example, however, you don't have this problem. r becomes an expression of whatever variable p you call in foo[s, p] (t in this case), and that's the same variable you are using in your Plot. Even if Plot holds its arguments, so it's "immune to evaluation", it's not immune to the lexical replacement Module does.

First example analogy:

Module[{x = x2},
{x, Hold[x]}]

{x2, Hold[x\$14454]}

Second example analogy:

Module[{},
{x, Hold[x]}]

{x, Hold[x]}
-
 Rojo; Thanks. For the 2 examples I show above, do you know why the first example produces empty plot? – Nasser Apr 17 '12 at 8:27 @NasserM.Abbasi, edited. See if it's clearer now – Rojo Apr 17 '12 at 10:13