Wolfram mathematica 在Mathematica中绘制复函数

Wolfram mathematica 在Mathematica中绘制复函数,wolfram-mathematica,visualization,plot,complex-numbers,Wolfram Mathematica,Visualization,Plot,Complex Numbers,我如何制作一个Mathematica图形来复制圣人的行为?i、 e 。。。取一的复函数 变量,并绘制 在指定的范围内运行,并且 Y范围如下所示。这个 显示输出的大小 通过亮度(零为 黑色和无限是白色)而 这个论点用色调来表示 (红色为正实数,且 通过橙色、黄色。。。 随着争论的增加) 下面是zeta函数的一个示例(摘自年的M.Hampton),具有绝对值的重叠轮廓: 在Mathematica文档页面中,您可以使用ContourPlot和DensityPlot“潜在相位着色”来可视化复杂函数。但

我如何制作一个Mathematica图形来复制圣人的行为?i、 e

。。。取一的复函数 变量,并绘制 在指定的范围内运行,并且 Y范围如下所示。这个 显示输出的大小 通过亮度(零为 黑色和无限是白色)而 这个论点用色调来表示 (红色为正实数,且 通过橙色、黄色。。。 随着争论的增加)

下面是zeta函数的一个示例(摘自年的M.Hampton),具有绝对值的重叠轮廓:

在Mathematica文档页面中,您可以使用
ContourPlot
DensityPlot
“潜在相位着色”来可视化复杂函数。但问题是在这两种类型的绘图中,
ColorFunction
只接受一个等于该点轮廓或密度的变量-因此,在绘制绝对值时,似乎不可能使其为相位/参数着色。请注意,这不是
Plot3D
的问题,其中所有3个参数
(x,y,z)
都被传递到
ColorFunction

我知道还有其他方法可以可视化复杂的函数,比如中的“简洁示例”,但这不是我想要的

另外,我确实有(这实际上已经被用于生成维基百科中使用的一些图形),但它定义了一个相当低级别的函数,我认为它应该可以使用像
ContourPlot
DensityPlot
这样的高级函数。这并不是说这会阻止你给出你最喜欢的使用较低层次结构的方法


编辑:在《Mathematica》杂志上,迈克尔·特罗特(Michael Trott)发表了一些不错的文章:
可视化黎曼曲面,,。
可视化黎曼曲面。


当然,MichaelTrott写了一篇文章,其中包含了许多漂亮的图形,但似乎已经落后于Mathematica的加速发布计划

这是我的尝试。我稍微改变了一下颜色函数

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
 ]


我还没有想到一个好办法,让网格线的颜色变化。最简单的方法可能是只使用
轮廓图
而不是
网格函数

生成它们,这不是一个正确的答案,原因有两个:

  • 这不是你要的
  • 我在无耻地使用Brett的密码
无论如何,对我来说,下面的解释要清楚得多(亮度是……嗯,只是亮度):

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]

这是我对函数的一个变体,它的灵感来自于who。链接到页面的两个页面都有一些漂亮的图形

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

我们可以通过复制并在ComplexGraph中显示特定的打印网格来添加等高线:

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 -> Exp@Range[-7, 1, .25], ContourShading -> None];
Show[{ComplexGraph[Zeta, {-7, 3}, {-3, 3}],%}]

我还没有读过这个问题,但可爱的情节是+1:)@belisarius:这不是我的情节,但谢谢!您确定不能将(x,y,z)传递到DensityPlot中的ColorFunction中吗?我已经能够按照DensityPlot[…,ColorFunction->Function[{x,y,z},f[x,y,z]]]@MikeBantegui做一些事情:注意,只有函数中的
x
参数可以使用,并且对应于每个点的密度。请参阅文档“更多信息”部分的第一个条目。奇怪的是,它没有发出警告…@Mike,只有
x
被提供任何信息,如果你使用
ColorFunction->Function[{x,y,z},Hue@(y/maxy)]
你只会得到灰色。但是,使用
x/maxx
会给你一些东西。很好!这非常接近于我所看到的解决方案,它使用
RegionPlot[True,{x,xmin,xmax},{y,ymin,ymax},opts…]
作为基础
图形
对象。@brettchampionnice plot!有没有一种简单的方法可以包含一些色调从-pi到-pi的plotlegend?这不是一个正确的答案,但我同意-它确实使某些方面更加清晰,而且非常漂亮+1.