RevolutionPlot3D:Mathematica 8/Linux与Mathematica 9/OSX之间的不一致性


2

以下代码在Linux下为Mathematica 8.0中无差错运行。

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.>>

EDITg[0]产量0.32669List,但在Mac OSX(手抄)在数学9.0.1执行时

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}] 

完全相同的代码产生以下的错误更改域名说{1,5}确实不是修复任何东西。

尽管有错误,但几乎可以产生原始图像。

我使用的评价显示器,以检查是否g[t]正确等来计算:

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]]] 

我得到的输出的形式为:

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

看起来OK。

最后,我不认为我的问题本身与RevolutionPlot3D[]本身有关,而是与我在此上下文中定义和调用g[t]的方式有关。

+1

和Win7一样,如果你把'{g [t] Sin [t]^2 + 1,t,1}'到'ParametricPlot3D',它会产生相同的错误。 23 8月. 132013-08-23 20:36:30

  0

由于'RevolutionPlot3D []'是'ParametricPlot3D []'的一个特殊情况,根据官方文档,具有一定意义@Kuba。 23 8月. 132013-08-23 20:39:00

1

看来在Win和OSX上Mathematica是走私非数值的东西到g[]

这似乎做Win7的工作:

g[t_?NumberQ] := x[[Ceiling[t]]]/[email protected] 

PatternTest会帮助你,但我不知道为什么:)


我首先想到的是它缺乏Evaluate但它似乎不是问题。另外,如果Ceiling直接调用,没有错误:

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

也有可爱之处

g[0] 

0.321071 List

什么是显而易见的,但改变t{1,5}不能解决任何东西。

  0

我确认@Kuba与模式测试它工作正常。我会暂时把问题留下,除非有人解释这种行为,否则我会接受你的回答。谢谢! 23 8月. 132013-08-23 21:02:30

  0

我在域中使用了'{0.1,...}',但它没有任何区别。感谢您提出它。 23 8月. 132013-08-23 21:08:43

  0

@泽我很高兴它有帮助,但我很好奇这是怎么回事:) 23 8月. 132013-08-23 21:09:53