Mathematica Stack Exchange is a question and answer site for users of Mathematica. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

In WolframAlpha we can easily visualize Riemann surfaces of arbitrary functions,

enter image description here

can we plot the Riemann surface of an arbitrary function using Mathematica and with a better color scheme like these plots so that I can see the connection of the branches?

enter image description here

Edit

Here are more Riemann surfaces by Matthias Nieser et. Automatic Generation of Riemann Surface Meshes

enter image description here enter image description here enter image description here

related:

How can I recreate Trott's Riemann Surface plot in Mathematica?

Visualization of Riemann Surfaces of Algebraic Functions

Automatic Generation of Riemann Surface Meshes

share|improve this question
2  
Perhaps should mention How can I recreate Trott's Riemann Surface plot in Mathematica? – Artes Sep 8 '13 at 17:40
    
@Artes That's where confuses me. Does this kind of visualization of the Riemann surface in 3D is called "Trott's Riemann surface plot", or this color scheme is brought up by Trott? There are lots this kind of plot in the wiki page of Riemann surface, but none of them referred to "Trott". Also matlab has a function cplxmap that can plot this kind of 3d Riemann surface, and it doesn't mention "Trott" either. – xslittlegrass Sep 8 '13 at 17:57
3  
Take a look at the first sentence in the question from the link Artes provided. – Kuba Sep 8 '13 at 18:03
1  
These are one of a number of ways to depict a Riemann surface. Another way, in my Application, is to use a multifunction capability and show a Riemann plane and using a Locator point with an attached arrow representing the complex value at that point. Dragging around the locator allows one to explore all parts of the surface in a smooth, single valued, continuous manner (just as Riemann claimed). With the Sqrt function you have to circle the origin twice to get back to the same point. You would have to contact me by email for more information. – David Park Sep 8 '13 at 19:15
up vote 10 down vote accepted
+50

You can take Michael Trott's code and modify it a bit to easily plot these surfaces

Import["http://www.mathematicaguidebooks.org/V6/downloads/\
RiemannSurfacePlot3D.m"]
rsurf[func_] := 
  Grid[{{RiemannSurfacePlot3D[w == func, Re[w], {z, w}, 
      ImageSize -> 400, 
      Coloring -> Hue[Rescale[ArcTan[1.4 Im[w]], {-Pi/2, Pi/2}]], 
      PlotPoints -> {40, 40}, Boxed -> False], 
     RiemannSurfacePlot3D[w == func, Im[w], {z, w}, ImageSize -> 400, 
      Coloring -> Hue[Rescale[ArcTan[1.4 Re[w]], {-Pi/2, Pi/2}]], 
      PlotPoints -> {40, 40}, Boxed -> False]}}];

Here it is applied to the functions from the OP

rsurf /@ {Sqrt[z], Log[z], (z + 1)^(1/3) + (z - 1)^(1/2)}

Mathematica graphics Mathematica graphics Mathematica graphics

It is a bit tricky to get a nice coordinate mesh in these plots since we aren't actually using a plotting program (like ParametricPlot3D or Plot3D) to make them. We are instead building up a list of Polygon objects and combining them into a GraphicsComplex. However, we can get a decent approximation of a coordinate mesh by changing the line EdgeForm[] to EdgeForm[Black]

Import["http://www.mathematicaguidebooks.org/V6/downloads/\
RiemannSurfacePlot3D.m"]
rsurf[func_] := 
  Grid[{{RiemannSurfacePlot3D[w == func, Re[w], {z, w}, 
      ImageSize -> 400, 
      Coloring -> Hue[Rescale[ArcTan[1.4 Im[w]], {-Pi/2, Pi/2}]], 
      PlotPoints -> {30, 20}, Boxed -> False], 
     RiemannSurfacePlot3D[w == func, Im[w], {z, w}, ImageSize -> 400, 
      Coloring -> Hue[Rescale[ArcTan[1.4 Re[w]], {-Pi/2, Pi/2}]], 
      PlotPoints -> {30, 20}, Boxed -> False]}}]/.(EdgeForm[]:>EdgeForm[Black]);

You can change the PlotPoints above to change the number of polygons drawn, and thus the quality of the 3D image and the density of mesh lines. The two numbers refer to the azimuthal and radial directions, respectively.

rsurf@Sqrt[1 - z^2]

Mathematica graphics

share|improve this answer
    
That's nice, could you add the mesh lines for better visualization? – xslittlegrass May 15 at 21:46
    
@xslittlegrass, see the edit. It took a while to find how to do it since Trott didn't use any built-in plotting functions. If I were a better mathematician I could deconstruct his package and refit it to use ParametricPlot3D, but I couldn't. – JasonB May 17 at 13:54
    
thank you, that looks really nice! ParametricPlot3D was introduced very early (version 2), do you know why he didn't use it in the package? – xslittlegrass May 17 at 14:01
    
I want to say it's because Trott is such a MMA kung-fu master that he doesn't need anything but some polygons and vertex colors to make a better 3D plotting program than is available out of the box. But there's probably a better reason than that. – JasonB May 17 at 14:04
    
BTW: have you seen Trott's earlier series of articles? You should see there his rationale for his strategy of using NDSolve[] in generating these surfaces. (I'm still annoyed that he never got to the special functions.) – J. M. May 17 at 14:50

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.