2010-04-20 9 views
2

현재 Mathematica 프로그래밍 가이드 북을 읽었으며 책의 첫 프로그램 중 하나를 다뤄 보려고했습니다. 나는 다음과 같은 프로그램을 실행할 때 기본적으로 :Mathematica 5에서 작동하는 프로그램 디버깅 Mathematica 7로

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

을 나는 PlotPoints 옵션 말하자면, (60), 오버플로 오류를 낮출 경우 중 하나 I는 1/0 오류 및 e^\ 무한대 오류가 발생하거나. 나는 일하는 결과물을 가지고 있지만 그것이 있어야 할 것이 아닙니다. 색조는 왼쪽 구석에서 확산되는 반면 원점을 확산해야합니다 (원래 output에서 볼 수 있듯이)

다음은 분명히 Mathematica 5에서 실행되는 원본 프로그램입니다 (Trott, Mathematica Guidebook for Programming) : 그러나, ColorFunction이 작동하지 않습니다 이런 식으로 (처음 Plot3D 인수)를 사용하고 그래서 간단하게 사용하는 새로운 방식에 적응하기 위해 노력

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

.

음, 고맙습니다.

답변

1

마침내 내 문제를 해결하기위한 두 가지 방법을 찾았습니다. 첫 번째는 단순히 << Version5`Graphics` 명령을 사용하여 Plot3D 함수를 Mathematica V5에서 작동하는 방식으로 사용하는 것입니다. 책에서 가져온 코드는 이전처럼 사용되었습니다. 하나가 올바르게 최신 버전으로 색조를 (즉 왼쪽 모서리 떨어져 확산하지 않고있다)을 표시하고자하는 경우

그러나 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

매쓰 매 티카의 기본값에 만족했다면 이전 버전의 코드를 사용할 수 있습니다. , Hue[Arg[Exp[1/(x + I y)]]]을 삭제하면 함수가 잘 동작합니다.

코드의 새 버전에서 발생하는 문제는 표현 Exp[1/(x1 + I x2)]에서 비롯된 것 같습니다. 때로는 1/0의 평가가 필요합니다. 적어도, 내가 1/을 잘라낸다면 프로그램은 (Mathematica 7에서) 불만없이, 분명히 잘못된 색상으로 실행됩니다. 따라서 색 기능을 다시 작성해야합니다.

+0

그래, 이미 알아 냈어.하지만 정말 오래된 코드를 사용할 수 없도록 만든 두 버전 사이에서 많이 바뀐 것을 추적하려고합니다. Plot3D의'WorkingPrecision' 옵션도 엉망으로 만들려고했으나 도움이되지 않았습니다. 어쨌든 답변 해 주셔서 감사합니다! – Literal