2010-04-20 63 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