Implementing the General Construction
Let us demonstrate the steps outlined above using the following not-too-simple function.
A contour plot shows that
We canonicalize all functions by writing them explicitly in logarithms. This rewriting allows for a more uniform treatment
of all functions. We will not have to deal separately with all of the individual
Here are two examples of canonicalized functions.
This representation shows the source of the three poles visible in the above contour plot. They are caused by the arguments of the logarithms when the arguments become zero. This event happens at exactly three -values.
The next step is to determine all potential branch points. (I say potential branch points because in some situations they might turn out not to be branch points, but including them does not hurt in
any way.) To do this we select all -dependent log terms and power terms (with fractional exponents). The function
Here are two examples of the result of applying
Here are the multivalued terms of our example function.
The branch points are then given as the zeros and infinities of these expressions, because a rational function can map the
branch point at infinity to a finite -value. (An example of this situation is , where at the -branch point of the square root function reappears.) We equate the denominator and the numerator independently to 0. When
The branch points of are the values of such that or .
The branch points of and are the values of such that or .
The branch points of
Here are some examples of
We encourage the reader to carefully examine the following values for the potential branch points and to note from which functions they arise.
The following function is meromorphic in and does not have any branch points.
We get the following branch points for our example function
We transform all exact numeric quantities into approximate floating point numbers. All of the further work is mainly numerical in nature anyway.
Now that we have found the finite branch points, we divide the complex -plane into sectors between them by using a tensor product structure formed by the radial and azimuthal positions of the branch
points. We use a polar coordinate system for doing this. (Of course, one could also use a Cartesian one--we leave this to
the interested reader.) The sectors returned from
These are the sectors originating from the example function.
Let us visualize the sectors together with the branch points by coloring each sector with a randomly chosen color. The function
Now we must consider all the multivalued terms in our function to properly continue them analytically. Be aware that the sector boundaries have nothing in common with the branch cuts of the original functions; only the branch points coincide. The actual continuation will be carried out in this way.a. Radicals will be continued according to , .
b. Logarithms will be continued according to , . We will use only a finite number of sheets--typically three--later on for the graphics.
c. Powers of the form will be continued by rewriting them using logarithms as . This reduces this case to case b.
To differentiate the various multivalued terms, we give each of them an "index," like or . This index allows us to keep track of them uniquely later on. This is important because equal-looking terms could give rise to different sheets, like in the example . The two square roots are unrelated and each one generates two branches, so that the resulting Riemann surface has four sheets.
Here are all multivalued terms numbered in
The numbering for two other examples is as follows.
Now we extract all indexed terms from the function and collect them in a list.
Each of the numbered multivalued functions is now replaced by a symbolic function . After rewriting them into a nicer form, we can deal with them numerically later on inside
The result of
We now generate differential equations from the last list of substitutions. Doing this seems like a lot of work, considering that we already know the solution of these differential equations--these are just the values at the other sheets--but it is unavoidable. Although we know the location of the branch points, we do not know the detailed location of the branch cuts. So our solution might not represent the intended sheet. The branch cuts might form complicated patterns inside the sectors calculated above, and it would be very difficult or virtually impossible to construct the "correct" sheet purely symbolically. (Consider log(aComplicatedPolynomial). The branch points are just the zeros of aComplicatedPolynomial, but the branch cuts will typically wind through the individual sectors as complicated curves.) The resulting system of differential equations is then of the form where all of the are now meromorphic in all arguments, and no multivaluedness is present anymore in the solution of the differential equation system for the given initial conditions.
We obtain the differential equation for by using straightforward differentiation.
We use implicit differentiation to obtain the differential equation, meromorphic in and for .
We obtain the differential equation for
Here are the differential equations corresponding to
Here the differential equation corresponding to a
The right-hand sides of the last system of differential equations often still contain the derivatives of some of the . We recursively insert the corresponding right-hand sides to get a system of differential equations with rational right-hand
sides that can be solved directly by
Let us look at the resulting system of differential equations for two more examples. Here is the differential equation system corresponding to . The function generates the system of differential equations in the form used to visualize Riemann surfaces.
Here are the systems of differential equations that corresponds to some more complicated functions.
Now we must consider the sheets we actually want to display. When near a branch point (i.e., at the corners of our sectors),
we will choose the sheets that we want to continue analytically. For radicals we will use all possible sheets (if the reader
is going to use high order radicals one might want to restrict this). For logarithms we will use by default three neighboring
sheets (the one "below" and the one "above" the "original" one). As with radicals, we take all sheets into account when using
This method results in the following sheet realizations of our numbered functions.
Forming the outer product of all possible sheet realizations of all multivalued functions, we get all potential sheets.
For our example function there are potential sheets. Usually, however, we will not really have so many different sheets! When we calculate numerical values of the sheets (see below), some of the sheets might turn out to be numerically the same. A simple example is This expression contains one square root to be continued, but the canonicalized form contains two copies of the same square root which are differently numbered. Later on we will discuss how to avoid displaying the same sheet twice.
Here is the first realization.
Now we implement two functions that transform a given differential equation of the form into one in which or ( or being polar coordinates) stay constant. The dependent variable remains unchanged.
We get the following differential equations for our example function.
Now we will finally solve the coupled set of differential equations to get the Riemann surface. The function
We set the
The following shows one sheet inside the first sector for
One sheet (not always the same) for all sectors is shown.
Here is a view of the surface patches from the last picture from "above." The sector structure is clearly visible.
We now consider the generation of all sheets of interest inside one sector. The first step is to calculate the numerical values
of the sheets at one of the corners of a sector. If two such values agree, then they represent the same sheet (both are generated
by a differential equation without multiple solutions for given initial conditions). The built-in function
Now we generate all patches inside a given sector. After we apply
Here all the patches for our example function for the fifth sector are shown. One easily sees the branch point where the sheets touch each other.
Now we finally have all the ingredients together to implement the function
The basic test
For convenience, we now allow equations as inputs so that implicit forms can be used, too.
Now we have implemented all functions needed to visualize the Riemann surface. For our example function we arrive at the following pictures for the imaginary and real parts.
As the previous picture shows, the imaginary part is a faithful image of the Riemann surface.
Here is another example: the Riemann surface of an algebraic function.
Note: we can get a purely polynomial description of this function by using the function
Here is another example that contains the inverse of the error function.
You did not really expect the last example to work, did you? As mentioned in the introduction, the Riemann surface of such
functions will be constructed in Part III of this series, and this is only the third installment of Part II! According to the test implemented in
Copyright © 2002 Wolfram Media, Inc. All rights reserved.