Re: Explain this (error in Plot[Evaluate[Range[3]],{x,0,1}])
- To: mathgroup at smc.vnet.net
- Subject: [mg41851] Re: [mg41776] Explain this (error in Plot[Evaluate[Range[3]],{x,0,1}])
- From: Omega Consulting <info at omegaconsultinggroup.com>
- Date: Sat, 7 Jun 2003 00:08:40 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
At 06:31 AM 6/5/2003, Martin wrote:
>I don't get it.
>
>It boils down to plotting multiple lines:
>
>Plot[{1,2,3},{x,0,1}] works.
>
>That Plot[Range[3],{x,0,1}] does not work
>I understand (non-standard evaluation in
>Plot), but what is the problem with
>
>Plot[Evaluate[Range[3]],{x,0,1}] ?
>
>Why does Evaluate not do its job for Range?
>It does work with Table as in
>
>Plot[Evaluate[Table[i,{i,3}]],{x,0,1}]
>
>I changed the Attributes of Range to match
>Table's, that did not fix it.
>
>Some deeper reason or just a bug?
>
>I am using Mathematica 4.0.1, W2k
There are two ways to store a list in Mathematica. Normal lists and packed
arrays (which are much more memory efficient). Range automatically creates
a packed array.
In[1]:= Developer`PackedArrayQ[Range[3]]
Out[1]= True
Typed lists are not.
In[2]:= Developer`PackedArrayQ[{1,2,3}]
Out[2]= False
That seems to be the source of the error. Plot doesn't recognize that the
PackedArray is a list and tries to plot the entire Range as a single value
(which fails).
If you unpack the array, then Range works.
Plot[Evaluate[Developer`FromPackedArray[Range[3]]], {x, 0, 1}]
While this fails.
Plot[Evaluate[Developer`ToPackedArray[{1, 2, 3}]], {x, 0, 1}]
--------------------------------------------------------------
Omega Consulting
"The final answer to your Mathematica needs"
http://omegaconsultinggroup.com