Debugging 用Mathematica 7调试Mathematica 5上的工作程序

Debugging 用Mathematica 7调试Mathematica 5上的工作程序,debugging,wolfram-mathematica,3d,Debugging,Wolfram Mathematica,3d,我目前正在阅读Mathematica的编程指南,我正试图编写这本书的第一个程序。基本上,当我运行以下程序时: 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/

我目前正在阅读Mathematica的编程指南,我正试图编写这本书的第一个程序。基本上,当我运行以下程序时:

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,则出现溢出错误。虽然我有一个工作输出,但它不是应该的。色调似乎在左角扩散,而它应该在原点扩散(如原稿所示)

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

但是,以这种方式使用的
ColorFunction
(第一个
Plot3D
参数)不起作用,因此我尝试简单地适应它的新使用方式


好吧,谢谢,我想

如果您对Mathematica的默认设置感到满意,您可以使用旧版本的代码,只需删除
,Hue[Arg[Exp[1/(x+I y)]]
,函数即可正常工作


新版本的代码出现的问题似乎源于表达式
Exp[1/(x1+ix2)]
——有时这需要对
1/0
进行评估。至少,如果我剪掉
1/
,程序会毫无怨言地执行(在Mathematica 7上),尽管颜色明显错误。因此,您可能需要重写颜色函数。

我终于找到了两种解决问题的替代方法。第一个是简单地使用
是的,我已经知道了,但我真的在努力追踪两个版本之间发生了什么变化,导致旧代码无法使用。我还试图弄乱Plot3D的
WorkingPrecision
选项,但也没用。无论如何,谢谢你的回答!
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];
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}, Hue@Rescale[Arg[f[x, y]], {-π, π}]],
ColorFunctionScaling -> False,
ClippingStyle -> None]