2011-03-21 5 views
20

sage에서 complex_plot의 동작을 복사하는 Mathematica 그래픽을 만들려면 어떻게해야합니까? 아래 있듯이 즉Mathematica에서 복잡한 함수를 그려야합니다.

...는 지정된 xrange 통해 함수의 출력과 yrange 하나 개 변수의 복잡한 함수를 취하고, 플롯. 출력의 크기는, 오렌지, 황색으로 증가 적색되는 양의 실수와 ( 동안 인수 색조 로 표시되고, (제로 블랙 인 무한대 흰색 인 상태)의 밝기에 의해 표시된다 .. 인수가 증가함에 따라 ). 여기

는 절대 값의 오버레이 윤곽와 제타 함수의 ( Neutral Drifts의 M. 햄튼에서 도난) 예입니다 : 매스 매 티카 문서 페이지에서

zeta function complex_plot

Functions Of Complex Variables 당신이 시각화 할 수 있다고 복잡한 함수는 ContourPlotDensityPlot을 사용하여 "잠재적으로 단계별로 색칠"됩니다. 그러나 문제는 두 가지 유형의 플롯 모두에 있습니다. ColorFunction은 점에서 윤곽선이나 밀도와 동일한 변수 하나만 가져옵니다. 따라서 절대 값을 그릴 때 위상/인수의 색상을 지정하는 것은 불가능한 것처럼 보입니다. 이것은 Plot3D에서 문제가되지 않으며 모든 세 매개 변수 (x,y,z)ColorFunction으로 전달됩니다.

Plot3D docs의 "깔끔한 예"와 같은 복잡한 기능을 시각화하는 다른 방법이 있지만 그게 내가 원하는 것이 아니란 것을 알고 있습니다.

또한 실제로 나는 위키 피 디아에서 사용되는 일부 그래픽을 생성하는 데 사용 된 one solution below을 가지고 있지만 상당히 낮은 수준의 기능을 정의하고 있으며 ContourPlot과 같은 상위 수준 기능이 있어야한다고 생각합니다. DensityPlot. 이것이 저수준의 구조를 사용하는 당신이 선호하는 접근법을 제공하는 것을 막을 수는 없습니다!


편집 :
머릿속 리만이 of algebraic functions, IIa, IIb, IIc, IId을 표면 : ​​
에 티카 저널 마이클 트롯하여 멋진 기사가 있었다.
리만 표면 시각화 demo.
물론 The Return of Riemann surfaces (updates for Mma v6)

, 마이클 트롯은 많은 아름다운 그래픽을 포함하지만, 가속 티카 출시 일정 뒤에 떨어진 것처럼 보이는 Mathematica guide books를 썼다!

+0

같은 플롯하지만, +1 : –

+0

@belisarius : 그것은 내 음모,하지만 덕분! – Simon

+0

DensityPlot의 ColorFunction에 (x, y, z)를 전달할 수 없습니까? 나는 DensityPlot [..., ColorFunction-> Function [{x, y, z}, f [x, y, z]] 라인을 따라 무언가를 할 수 있었다. –

답변

18

내 시도입니다. 나는 약간의 색 함수를 보았다.

ParametricPlot[ 
(*just need a vis function that will allow x and y to be in the color function*) 
{x, y}, {x, -6, 3}, {y, -3, 3}, 

(*color and mesh functions don't trigger refinement, so just use a big grid*) 
PlotPoints -> 50, MaxRecursion -> 0, Mesh -> 50, 

(*turn off scaling so we can do computations with the actual complex values*) 
ColorFunctionScaling -> False, 

ColorFunction -> (Hue[ 
    (*hue according to argument, with shift so arg(z)==0 is red*) 
    Rescale[Arg[Zeta[# + I #2]], {-Pi, Pi}, {0, 1} + 0.5], 1, 

    (*fudge brightness a bit: 
     0.1 keeps things from getting too dark, 
     2 forces some actual bright areas*) 
    Rescale[Log[Abs[Zeta[# + I #2]]], {-Infinity, Infinity}, {0.1, 2}]] &), 

(*mesh lines according to magnitude, scaled to avoid the pole at z=1*) 
MeshFunctions -> {Log[Abs[Zeta[#1 + I #2]]] &}, 

(*turn off axes, because I don't like them with frames*) 
Axes -> False 
] 

complex plot

내가 메쉬 라인 컬러로 다양하게 얻을 수있는 좋은 방법을 생각하지 않았습니다. 가장 쉬운 방법은 MeshFunctions 대신 ContourPlot으로 생성하는 것입니다.두 가지 이유

+1

Nice! 이것은'RegionPlot [True, {x, xmin, xmax}, {y, ymin, ymax}, opts ...]'를 기본'Graphics' 객체로 사용하는 솔루션에 매우 가깝습니다. – Simon

+0

@BrettChampion 멋진 음모! 색조가 -pi에서 pi로 실행되는 플로팅 그램을 포함시키는 쉬운 방법이 있습니까? – Dominique

7

하지 적절한 대답 :

  • 이 다음과 같은 많은 당신이 나를 위해,

어쨌든 나는 뻔뻔 브렛의 코드를 사용하고

  • 요구 것이 아니다 해석하기에 더 명확하다 (밝기는 음 ... 음, 단지 밝기 임) :

    enter image description here

    거의 그대로

    브렛의 코드 :

    Plot3D[ 
    Log[Abs[Zeta[x + I y]]], {x, -6, 3}, {y, -3, 3}, 
    (*color and mesh functions don't trigger refinement,so just use a big grid*) 
    PlotPoints -> 50, MaxRecursion -> 0, 
    Mesh -> 50, 
    (*turn off scaling so we can do computations with the actual complex values*) 
    ColorFunctionScaling -> False, 
    ColorFunction -> (Hue[ 
        (*hue according to argument,with shift so arg(z)==0 is red*) 
        Rescale[Arg[Zeta[# + I #2]], {-Pi, Pi}, {0, 1} + 0.5], 
        1,(*fudge brightness a bit: 
        0.1 keeps things from getting too dark, 
        2 forces some actual bright areas*) 
        Rescale[Log[Abs[Zeta[# + I #2]]], {-Infinity, Infinity}, {0.1, 2}]] &), 
        (*mesh lines according to magnitude,scaled to avoid the pole at z=1*) 
        MeshFunctions -> {Log[Abs[Zeta[#1 + I #2]]] &}, 
        (*turn off axes,because I don't like them with frames*) 
        Axes -> False] 
    
  • +0

    적절한 대답은 아니지만 동의합니다. 더 명확하고 확실합니다. +1 – Simon

    15

    여기 Jan Homann에서 영감을받은 Axel Boldt에 의해 주어진 기능에 대한 나의 변화입니다. 링크 된 두 페이지 모두 좋은 그래픽을 가지고 있습니다.

    ComplexGraph[f_, {xmin_, xmax_}, {ymin_, ymax_}, opts:OptionsPattern[]] := 
    RegionPlot[True, {x, xmin, xmax}, {y, ymin, ymax}, opts, 
        PlotPoints -> 100, ColorFunctionScaling -> False, 
        ColorFunction -> Function[{x, y}, With[{ff = f[x + I y]}, 
        Hue[(2. Pi)^-1 Mod[Arg[ff], 2 Pi], 1, 1 - (1.2 + 10 Log[Abs[ff] + 1])^-1]]] 
    ] 
    

    그런 다음 우리는 우리가 사용하고 ComplexGraph의 특정 플롯 메쉬를 보여 중 하나를 복사 Brett에 의해 윤곽을 추가 할 수 있습니다

    ComplexGraph[Zeta, {-7, 3}, {-3, 3}] 
    

    Zeta without contours

    을 실행하여 윤곽선없이 플롯을 만들 수 있습니다 :

    ComplexGraph[Zeta, {-7, 3}, {-3, 3}, Mesh -> 30, 
    MeshFunctions -> {Log[Abs[Zeta[#1 + I #2]]] &}, 
    MeshStyle -> {{Thin, Black}, None}, MaxRecursion -> 0] 
    

    또는 사랑스러운 음모의 윤곽 나는 아직 질문을 읽지 않은

    ContourPlot[Abs[Zeta[x + I y]], {x, -7, 3}, {y, -3, 3}, PlotPoints -> 100, 
    Contours -> [email protected][-7, 1, .25], ContourShading -> None]; 
    Show[{ComplexGraph[Zeta, {-7, 3}, {-3, 3}],%}] 
    

    with contours

    +0

    +1 멋진 이미지 및 링크 –

    관련 문제