2011-03-21 82 views
20

如何製作一個Mathematica圖形來複制鼠尾草中complex_plot的行爲?即在Mathematica中繪製一個複雜函數

...採用一個 變量的複雜函數,以及曲線圖在指定的xrange的 函數的輸出和 yrange如下面所示。所述 幅度輸出的指示 由亮度(零是 黑色和無窮大者爲白色),而 參數按色相 表示(與紅色是正的實數,和通過 橙色,黃色增加,..作爲參數增加的 )。

下面是一個例子的zeta函數(從M.漢普頓被盜的Neutral Drifts)與絕對值疊加輪廓:

zeta function complex_plot

在數學文檔頁面Functions Of Complex Variables它說,你可以想像複雜功能使用ContourPlotDensityPlot「潛在着色階段」。但問題出現在這兩種類型的圖中,ColorFunction僅僅取一個等於該點的輪廓或密度的變量 - 因此,在繪製絕對值時,似乎不可能使它變爲相位/參數的顏色。請注意,這不是Plot3D的問題,其中所有3個參數(x,y,z)都會傳遞給ColorFunction

我知道還有其他的方法來顯示覆雜的功能 - 例如​​中的「整潔的例子」,但那不是我想要的。

此外,我確實有one solution below(實際上已經用於生成維基百科中使用的某些圖形),但它定義了一個相當低級別的函數,我認爲它應該可以用於高級函數,如ContourPlotDensityPlot。這並不意味着這應該會阻止你使用較低層次的建築物的最喜歡的方法!


編輯:有邁克爾·特羅特在上數學期刊一些不錯的文章:
可視化黎曼面of algebraic functionsIIaIIbIIcIId
可視化黎曼表面demo
The Return of Riemann surfaces (updates for Mma v6)

當然,邁克爾·特洛特寫的Mathematica guide books,其中包含了許多美麗的圖形,但似乎已經落後於Mathematica的加速發行計劃!

+0

我沒有看過這個問題還沒有,但+1可愛的情節:) – 2011-03-22 00:02:28

+0

@belisarius:這不是我的情節,但感謝! – Simon 2011-03-22 00:08:55

+0

您確定無法將(x,y,z)傳遞到DensityPlot中的ColorFunction?我已經能夠沿着DensityPlot [...,ColorFunction-> Function [{x,y,z},f [x,y,z]]]的線條做些事情了。 – 2011-03-22 01:33:41

回答

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

我還沒有想到一個好方法網格線的顏色變化。最簡單的可能是用ContourPlot而不是MeshFunctions來生成它們。

+1

好!它非常接近我看到的使用'RegionPlot [True,{x,xmin,xmax},{y,ymin,ymax},opts ...]'作爲基本'Graphics'對象的解決方案。 – Simon 2011-03-22 04:01:33

+0

@BrettChampion好情節!有沒有一種簡單的方法來包含某種情況下,色調從-pi到pi? – Dominique 2015-02-26 13:53:50

7

不是一個正確的答案,原因有二:

  • 這不是你問什麼
  • 我無恥地使用Brett的代碼

反正對我來說,以下是多少更清晰地解釋(亮度是...好,只是亮度):

enter image description here

Brett的代碼幾乎原封不動:

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 2011-03-22 04:29:43

15

這是我對Axel Boldt給出的函數誰是Jan Homann啓發變化。鏈接到頁面都有一些漂亮的圖形。

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[Zeta, {-7, 3}, {-3, 3}] 

Zeta without contours

我們可以使用並顯示在ComplexGraph具體情節網格通過複製Brett添加輪廓也沒有輪廓的情節:

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不錯的圖像和鏈接 – 2011-03-22 04:44:21