2010-04-20 59 views
2

我正在阅读Mathematica编程指南,并试图编制本书的第一个程序之一。基本上,当我运行下面的程序:使用Mathematica 7调试Mathematica 5上的工作程序

Plot3D[{Re[Exp[1/(x + I y)]]}, {x, -0.02, 0.022}, {y, -0.04, 0.042}, 
PlotRange -> {-1, 8}, PlotPoints -> 120, Mesh -> False, 
ColorFunction -> Function[{x1, x2, x3}, Hue[Arg[Exp[1/(x1 + I x2)]]]]] 

任我得到一个1/0的错误和e^\无穷大的错误,或者,如果我降低PlotPoints选项,比方说,60,溢出错误。虽然我有一个工作输出,但它不是它应该的。色调似乎从左角扩散,而它应该是原点扩散(可以在原始output上看到)

这是原始程序,显然运行在Mathematica 5上(Trott,Mathematica编程指南):

Off[Plot3D::gval]; 

Plot3D[{Re[Exp[1/(x + I y)]], Hue[Arg[Exp[1/(x + I y)]]]}, 
     {x, -0.02, 0.022}, {y, -0.04, 0.042}, 
     PlotRange -> {-1, 8}, PlotPoints -> 120, Mesh -> False] 

Off[Plot3D::gval]; 

然而,ColorFunction用这样的方式(第一Plot3D参数)不工作,所以我想简单地适应新使用它的方式。

嗯,谢谢我猜!

回答

1

我终于找到了两种替代方法来解决我的问题。第一种方法是简单地使用<< Version5`Graphics`命令来使用与Mathematica V5一起使用的函数Plot3D。从书中取得的代码就像以前一样工作。

但是,如果一个人希望以正确显示色调(即无脱左上角扩散)与最新版本,该Rescale功能必须使用,就像这样:

Plot3D[Evaluate[Re[f[x, y]]], {x, -.02, .022}, {y, -0.04, 0.042}, 
PlotRange -> {-1, 2}, PlotPoints -> 120, Mesh -> False, 
ColorFunction -> Function[{x, y, z}, [email protected][Arg[f[x, y]], {-π, π}]], 
ColorFunctionScaling -> False, 
ClippingStyle -> None] 

我想Mathematica中的参数函数不会自动映射到[-Pi,Pi)范围,因此它必须重新调整到这个域。结果是相当好看的,虽然与原始情节有一些细微的差别。

2

如果您对Mathematica的默认值满意,您可以使用旧版本的代码,只需简单地删除, Hue[Arg[Exp[1/(x + I y)]]]并且该函数可以正常工作。

您使用新版本代码时遇到的问题似乎源于表达式Exp[1/(x1 + I x2)] - 有时需要评估1/0。至少,如果我切出1/程序执行(在Mathematica 7上)没有抱怨,但明显错误的颜色。所以你可能需要重写你的颜色函数。

+0

是的,我已经明白了这一点,但我真的试图找出两个版本之间的变化,使旧代码无法使用。我也试图搞砸Plot3D的'WorkingPrecision'选项,但它也没有帮助。 无论如何,谢谢你的答案! – Literal 2010-04-20 14:30:59