Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

The following code runs error-free in Mathematica 8.0 under Linux.

ClearAll["Global`*"];
x = RandomReal[{0.1, Pi}, 100];
g[t_] := x[[Ceiling[t]]]/Max[x]
RevolutionPlot3D[
    {g[t] Sin[t]^2 + 1, t},
    {t, 0, 5},                    (* see comment in 'EDIT' regarding the t=0 case *)
    {θ, 0, 2 Pi}]

The same exact code produces the following errors when is executed in Mathematica 9.0.1 under Mac OSX (copied by hand):

Part:pspec : Part specification Ceiling[t] is neither a machine-sized integer nor a list of machine-sized integers.>>
General::stop : Further output of Part::pspec will be suppressed during this calculation.>>

EDIT: g[0] yields 0.32669List, but changing the domain to say {1,5} does not fix anything.

Despite the errors an almost original image is produced.

I used an evaluation monitor to check whether g[t] is properly calculated like:

ClearAll["Global`*"];
x = RandomReal[{0.1, Pi}, 100];
g[t_] := x[[Ceiling[t]]]/Max[x]
RevolutionPlot3D[
    {g[t] Sin[t]^2 + 1, t},
    {t, 0, 5},                    (* see comment in 'EDIT' regarding the t=0 case *)
    {θ, 0, 2 Pi}, PlotPoints->3,  (* restrict points or else we will get flooded *)
    EvaluationMonitor :> Print["t=", t, ", g[t]=", g[t]]]

The output I get is of the form:

... Part::pspec : ...
t[2.5x10^-6, g[t]=0.40655
t[2.5], g[t]=0.811194
...

which looks ok.

Finally, I don't think that my problem has to do with RevolutionPlot3D[] per se, but rather with the way I define and call g[t] in this context.

share|improve this question
1  
The same on Win7, and if you take {g[t] Sin[t]^2 + 1, t,1} to ParametricPlot3D it will produce the same error. –  Kuba Aug 23 '13 at 20:36
    
Makes some sense @Kuba since RevolutionPlot3D[] is a special case of ParametricPlot3D[] according to the official docs. –  Zet Aug 23 '13 at 20:39

1 Answer 1

up vote 1 down vote accepted

It seems on Win and OSX Mathematica is smuggling something non numerical to g[].

This seems to do the job on Win7:

g[t_?NumberQ] := x[[Ceiling[t]]]/Max@x

PatternTest will help you but I don't know why :)


My first thought was it is lack of Evaluate but it does not seem to be the issue. Also, if Ceiling called directly, there is no error:

RevolutionPlot3D[{Ceiling[t] Sin[t]^2 + 1, t},...

There is also the thing about

g[0]

0.321071 List

what is obvious but changing t domain to {1,5} does not fix anything.

share|improve this answer
    
I confirm @Kuba that with the pattern test it works fine. I will leave the question as it is for now and unless someone explains this behavior I will accept your answer. Thanks! –  Zet Aug 23 '13 at 21:02
    
I was using {0.1, ...} in the domain but it didn't make any difference. Thanks for bringing it up though. –  Zet Aug 23 '13 at 21:08
    
@Zet I'm glad it helps but I'm curious what's the matter :) –  Kuba Aug 23 '13 at 21:09
    
I accepted your answer @Kuba, thanks! Regardless, I'd really like someone to shed some light on the why part :P –  Zet Aug 30 '13 at 14:28

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.