**An Intrepid Tour of the Complex Fractal World using Dark Heart Package 2.1 for Mac**

**Download** under the GNU Public Licence

Updates at: http://dhushara.com

Chris King

**Contents
**

An Intrepid Tour of the Complex Fractal World

**Flight
Manual for the Dark Heart Viewer**

**Flight
Manual for the Riemann Zeta Viewer**

Dark Heart Mandelbrot Maps for Android

Fig 1: Parameter plane of the Function

The Dark Heart Viewer Package
contains two key complex function fractal viewers, **Dark Heart** and **Riemann Zeta**, which are both a pleasure to explore and are also professional research tools for exploring virtually every conceivable complex function in the universe, along with their fractal dynamics. A simplified Dark Heart Mandelbrot Maps viewer for Android is also available for download, which has a range key example functionse.

At first sight, Dark Heart shows you a
portrait of a function that is to be explored in 4-D colour and when you click
the screen switches to a Mandelbrot parameter plane view. You can then scale
this by dragging rectangles to explore ever-diminishing parts of the fractal
and click again to see the Julia set of the point chosen. Clicking again will
switch between these two views and reset will take you back to the function.

But the real interest begins
when you select advanced controls and a drawer pane opens which expands the
application into a research tool which can be used to investigate a vast
variety of polynomial, rational and transcendental functions leading all the
way to Riemann's famous zeta function and the full spread of esoteric zeta and
L-function at the cutting edge of mathematical research in the Riemann Zeta
Viewer.

There are several colour schemes
which are designed not just to be beautiful to watch, but to provide focused
research investigations, by highlighting by colour specific periodicities,
distinct attractors, irrational flows and other features key to investigating
particular examples.

The packages also provide saving
and loading of images and parameters so an exploration can be recreated exactly
and a suite of application scripts which enable the generation of movie image
sequences for any process the mind can imagine. The help menu documentation
enables you to check all the details of operation easily while using the app.

**An Intrepid Tour of the Complex Fractal World**

The easiest way to show you what
the package can do is to show you how it can represent key features of complex
fractal dynamics in both a visually exciting and mathematically significant
way. So let's go back for a minute to where this all began. **Classic
Quadratics**.

Note the **PDF** has clearer **full size equations** and full **resolution images**.

Fig 2: Diverse Julia sets and the period highlighted
Mandelbrot parameter plane of
.
**Dark Heart** article.

In the early 20^{th} century Julia and Fatou investigated the complex sets
that arise when a function, say
, is iterated over and over again
for some
fixed number *c*. For large *z* the points would expand to infinity. For small *z*, they seemed to settle into an attracting pattern,
but what happened in between? What about the points that couldn't decide which
way to go? Julia realized that the critical point, where the slope of the
function is zero, was pivotal in determining the form of the Julia set, which
he also recognized was a type of self-similar fractal like the Koch flake.

It was only when computer graphics came along, that we
began to appreciate that, on the boundary was a chaotic set - the Julia set -
which had a variety of fractal forms, on which the dynamics was wildly
unstable. The left-hand Julia set J_{c} shown
here is the boundary between the points on the outside heading to infinity and
those on the inside together forming the set of ordered basins of attraction,
in this case heading into an attracting period 4 pattern of four periodic
points, both regimes of the rule of order forming the Fatou set. The dark boundary is where chaos rules! The one on the right where, we can
see the top and bottom halves are disconnected and so on ad-infinitum, so the
whole set is completely disconnected Cantor dust.

Chaos has three manifestations:
(1) the *butterfly catastrophe* -
arbitrarily close points iterate exponentially away from each other - making
the process unstable and computationally unpredictable, like weather can be,
(2) dense collections of repelling periodic points, and (3) *topological transitivity* - every small
pair of open sets getting mixed so one iterates over the other.

A deep and puzzling question then arose, which proved
to have a stunning answer. Some of these sets were topologically connected, as
is the one on the left, but others were fractal dust, sometimes in complicated
swirls, as the one on the right. This question looks at first sight impossible
to solve for such a fractal set. Mandelbrot
used Julia’s insight about critical points to investigate *c* values where the Julia set is connected, using the
critical point, where the function was neither shrinking nor growing - as on on a mountain top or in the bottom of a lake in topography,
in this case *z** *= 0. The idea is that
these are the last points to escape to infinity, so if they don't escape, the
Julia set must have encircled them. So instead of applying the above iteration
to all *z** *for a fixed *c*, we start with the critical
point and apply the iteration to each *c* in
turn
. Mandelbrot, working at IBM, decided to make an atlas
of the *c* values of all the connected
Julia sets, and discovered the Mandelbrot parameter plane M - the set of *c* where J_{c} is connected, is also a fractal, through which we can graphically compute the
answer to the topological chaos of J_{c}.
Furthermore this atlas is universal to all quadratic functions since any
quadratic iteration can be shown by scaling and translation to be conjugate to
that of
. M is sometimes called the most complex mathematical
object in existence, because its dynamics are not simply self
similar, but vary so that they represent in one fractal, the dynamics of
all quadratic Julia sets.

*z*^{2} dominates *c* and maps a large circle onto an even larger one. Take a great circle big enough
that *z*^{2} dominates, so that all the points are escaping to the
super-attracting fixed point at infinity and step it backwards. Instead of
squaring, we are now taking two square roots, so we either get a circle winding
twice around itself, a figure 8, or two separate circles, just as we see in the
boundaries of level sets using Dark Heart. However, if we reach a figure 8, we
have a double root, which is also the critical point *z*^{ }= ± 0 and *f*(*z*)=*c* so *c* lies on the image of the figure 8 i.e.
the first image circle escaping to infinity (see right), so we are outside M. The inverse
images of each figure 8 will now be a pair of figure 8s, with graduated pairs
of circles between, resulting in an infinite disconnection so the
Julia set is otally disconnected fractal dust.
*c* is in M. M itself can also be shown to
be connected by considering the fact that its own level sets are all
topological circles, because it contains precisely the *c*-values where the Julia level sets are all circles.

We can also see why the
Mandelbrot set has dendrites. One-dimensional real number quadratic iterations
can also have chaotic dynamics. These *c* values result in connected Julia sets lying along the *x*-axis corresponding to points on the period 2 dendrite, where the
critical point iterates to chaos, or lands on repelling periodicities on the
Julia set itself, which, although still connected, now has no internal basins
(5, 17 in fig 3). The same situation
pertains for every periodicity around M, resulting in a principal dendrite for
each period bulb. Once we exit the bulbs and enter the dendrites, these periods become
repelling and the critical point may become eventually periodic to a repelling
periodic orbit at the tips and branching points of each dendrite, called Misiurewicz points. We can solve for these, e.g. for *M*_{2,1},
we have (*c*^{2}+*c*)^{2}+*c*=*c*^{2}+*c*,* *giving *c* = 0 and -2 at the
tip of the period 2 dendrite.

Inside
each period-*n* bulb is a central
super-attracting point, where
for any point on
the period-*n* cycle. But this means
that one of the derivatives
has to be zero,
so
the critical
point. Hence the critical point is periodic with period *n *at this *c* value. Hence there
is a point *c* in each bulb where
, resulting in an equation of degree
. For example for period 3, we get
, giving 0 for the period 1 heart -0.1226 ± 0.7449*i*, for the two period 3 bulbs above and
below and -1.7549 on the small satellite
Mandelbrot on the main dendrite on the negative x-axis. We can also see why the Mandelbrot set is surrounded
by an infinite number of satellite copies of itself, because points around
-1.7549 behave under the third iterate *f *^{(3)}(*z*), when renormalized by rescaling by *f *^{(3)"}(*z*) /2, just as *f*(*z*), acts on M. Other points in the interior of each bulb
have attracting periodicities.

We can also see why the
Mandelbrot set is surrounded by an infinite number of satellite copies of
itself. Consider points around -1.7549. These behave under the third iterate when renormalized by rescaling, just as *f*(*z*), acts on M. We can see this by examining the Taylor
series as follows:

Since
. There are no *z* or *z*^{3} terms since *f* is an
even function. Applying the scaling
, we have where
, since we are now simply squaring and adding *g*(*c*), so it’s locally a scaling of *f*(*z*), by
and rotation by
since to first order* *
.

The periodicities associated with the bulbs on the
Mandelbrot set add fractional rotations as mediants
. Mediants correctly order the fractional rotations between 0 and 1 into an ascending
sequence providing a way of finding the fraction with smallest denominator
between any two other fractions. A
way of seeing why this is so is provided by using a discrete process to
represent the periodicities or fractional rotations. For example if we have 2/3
=110 and combine it with 1/2=10 by interleaving, we get 11010, or 3/5 so
between period 2 and 3 we find a period 5 bulb.

Because the periodicities grow exponentially on the boundary of M, particularly around parabolic periodic points at the base of the principal cusp or those at the base of bulbs (see left), whose Julia sets have fractal dimension converging to 2, the boundary of M has a space-filling fractal dimension of 2 as its local dynamics corresponds to that of the associated Julia set..

To derive the cardioid boundary of M , we set
, giving
. For the period 2 bulb we can solve for
to get the
cardioid again plus
the circular
period 2 bulb.

Points on the boundary have more enigmatic behavior. Here the
fixed or periodic point becomes neutral and at least two different outcomes can happen.
For rational
the neutral point has both attracting and repelling regions
forming *q* quasi-attracting petals on the Fatou set, separated by *q* repelling arms on the
Julia set and the fixed or periodic neutral point is in the Julia set,
as in the illustration above, with the critical point orbit neutrally approaching the fixed point on the petals.

Fig 2b: Critical
point orbits using Wolf Jung’s **Mandel application** (Jung** 2014**)
included with the package. Left to right: Period 4 attractor, a nearby period 1 orbit near a high attracting period bulb, a golden ratio Siegel disc with the critical orbit traversing its boundary, one radian digitated Siegel, a Liouville number neighbouring a higher period parabolic point, 'digitated Siegel' near period 4, period 4 parabolic orbit and a fractal strange attractor in the repelling Julia set on the dendrite at the limit of period 4 doubling. One can see in example 6 how the dynamics evolves. The critical orbit running close to period 4 at first converges towards the neutral point, but because it is slightly off period, as the parabolic approach stagnates, moves laterally until it approaches the repelling arm of the Julia set on the boundary, where it is very rapidly hurled up into the next period 4 pseudo-petal in an intermittency crisis. This implies the neutral point is already in the Fatou component. **Mandel comes with a swathe of facilities complementary to the Dark
Heart viewer,** with an extensive set of tutorials in the
help menu.

For irrational values the situation is still not completely
resolved. Golden
numbers like the golden ratio
, avoid becoming mode-locked to a dominant
periodicity because their distance from any fraction of a given denominator *q* exceeds a certain
bound:
. The golden numbers can most easily be described in terms of continued
fractions, which, when truncated represent the closest approximation by rationals:
. Rotation angles with bounded *k _{i}*’s far from rational
values (continued fractions of golden numbers end in a sequence of 1's) have neutral fixed points

But
there are other irrational values associated with large or unbounded *k _{i}*’s , which
lie very close to rational numbers, so that for every

Fig 1c: External rays and
potential levels displayed using Wolf Jung’s **Mandel** application^{ }(2014)
included in the Dark Heart package.

Douady and Hubbard discovered a number of intriguing
relationships depending on the critical point that index the features of the
bulbs and their dendrites in terms of the critical points. Because the
Mandelbrot set is connected, with a simply connected complement, the complement
can be mapped to the complement of a unit disc. E can thus define the external
angle, the angle of the ray from the unit disc that corresponds to each ray
from M. There are intriguing ways to calculate these angles for the bulb cusps
and key points on the dendrites.

Inside
each period-*n* bulb is a central
super-attracting point, where
for
any point on the period-*n* cycle. But this
means that one of the derivatives
has to be
zero, so
the
critical point. Hence the critical point is periodic with period *n *at this *c* value. Hence there
is a point *c* in each bulb where
, resulting in an equation of degree
. For example for period 3, we get
, giving the period 1 heart and the three locations of
the small period 3 dendritic Mandelbrot island on the main dendrite and the two
period 3 bulbs above and below the main heart.

If
we consider a critical point in either a periodic orbit or an eventually
periodic orbit, we can encode the dynamics as a binary ‘decimal’ setting a 0
for each iterate in the upper half of the local traverse of the 0/1 and 1/2
rays, which are asymptotic to the positive and negative real
axis. When we expand this decimal as a power series it gives the external
angles of the cusps of the bulbs and dendritic Mandelbrot islands and the Misiurewicz dendrite tips and branching points.

Rays
emerging from cusps and dendritic islands all have external angles fractions of
the form because of
the repeated binary decimal associated defined by their periodicity, associated with each step in the period squaring and hence doubling the angle. E.g.
. Furthermore these lead to every odd denominator
fraction as a result of Euler’s generalization of Fermat’s little theorem
where *a*, *n* are coprime and
is the
number of integers less than *n* coprime to *n*. For example for 9
we have 1, 2, 4, 5, 7, 8 give
, so and is
actually an external angle of the period 6 bulb. By contrast, those from eventually-periodic Misiurewicz points have even denominators because the non-periodic initial iterations cause an irreducible power of 2 in the denominator.
_{2,1 }at *c* = -2 gives
.

There are many such processes
which represent chaos in the real world such as the dynamical crisis, or
verlust, of rabbit populations, where we have a function representing
exponential breeding *cx* in a finite
pasture (1-*x*). This gives all manner
of periods 2, 4, 8 etc. as the growth rate *c
*increases through boom and bust due to overpopulation and starvation then
entering chaos and other strange periods. Once we put this process into complex
numbers, we get another Mandelbrot set - a simpler version of the one in fig 1, shown (1,1) in fig 10b
- and a collection of Julia sets, showing that these different real phenomena
are all part of one complex process.

So now lets have a look at how
Dark Heart handles the diverse Julia sets of the classical Mandelbrot set,
which have proved surprisingly difficult to capture due to their varied forms
and unstable dynamics.

Julia sets come in diverse forms. They can consist of a single connected internal basin of attraction (7) have an infinite number of internal basins (3, 6, 16) and semi-dendritic (15, 17) which are generated from satellite Mandelbrots). Julia sets can be dendritic and have no interior basins but still be connected (1, 2, 17). They can be totally disconnected fractal dust (4, 14). They can also display behavior on the boundary between these states. For example a point right at the base of a bulb (8, 11) is called parabolic because it is bifurcating between periods (e.g. 1 and 5 for 11) and instead has neutral points surrounded by petals drawing towards the points and radiating arms on the Julia set repelling away. In between all the bulbs in golden mean type locations, which avoid all the periodicities associated with the fractional rotations of each bulb, are Julia sets with a neutral irrational rotation (13) called Siegel discs. Between these cases are emigmatic irrationals close to rationals whose dynamics have not yet been classified. (10, 12) show hybrid irrationalstates close to parabolic (11). One can also find parabolic Julia sets right on explosive bifurcation such as on the cardioid cusp (9).

Three Julia journeys. The first runs just outside, the cardioid in mode 1, shows escape from chaos in grey and periods in colour. The second, right on the cardioid in mode 5 highlights irrational flows and occasional parabolic periodic sets. The third in mode 0 illustrates an explosion out of the main cusp. Although the irrational flows are hard to find in the plane, on the curve they are much more common than the paraboic petals which are countable as the rational fractions corresponding to each bulb, while the irrational flows are an uncountable infinity on the cardioid. By contrast, Cantor dust Julia sets even though they are totally disconnected have an uncoutable infinity of points in the chaotic set.

Originally different techniques
were developed to handle these cases. The simplest algorithm is the level set,
where we colour the exterior by how many steps it takes to escape a large
circle, leaving the interior and boundary filled dark. This doesnÕt work well
either for complex dendritic sets which needed another technique called the
distance estimator. Nor did it work for parabolic sets which required inverse
iteration. Howeer these techniques are focussed on the quadratic and donÕt
easily generalize to all functions.

Dark Heart viewers use a modifed level set algorithm which works for any kind of function and has several colour schemes suited to highlight all these types of Julia set and in addition to portray internal periodicities by colour (mode 1 in 6, 7,16,17), capture the dendrites and fractal dust using non-linear colouring schemes (modes 1 and 4 in 1, 2, 4, 5, 15,17,18), distinguish distinct fixed attractors if they exist and to sample irrational flow velocities and highlight parabolic petals (mode1 in 10-13). One can also follow the way periodic lobes are mapped by colour (mode 3 in 5) and distinguish multiple attractors in rational functions such as Newton's method. The default (mode 0) is a useful general exploratory mode with non-periodic sinusoidal colouring.

The view of the Mandelbrot set
is also coloued to highlight the dendrites which connect the main body to all
of the Mandelbrot satellites, demonstrating that the quadratic mandelbrot set
is connected, despite having fractal dimension 2 the highest the 2-D complex
plane can accommodate. The interiors are coloured by incipient periodicity,
which begins to track as period say 3 within the period 1 bulb as we approach
the period 3 bulb because the algorithms finds the third iteration close enough
at the cutoff.

This makes it easily possible to
see the relationships in the periodicities. Starting from period 2 to the left
we have period 3 at the top and bottom and successively 4, 5, etc. as we move
towards the cardioid cusp as the rotation under iteration goes through 1/2. 1/3
etc of a revolution on each bulb. At the same time, between each pair of bulbs
there is a fractional rotation that works by mediants - *p*/*r* and *q*/*s*
become (*p*+*q*)/(*r*+*s*) so between 2 and 3 is a 5 and so on.
We can also see how the periods multiply on sub-bulbs as oscillations of the
base frequency.

Left: Modified Inverse Iteration. Right: Distance estimator algorithm.

Included with the DH package are several **additional applicaitons** which perform complementary functions. There are two applications, **modified inverse iteration** and the **distance estimator algorithm**, which enable the display of high-resolution black and white images of Julia sets of the quadratic Mandelbrot set, such as the ones shown above. They aim to define the actual chaotic set, rather than colour the basins on either side. These are capable of generating high resolution images on a large monitor andprovide some of the most accurate correct depictions of the actual Julia sets available. Modified inverse iteration gives accurate portraits of Julia setswhich enclose internal regions of their complementary Fatou sets, including parabolic sets on the boundary. The distance estimator likewise gives very accurate depictions of dentritic Julia sets on the Mandelbrot boundary. The wave function method viewer gives another kind of depiction of several types of Julia and Mandelbrot set, in which a wave function is repeatedly transformed by the forward mapping, in a way which relicates the modified inverse iteration effect, since the forward mapping of the wave function values has the same effect asthe inverse mapping of the end points.

Fig 3: Left: Winding
sequence of dendritic satellites and sub-bulbs of Mandelbrot period 3 increases
in steps of 1.

by 2*π*/3, since if
then
and so and by induction
all iterates also are just rotations
of the original.
It has Julia sets
distinct from those of fig 2. A topological space is locally connected if every neighbourhood (open set of a point in the space) has a connected sub-neighbourhood. The regions in the lower inset indicate that the mandelbar is not locally connected.

In fig 3 we can see how the
colouring can also enable us to chack the base periodicities of satellites and
hence to see how each of these correspond to a cycling series of locations
where each has a period a constant step up, forming a cycle of periods
surrounding the base dendrites. The settings colour periods up to 35, making it
easy to explore fine grained details and understand their dynamics on blow-up.

*Higher Degree Atoms*

In Dark Heart viewer, we can alter the settings for this function to portray any function of the form by setting R,I to be e.g 3,0 instead of 2,0. We can then see each of the germ periodicities for multiple roots of higher degree clones of our original function, each of which is analogous to the quantum wave functions of an atom because each integer power winds precisely one revolution more around the origin.

These form the root possible
single critical point kernels which appear in all more complicated examples to
follow and they represent the only kinds of solutions we can have, except for
an exponential plateau and the inversions of these solutions in the presence of
singularities, such as those caused by negative powers of z. In fig 4 are shown
each of these along with the period 6 Julia sets of a period 3 sub-bulb of a
period 2 bulb on each set to show their dynamics are essentially similar except
for the *k*-fold geometry. All of these
have well-defined boundary curves of their central region, so Dark Heart has a
script which can generate interesting movies of the changes in the Julia sets
as we move around the boundary, or out of the cusps.

Fig 4: Elementary higher powers and their functions and parameter planes.

In fig 4 the first three rows show function, Mandelbrot and Julia views
of
,
*k* = 2-5 and
showing the principal power 'atoms' forming the stable critical
points of a diversity of functions, with main body boundaries following
well-defined exponential curves. To derive these, we set
, giving , which for *k* = 2 is the dark heart cardioid with one cusp neatly winding through two
revolutions as we follow the boundary curve. For the period 2 bulb of the
quadratic case we can solve for
to get the
cardioid again plus
the
circular period 2 bulb . Thus we can see the central basin is always a dark “heart”
having *k-*1 cusps, with bulbs having *k*-2 cusps, supporting *k* revolutions as we move around the boundary,
counting the base journey, equalling the *k-*fold
winding of the function, illustrated in row one. Fourth row: Mandelbrot views of second order atoms which arise in a region in which two or more dark hearts of critical points overlap giving full continuity (next section). Left to right:
,
, both of which have a hidden infinite dark heart due to a second critical point a *z* = 0 mapping to 0, and
* k* = 2-4 (black inner bodies with full continuity) consist of a fractal curve with quadratic cardioids emerging from the cusps and fractal symmetries of the order k, rather than the k-dimensional bulbs and well-defined body boundary curves of the upper sequence.Row 4: Mandelbrot views of
second order atoms which arise in a region in which two or more dark hearts of
critical points overlap giving full continuity (next section).
*k* +1 form but bulbs in the *k*-form due to the unusual *c* parametrization.

Transitions between parameter planes of *c*(*z*+*k*)*z*(*z*-1).

In the above video, firstly we move from *k* ~ -2 to 1, passing *a crisis in cz*(*z*-1)^{2}, at* k *= -1, *cz*^{2}(*z*-1) and its rocky coastline at* k*= 0 and* cz*(*z*+1)(*z*-1) at *k* = 1. Then we spin twice on a tiny circle around the crisis at *k *= -1 to see the Mandelbrot arms rotate. Then we zoom into a bulb and follow the Julia sets as they cross the rays on the bulb, zooming in again to see the tiny rotational disconnections at the very centre at *z* = 1 explaining the crisis. Finally, when we view the Julia sets in full retraversing the same path, the focal disconnections are too small to be seen.

Fig 4b: The parameter planes of *c*(*z*+*k*)*z*(*z*-1), passing (a)* cz*(*z*-1)^{2}, (b) *cz*^{2}(*z*-1) and (c)* cz*(*z*+1)(*z*-1) display radically different dynamics.

Fig 4b shows three key parameter planes from the video above. While in (c), both critical points give the same parameter plane, resulting in first order bulbs although there are two separate criticals, in (b) there is a second order dark heart rocky coastline parameter plane where both criticals give rise to connected dynamics enclosed in a first order plane with double bulbs. By contrast, in (a) there is a unique crisis around the
double zero *z* = 1, again giving a zero derivative and hence a critical that maps to 0
inducing an infinite parameter plane, but coinciding in this case with the
multiplicative idenity for *c*. In this case, every neighbouring value of *k* = -1 has a finite parameter plane with
a rotational connectivity crisis caused by the Julia sets forming two sets of
‘spokes’ with an infintessimal hub winding around the two closely spaced zeros,
resulting in alternating connections and disconnections, as we move *c* across the
fractal bulbs, resulting in the fractal banded arms in each bulb. In the limit
as *k* approaches -1, the combined plane still has first-order bulbs, because all
adjacent *k*-values
have a finite parameter plane for the near vanisihng critical *z* ~ 1.

*Cubic Chaos: Multiple Criticals and Interference
*

The above functions don't really
give us any kind of generalized higher degree Mandelbrot set because they all
have degenerate critical points. To see what really goes on in higher degrees,
we need to explore more general polynomials. While with quadratics, the family
forms a complete parameter space of all quadratic
Julia sets under equivlence by affine transformations, cubics require two free
complex parameters to do so, meaning we need an effectively 4-dimensional
parameter space. We also have two interacting critical points, so new phenomena
arise. There are two approaches to this problem.

The one used predominanly in
dark heart is to choose a parametrization with one complex variable, such as the
cubic
, which has a pair of distinct critical points spaced
apart and examine the combined behavior of the two critical points for this
parametrization. We shall examine this first. The alternative is to form
‘slices’ of the 4D parameter space involving a single complex parameter which
fixes the behaviour of one critical point and examines the variations in the
other. We will give two examples later.

We can make the same arguments for cubics and higher polynomials that we made for the figure 8
in quadratics, showing that each critical point is measuring the connectedness
of the Julia set, which is fully connected only if neither can escape. If the
cubic has distinct critical points, a great circle where *z*^{3} dominates will either have entirely simple closed curve inverses, as in the
connected quadratic case, or it will reach a local figure 8 where there is a
double root, which must also be one of the critical points as the slope is also zero, therefore this critical value will escape and we have a disconnection. In general were will also be a second inverse image where there is a second figure 8 of the other critical point resulting in a further disconnection to fractal dust. In the degenerate case such as *f*(*z*)
= *z*^{3}+*c* where we have coincident critical points, we
will have a triple point, resulting in the escape of *c* and a complete
disconnection in a single step.

We now have to contend with the
fact that we don't have just one parameter plane, but two overlapping ones, one
for each critical point and we going to see that each is measuring the
connectedness of the Julia set, which can now become disconnectd and/or scrambled
chaotically in two different ways by the oscillations of the cubic iteration.
Dark Heart deals with this by
calculating the critical points and iterating the function over each parameter
plane and presenting a superimposed prolile of the two, so we can select any
point and see the consequences in terms of connectivity and winding. Only in
the black central region in fig 5 will the Julia set be entirely connected. You
can also view each one separately by checking dF and using the derivative
portrait zeros to locate and select the critical point using hold.

Fig 5: Dynamics of the function *
*.

Fig 5 (1-12) shows a variety of new
features which enter into the chaos with . The double parameter plane now has both black regions where
the Julia set is connected, orange regions where there is a fractal disconnect
in one of the factors and a light yellow exterior where both are disconnected.
Julia sets above illustrate (1) a single disconnection with the other factor of
period 9, (2) a connected set with two different periods, (3, 4) two sets in
the right hand cleft with rapidly changing dynamics between the two, (6) a
doubly connected Julia set of period 3 at a Mandelbrot satellite on the rocky
coastline of the black set and (7) a set on the edge of the lower cleft
dendritic on one factor and disconnected on the other.

.

Julia journeys in an out of the Mariana trench.

But two major new features also arise.
The first is interference between the dynamics of the two critical points. In
each of the 'Mariana' trenches formed by the four deep cusps the higher and
higher periodicities of each are being perturbed by the other, fragmenting the
bulbs of each and leading to a newly chaotic dynamic, reminiscent of the
mode-locking perturbations that have thrown all the asteroids in any sort of
periodic relationship with the orbit of Jupiter into the other planets. In
(10-12) we can see blow-ups of the two separate parameter planes which not only
show chaos in superposition but each on its own is responding to the
perturbations of the other. This results in extremely small changes in the *c* values strongly altering the
relationship between the periodicities in the Julia sets.

Also the Mandelbrot satellites are no longer confined to dendrites but can also be connected through solid regions on the inner boundary where the bulbs are replaced by rocky coastline dark hearts, as on the dendrites of the quadratic case, except now attached to the main body via the cusps. (13-16) for *k*=0.2 show the erosion of higher period bulbs as k increases, with concretion of dendrites to periods 3, 4 and 8 due to a dominant periodicity on one critical point as for period 1 in (5,6).

How the two halves of the period 3 bulb of *z*^{3}+*c* separate into an outer bulb and a dark heart of *z*^{3}-*z*+*c*,

with Julia journeys showing off mode 1's capacity to model periods, Cantor sets of escaping flows and irrational rotations.

The above movie shows how these phenomena arise as we move from *f*(*z*) =*z*^{3}+*c* to *f*(z) =*z*^{3}-*z*+*c*, each of which is shown in figs
4 and 5. The period 3 cubic double bulb and its satellites separate, with (a)
the left lobe in the movie becoming the dark hearts on the rocky inner
coastline of the distant critical point and (b) the right lobe becoming the
outer bulbs of the nearer critical point. The same picture applies to the cubic
satellites on the dendrites, the right set splitting to become (a) the dark
hearts on the smaller fractal rocks of the inner coastline defined by the
distant critical and (b) the dark heart islands of the nearer critical with the
the left set splitting with one set (a) descending to the adjacent rocky
coastline of the distant critical as the left lobe did, and the other (b)
continuing as outer bulb dendritic satellites. The dark hearts of each critical
point, being nuclei of attractive winding periodicities, are atomically robust
to interference from the other critical point and pass unaltered through such
changes, while their associated repelling dendrites become perturbed and undergo
bifurcation through an irrational flow to a base period Julia component. The
fractal rocks on the coastline associated with each dark heart thus originate
from the concretion of dendritic webs that have become frozen to the main body
attracting period of the other (adjacent) critical point.

Fig 5b: Per_{1}(0),
Per_{2}(0), Per_{3}(0), colour coded by period, with five pre-periodic examples and
the Neut(λ) plane of Siegel discs, with example Julia sets.

Now let’s turn to the ‘slice’
method of investigating higher degree Julia sets favoured by classical
research. In figure 5b are shown slices of the 4D so-called cubic connectivity
locus which fix one critical point to periods 1, 2 and 3. These are highlighted
in mode 1 to emphasize their local conjugacy with the dynamics of the Julia
sets. We can easily confirm that the illustrated function
has a
super-attracting fixed critical at 0, (derivative 0 with
period 1 hence Per_{1}(0)), causing
*c* so we have:. Now let’s stipulate that
, so that we have , giving
. This has the parameter plane shown in fig 5b top right, with
dark hearts suspended in period 2 domains. The selected Julia sets
for several values of *c* show that
one critical point component of the dynamic is period 2 while the other can
take any configuration, from period 3 through Cantor dust to compound period 2
configurations. As shown lower left in fig 5b
we can do likewise for period 3 with , resulting in the parametrization
, giving rise to a spectrum of locations. all of which have
one critical point inducing period 3 dynamics.

Dark Heart also includes the period 4 case, which is right on the limits of computability, generating a 42 page formula in Mathematica after Matlab froze, which when **computationally streamlined** results in four multiply split parameter planes, generating a comprehensive collection of
period 4 coupled Julia sets. In fig 5c is shown the superimposed parameter
planes with selected Julia sets. The equations of the splits cannot be computed
as they are of degree greater than five.

Fig 5c:
Four parameter planes of Per_{4}(0)
superimposed, with a selection of Julia sets.

The last example
right in fig 5b examines the parameter plane Neut(λ) of
, the golden mean value, which forces one critical point to give
rise to a neutral point rotation of a Siegel disc, while the other can vary at
will, as illustrated in the various Siegel discs both continuous and
discontinuous, one harbouring a complementary period 3 component. Rational
values can likewise be chosen for gamma resulting in parabolic examples. Again
this parameter plane has domains conjugate to Siegel discs. In the case gamma is a Cremer point, this
parameter plane is connected but not locally connected (Buff & Henricksen
2001), due to it being quasi-conformal with quadratic Julia sets of the form
.

Fig 5d: The quasi-degenerate slice
(Parameter file in quintics) has the
critical point at 0 mapped into the other at 2/3, resulting in a parameter
plane with bulbs having ‘quartic’ double cusps.

*Higher Polynomials
*

Dark Heart extends the cubic
example to a series of higher degree functions, which can be modified in the
advanced settings to both change the degree and alter the separations between
critical points, leading to a huge diversity of examples. Application scripts
are also provided which can portray any polynomial up to degree 5 either in
terms of its coefficients, by solving for the critical points, or by setting the
positions of each of the four critical points and calculating the coefficients.
Several of the examples in advanced settings with symmetries can go to higher
degrees and also have negative powers, leading to infinite singularities.

Fig 6: Dynamics of higher degree polynomials
illustrating overlapping parameter planes, graded disconnections
and multiple Julia dynamical systems.

In fig 6 we examine
*f*(*z*) = *z*^{7} – 0.5*z *+* c* with a cascade of five dark hearts in successive rocky
coastlines, ending in a quadratic bulb, illustrating six stages in the fragmentation
of a degree seven Julia set, with the seventh stage being a completely disconnected Cantor
dust. On the right are blow-ups of
showing multiple interference zones yielding Julia
sets below, each of which show the interaction of four dynamical systems. For
example, in the lower one, we have three periodic systems in green red and pink
and a Cantor dust disconnection of the multiple 'violins'.

Fig 6b:
Symmetries in polynomial dynamics of *f*(*z*) = *z ^{k}* -

In fig 6b we explore the effects of symmetry, the use of
moduli spaces and the dynamics of odd and even powers. The polynomials *f*(*z*) = *z ^{k}*

We can explore this further, by explitiong the symmetry of
the functions by a rotation by 1/(*k*-1)
of a revolution when the overlapping parameter planes are combined, as shown in
(c). We can thus introduce a mapping to another C-plane, where *C *= *c*^{1/(k-1)} , to form the **moduli space** of
equaivalence classes of *c* under the
rotational symmetry, as illustrated in (d). In particular, this transformation
is a Mobius transformation which conjugates with the polynomial function, so we can
generate its own parameter plane which in each case now looks like a set of overlapping dark hearts. This
perfectly represents all the possible Julia sets up to rotation by 1/(*k*-1) of a revolution, but it also
involves geometrical scaling so that for higher values of *k* the black region (inset for k = 4-6) becomes shrunken and
distorted about the origin, while preserving the fractal sturctures and topological
dynamics completely.

When we examine the cases in (d), we see that for even *k*, the origin is always at a cusp in a
dark heart region penetrated by a complementary region, while in the odd case
we find a central region penetrated only by the universal vertical cusps of the
remote period 1 basin.^{
}

Separations of the above degree 3 to 5 polynomials from their atoms

*Rational Functions and Infinities*

There are also an intriguing
array of rational functions which have infinite singularities as well as
critical points which disturb the dynamics in sometimes un predictable ways and
which provide new interesting dynamical examples.

A famous one is Newton's method
in which we find the zeros of a function by iterating from a start point *x* , going up to *f*(*x) *and then down the
slope *f'*(*x*) to the point . Virtually always this closes in on the zero but not every time. There is a chaotic set of points that can't decide what to do and we can explore it for the complex cube roots of unity. It turns out that we can describe any cubic in the form . Dark Heart applies this generalized to * *to get Newton's method for the
complex *k*-th roots of unity. In fig 7
the parameter plane of Newton on the fifth roots of unity is shown (1),
iterated from the repelling critical point at 0. This puts the origin on the
chaotic Julia set, but other *c* values
not on the Julia set mostly iterate into one of the five attracting roots. (2)
shows a parameter plane blow up with a degree-4 Mandelbrot kernel, and (3) the
Julia set of the iteration for *c* = 1,
to the fifth roots one in each of the large colour-coded regions with fractal replicates eventually mapping onto these. This provides a unique fractal 5-colour mapping problem in
which every point on the boundary of each region is simultaneously touching all
of the other four regions because every boundary point is a fractal boundary
intersection point of all regions.**
**

Fig 7: Varieties of rational function dynamics

In (4) is the parameter plane of, which for golden mean rotations in the left sector,
provides the Herman ring - a unique example of an annular irrational flow in
the Julia set (5). Notice also
that the left hand portion of the parameter plane surrounding the singularity
has both inward and outward pointing bulbs, leading to inversions of the Julia
set dynamics.

In (6) parameter planes and
Julia sets for provide an example of symmetries generated by each of the two
powers. In the (5,3) case there are 5-1=4 baby dark hearts.
Each of the intervening 4 concentric domains has 5+1 outer sub-domains and
3-1=2 inner sub-domains adding to the 5+3=8 fold rotational symmetry of the
Julia sets with 5 outer and three inner sub-domains.

Filigree journeys around *z*^{3}+*n*/*z* for small *n*.

Another intriguing phenomenon is the way a
singularity can introduce fractal perforations in an existing iteration. In (7)
the parameter plane of
shows the dark heart perforated in the centre by the effect
of the singularity, which has also fragmented the critical points into a
closely spaced set of 3, generating overlapping parameter planes. A Julia set
from the period 3 bulb (8) shows internal perforation by a latticework of
'holes' with multiple dynamical systems in the interior due to the multiple
critical points. In (9) the iteration
shows almost
completely scrambled parameter planes generating the diverse Julia sets shown
in (10).

(11) Shows and a Julia set of period 3, with similar power-based symmetries to (6). (12) shows the ghostly outlines of the repelling version of Newton’s method , dominated by escaping points, leaving only isolated regions of connectivity, with a Mandelbrot island of base period 2 and a period 6 Julia set.

*z* so there is a good library of varied rational functions. (16) Shows the Julia set of *f*(*z*) = *z*^{2} + (1/16) *z*^{-2} is a Sierpinski carpet. (17,18) Julia sets of* c*(*z*+1/*z*+2)+1 (Mandel1.txt) and *c*(*z*+0.5/*z*^{2}) (Rational 23) showing internal dynamics and fractal tilings of the complex plane in mode 3 showing how the attractors separate the plane into fractal tilings (Parameter files in rational fig7-17, 18).

Light at the end of the tunnel – three 1255 x 677 images of Julia sets of *c*(*z*+0.5/*z*^{2})

Both cubic polynomials and quadratic rational
functions have two critical points, where the derivative is zero or infinite,
leading to a 4D moduli space (2 complex parameters), under equivalence by
Mobius transformations, to completely describe the Julia sets of every
function. However, as we have seen with cubics, it is possible to form a **slice** consisting of functions fixing the behavior of one critical point, to form a 2D
parameter plane constituting a section through the higher dimensional space, in
which the remaining critical point is set free and we can study the dynamics of
the Julia sets. The critical points can have one of four behaviors *adjacent *if they both fall into the same
attracting set, *bitransitive** *if each falls into the others basin, *capture *if one falls into the
periodicity of the other and *disjoint* if they have entirely separate basins of attraction. The *k* periodic regions of the infinite component differ in their
behaviours. For example the main light-coloured bulb in Per_{2}(0) in fig 7b has *adjacent* behaviour. Each successive
period 2 generation daughter reverses between this and *bitransitive*.

We thus fix the period of one critical and find a
parametric class of functions all of which preserve the periodicity. In fig 7b
are shown representative parameter planes Per* _{k}*(0)

The first is chosen to be the quadratic Mandelbrot set because it has fixed critical point zero and a super-attractor at infinity (the north pole of the Riemann sphere), leading to an infinite period one basin (enclosing the northern hemisphere) surrounding the Julia set.

In the period two case,
. In period 3,
using , giving the above equation, with critical points at 0 and
infinity. This provides symmetric Julia sets rather than the asymmetric
model based on
.

The symmetrical period 4 case is special because
it has a square root in the *c* parameter defining *f*,* *which
leads to a double split parameter plane, generating the two parameter planes shown
in the third row of fig 7b forming a “fermionic” loop where one cycle through
the elliptical cut in the centre of the each plane takes you to the
complementary plane. Together these planes cover all the period 4 locations on
the classical Mandelbrot set, as shown on the left. There is also a topological
homology between the Julia sets generated by Medusa and those generated by the
fermionic plane, as shown in the second and fourth rows of fig 7b.

The period 4 case is special because it has a
square root in the *c* parameter defining *f*,* *which
leads to a double-split parameter plane, generating two parameter planes shown
in the third row of fig 7b forming a “fermionic” loop
where one cycle through the elliptical cut in the centre of the plane on the right in fig 7b takes you to the complementary plane.
Together these planes cover all the period 4 locations on the classical
Mandelbrot set, as shown on the left. There is also a topological homology
between the Julia sets generated by Medusa and those generated by the fermionic plane, as shown in the second and
fourth rows of fig 7b.

Fig 7b: Top row: Periodic 2 and 3
slices and Julia set matings. Right: Two Medusa matings. The lower three rows show the split “fermionic” parameter plane Perf_{4(}0),
with Julia sets at the starred locations, showing topological homology with the
corresponding Medusa matings confirming the
techniques give conjugate dynamical systems.

Each parameter plane gives rise to complementary
Julia sets, in which a new phenomenon, called **mating** appears. You can think of a quadratic rational function as
the quotient of two quadratics, one of which has dynamics
which is dominant near zero with the other dominant near infinity. Because
the complement of a connected Julia set is a topological disc, two connected
Julia sets can be entwined together on opposite hemispheres of the Riemann
sphere. Consequently they can form complementary Julia sets “mated” together. Almost
any pair of connected Julia sets can be so mated except for those in conjugate
limbs of the Mandelbrot set. Thus we can see that the boundary of a mated Julia
set is penetrated by periodic basins, as well as having periodicities of its
own, just like the period 2, 3 and 9 basins in the first row.

The cubic Newton’s method map is
likewise the limit of a mating between two polynomial Julia sets of *z*^{3}-*z* and *z*^{3}+*az*^{2}. Any two quadratic Julia
sets can be mated via a rational function of the form *f*(*z*)=(*az*^{2}+(1-*a*))/ (*bz*^{2}+(1-*b*)) provided
they aren’t in conjugate domains of the Mandelbrot set, when the two cannot
form a Riemann sphere, so cannot mate in C.

The
**Medusa algorithm** to find a rational function, which mates two rational Julia
sets of any pair of external angles *p*/*q* and *r*/*s*, (Boyd & Henriksen 2012) uses the combinatorics of a spider consisting of a set of periodic
points and external angle rays in the orbit of the critical point *c*. A medusa consists of two spiders
forming northern and southern hemispheres of the Riemann sphere sewn together
along the equator.
*a _{n}, b_{n}*) defining in limit a rational function mating the
Julia sets defined by the two external angles. Note that if the coefficients give an infinite Julia se (initally black but with escape only off it becomes visible and unbounded), one can use (1-

Medusa can also generate matings involving dendritic Julia sets by using external rays with even fractions, as shown in the bottom row of fig 7b. Notice that 1/7 1/4 has an unbounded Julia set because the point at infinity is on a dendrite. One can also generate sets like 1/4 1/7 by selecting an appropriate c value in Per3(0). To generate sets like 1/7 1/4, we need to construct a pre-periodic parameter plane. In
fig 7b is shown the pre-periodic slice PrePer(2,1)
,

Finally it is possible to have equivalent matings of Julia sets generated from different periodic regions with differing external angles, such as 3/15 3/7 between satellite Mandelbrots has Julia sets which are simply rotated versions of those of
1/7 6/15 arising from period 3 and 6 bulbs. Other Julia sets which may appear to have a different topology may also be equivalent as shown in the following link:

**A more detailed comparison of the actual matings (pdf)**.

Fig 7c: Dynamics of the function with both finite and
infinite critical points.

**4500x5130 - 23 mega pixel jpg image** - **second 6000x5130 pixel jpg image**.

The slice
function
in fig 7c
demonstrates the dynamics when we have to take account of both the critical points
with zero derivative and those with an infinite derivative. Here we have
and since
, we can effectively use 0 and 1 as the critical points. Moreover,
we can see by swapping 0 and ∞ by
in both the
domain and range that , so the parameter plane of ∞ is simply the parameter plane
of 0 flipped in the *c* direction. This results in the
combined plane shown in (1), with the two individual planes in (3,4). The
combined plane forms a symmetrical figure 8 with pairs of bulbs running in two
series (2) in the interior of the black chaotic region, which consists of
points which fail to head to any attractor from either critical point.

Close
inspection however reveals that, the two, apparently symmetrical, sides differ. Superimposing the left and right for the
period-16 bulb (2i) shows that, although these overlap, there are key
differences. The expanded
superimposed period 13 and 16 bulbs (5,6) have clear patterns indicating
critical point interference. Intriguingly for the period 13 and 16 cases, the
bulb of 0 intersects both with regions of identical asymptotic period (13 or 16) in the bulb of
∞, and with *c* values where ∞ is pre-periodic, or chaotic and hence in the Julia set.

Note
the two critical points differ fundamentally in their behavior, because one is
a zero of the derivative which is not a solution of the
numerator and the other is simply a solution of the denominator. This
means that the Julia sets on either side have distinct dynamics.

In
the above cases, when a *c* value is chosen, where both criticals have the same asymptotic period, as in (7,8 *c *= ±0.995627+1.937037*i*) and (9,10 *c *= ±0.731013+2.280174*i*), (Rational fn 24 -3.1*, *parameter files in rational fig7c7, 9) the Julia sets on both sides,
although geometrically distinct, appear to be homeomorphic to one another and each is hence automorphic to itself,
by an inversion exchanging 0 and ∞, as indicated by a blow-up of the central
regions of (9,10) in (9b,10b).

However,
if a pre-periodic point is picked in a bulb on either side (if *c* is picked on the left* -c* will have precisely
the same effect and equivalent location on the right), the right-hand Julia
sets will be fractal to 0 as in (11) and the left-hand Julia sets will become unbounded
(fractal to ∞, as in (12). (13) & (14) show a value very close to the
intersection of the Julia arcs lower-right in (5), giving a right-hand Julia
with a double intersection very close to 0 and a left-hand Julia expanding
toward infinity with a double 13 period array, confirming the general picture.

Other
regions in the parameter plane either show non-inverting behavior (15,16) or
complementary exchange e.g. of a 1,3 and a 3,1 mating, as in (17,18).

*Functional Transcendence
*

Transcendental functions exp,
cos and sin expand the repertoire to include a variety of new phenomena. In fig
8 top row are (A) the escaping fronds of *f*(*z*) = *e ^{z}* +

Fig 8: Transcendental parameter planes and Julia sets.

The trigonometric functions sin
and cos are combinations of rotated complex exponentials, which are themselves
periodic in the imaginary direction e.g.
. By superimposing a positive and negative exponential we arrive
at a transcendental function with a chain of quadratic maxima and minima along
the *x*-axis and consequently the
parameter plane of
(5) looks almost exactly like a chain of copies of the cubic
function in fig 5 with corresponding two factor Julia set kernels as shown in
(6). Rather than isolated Julia sets as we see in polynomials we now have
networks of kernels connected by dendrites, or in a Cantor set arrangement. In
(7) we see the multiplicative Mandelbrot set and a Julia set of
, which displays combined quadratic and quartic dynamics and
in (8) Superimposed Mandelbrot and a
*c *= 1.5
+ 0.15*i*, which shows three different
kernel types in a chain.

.

Descending through the upper period 4 bulb of *c*(*z*-tan(*z*)).

To explore transcendentals with
both zeros and infinities, we now look for tractable functions involving the
tangent. The final example in (9) is the function , which has derivative and thus has
alternating zeros and infinities of the derivative. Applying the zero
criticals, we arrive at (9) which like the Herman ring example of fig 7, has
inward and outward pointing bulbs due to the singularities. Examples of Julia
sets (a-c) show the dynamics. Note that the actual periodicities of the bulbs
to the left and right differ although the parameter plane is symmetric because
the winding involves realising inversions in one half but not the other,
resulting in different 'spirograph' periodicities in the ascending periods.**rational
transcendental** functions. (13) shows the parameter plane and Julia sets of *f*(*z*)=*c*cos(*z*^{1/2}). Half-integer powers work seamlessly for the cosine
function because it has only even powers of *z. *The parameter plane and Julia sets of
are also shown in fig 10. * * (14) shows the logarithm *f*(*z*)=*c*log(*z*) which fractally splits the
complex plane, as do non-integer powers of *z*.

Dark Heart contains a series of
further examples to explore various issues with transcendental functions. For
example attempts to produce other kinds of critical points than those of fig 4
appear to fail because Fourier transforms, such as those producing square or
triangular waves in the limit converge to a real function on the *x*-axis. Also included are log function
examples, which are not defined on the complex plane, but on a Riemann surface,
requiring the plane to be cut in a way which results in fractal spits in the
Mandelbrot and Julia sets. A complex function implementation of the Collatz 3*n*+1 problem is included.

*The Ultimate Challenge: Zeta and L-functions*

We now turn to the most challenging functions of all, those defined by Dirichlet series, requiring analytic continuation using gamma functions and Mellin integral transforms to put together a complete picture. I have designed Riemann Zeta viewer to specialize in these functions, including Riemann zeta, and the related eta, xi and Dirichlet and other L-functions, running right to the limits of current analytical number theoury research. This runs in the same way as Dark Heart but with some additionally focused controls.

The archetypal and most famous
example is the Riemann zeta function shown in fig 9 - 1(a). This has a single
infinity at *x* = 1 due to the harmonic series , multiple (trivial) zeros along the negative *x*-axis due to the analytic continuation,
and a string of irregularly placed (non-trivial) zeros forming a kind of
Fourier transform of the primes along the critical line *x*=1/2.

The Riemann zeta function is
formally defined as either a sum over negative powers of the integers or an Euler product over the primes . But neither definition is convergent to the left of 1, but can be analytically continued to the entire complex plane, using the gamma function - a generalization of *n*!
=n(n-1)É3.2.1 - to derive the functional equation expressing
values for *z* < 0 in terms of those
for *z *> 1. This would enable us to
produce a portrait were it not for the fact that in the critical strip 0 < *z* < 1 the function is still
divergent, so we have to resort to a trick, which is to use the fact that the
Euler eta function converges for *z* > 0 because it is an alternating series and can be used
to represent zeta. So for zeta, we use eta to get zeta for *z* > 1/2 and use the functional equation to get 1 – *z* . i.e. *z* < 1/2.

Fig 9: Sample illustrations of parameter planes and Julia
sets of the Riemann zeta function.

In fig 9 1(a) is the zeta function showing
trivial *x*-axis zeros, non-trivial
on *x* = 1/2 zeros and the red infinity at *z* = 1. In (b) is the derivative of zeta showing the critical points. (c) shows the additive parameter plane
for the critical plateau *z* ~ 1000 showing sample Julia sets with the periods illustrated filling the right
half plane. In (d) is the multiplicative parameter plane is portrayed.

The four illustrations in (2) show the dark heart
at the end of the central valley for the critical point *z* = -17.3 along with a
sample period 3 Julia set, (3) the central basin with quadratic bulbs of
critical *z* = -15.33 and obvious cubic
interference similar to fig 5. (4) Details of the basin of the non-trivial
critical point around *z* = 1/2 + 95*i* exploring a satellite dark heart and
an associated period 3 Julia set, and (5) a dark heart in the singularity
island for the critical point *z* =
-13.29.

.

Explosions of the Riemann zeta Julia sets as c moves from -20 to 1

The images in fig 9 provide an
introductory view of the immense complexity of the fractal geography of Riemann
zeta, whose parameter planes and Julia sets involve an infinite number of
trivial and non-trivial criticial points whose critical values lie all over the
spectrum and whose localities are as varied as we can possibly find. The Julia
sets are dynamically responding to the dynamics of all the critical point, so
are as complex in their dynamics as the infinite collection of parameter
planes. The geography of the multiplicative zeta function is in many ways even more intriguing as shown in fig 9b.

Fig 9b: The
multiplicative parameter planes of the zeta function have many more surprises: (a)
As we move through the negative real criticals, the global parameter plane goes
through tectonic shifts in which the ocean in the right half plane becomes
drained with new landscapes emerging. (b) The first negative real criticals
near -2 to -13 have miniscule critical values, resulting in huge Mandelbrot
sets from the large *c *values
involved. (c, d) They also generate fractal Mandelbrots in the island generated
by the singularity at *z* = 1, and in
(e) we find more in the central basin. (f) The succeeding negative criticals
from -17 on have vast critical values giving Mandelbrot satellites pinched in
the vast coastline. (g) The boundary case -15 has a string of ‘jewels’ in the
crown of the central basin (1, 3). Finally the unreal criticals neighbouring
the critical line zeros, each have their own well-defined Mandelbrot
satellites.

For a full exploration of the zeta function see my monograph: Fractal Geography of the Riemann Zeta Function

The situation is even more complicated for other
zeta and *L*-functions , which may have higher degree Euler products and multiple
gamma factors and no eta function to smooth the critical strip, but here a
Mellin integral transform can be used in the central region.

Here for
illustration is the Mellin transform version of the Riemann zeta function
analytic continuation:

A full set for more diverse functional equations
used is included with the RZ flight manual.

Fig 12: Left to Right: Julia sets of Newton's method on the Dirichlet L-function (5,2) and Riemann xi function, a Hurwitz zeta function and a Davenport
Heilbron function, both with off-critical zeros, two Elliptic curve
L-functions merged using a C-script to produce the echelon modular forms and
the Dedekind zeta function of the rational extension field of x^{4}-x^{2}-1
with central region overlayed using Computel, and a fourth degree symplectic L-function

**Riemann Zeta Viewer** can portray virtually any zeta or *L*-function
which can be represented by analytic continuation via gamma factors and Mellin
transforms, including those of number fields, elliptic curves, and modular and
Maas wave froms on hyperbolic spaces.
Parameter files for all the known examples are included with the package. The
RZ flight manual illustrates the use of a third degree Maass *L*-function to generate Mandelbrot and
Julia sets.

Fig 10:
Dark Heart controls portraying

**Dark Heart Complex Function Viewer Flight
Manual**

Dark Heart allows you to interactively explore
the fractal dynamics of a wide variety of complex polynomial, rational and
transcendental functions.

See http://dhushara.com/DarkHeart/
for research, updates and source code.

DHViewer is a matched pair application with the
Riemann Zeta Function Viewer, RZViewer, which explores the corresponding
L-functions based on Dirichlet series rather than power series.

**Basics:**

**Drag a rectangle** to enlarge a portion of the current image.

**Click a point** to cycle:

Function > Mandelbrot > Julia(*c*)*

**c* at the clicked point on the
Mandelbrot set.

With ** keep scope** on Julia view
will take you back to the previous Mandelbrot screen to save computation time
and enable you to explore several related Julia sets in the region. It will
also retain scope on a reset to function mode. To return to full screen unclick
keep scope and reset twice.

By clicking, you can investigate the discrete
dynamical parameter plane (Mandelbrot set) of the critical values and the Julia
sets of *z=f*(*z,k,c*)
for (*x*,*y*)=*c*,
with *k* an additional parameter
associated with the power.

The additional parameter *k*
can be set to a value other than *k*=2 by using **Set R, I** in function mode. It
generally sets the exponent but for Sin(z)/z it sets the number of critical
points. For *c*Cos(*z*^*k*),
Cos(*z*^*k*)+*c*, one can set half-integer values such as
*k*=0.5
to get inverse quadratic cosines.

The controls all have ** floating help panes**
to guide you.

The window can be resized to suit in real time,
resulting in a refresh and recalculation, or set to full screen using the green button. Esc to return to windowed mode.

**Standard settings:**

**Threads** enables a multi-core machine to work faster
using as many threads as coprocessors.
** Max Iterations** gives how many iteration steps of a point
on the Julia or Mandelbrot set before maximum iteration cutoff.

**Menus:**

** About** gives a complete instruction summary.

**Advanced Settings:**

**Pop-up Menus:** ** Color schemes** can be changed in
real time using the color pop up menu. All the other controls require window
recalculation.

** A Variety of Functions** as discussed above can be explored using the
function pop-up menu.

The ** escape bound** can be set but
resets on function change to the one most appropriate for the given function. The

**Buttons and Text Fields:** Current window parameters and *c* values
can be read out from and written into the text fields and set by pressing the
appropriate button. Numbers in the
text fields are double precision and may appear in floating format e.g.
-7.000000186963007e-05 manifestly too large to see in their entirety in the
text box without dragging or selecting all and copying. The Julia *c*
values will be overwritten by the Mandelbrot critical point origin and current
Julia click point each cycle but can be manually re-entered as desired. You can use ** dF** as a computation of the derivative of the function to locate critical points as its zeros and then when you click twice and carry it to Julia with this

**Tick boxes:**
There is an imaginary axis ** orbit trap** option.

**Sliders:** ** Attractor
bound** adjusts the size of the epsilon neighbourhood testing for fixed
point or periodic attractors.

**Color Schemes: **There are several **colour schemes** for
function, Mandelbrot and Julia, which are useful at highlighting different
features:

**Function:** (0,4) rgb = logarithmic abs(z), blue cosine
abs(z), green ang(z). (1) rgb = real, imaginary and angle, (2) bg = abs(z) and
angle (3) rgb = real, imaginary and cos(angle).

**Mandelbrot:** (0) Sine wave colours (1) **Period-coded** colours that show the periodicities inside the dark hearts when ** Escape
only** is off. (2)

**Period
coding** in mode 1 gives escaping points tending to
real infinity shades of grey from white to black in waves by iteration number
in the same way as mode 4, giving clean exteriors, with periodicities coloured approximately by the following **1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18**mildly
shaded by iteration number. You need to **turn off escape only** and set the **attractor bound **e.g to** 10^-2** (default). When ** orbit trap** is set in Mandelbrot mode, it doubles the period search to 35 colouring the higher values in lighter shades mod 18, but
this will also slow the computation. In Julia mode periods always go up to 35.
With

**Attractor coded colours** in modes 2 and particularly 3 can distinguish each basin by color
in periodic Julia sets and when there are several attractors, such as in the **Newton's method**
iteration. Occasionally e.g. when you set the c values of a Julia set to
0 this may give a Moire pattern anomaly, due to undeflows of the angle, which you can suppress by
choosing a neighbouring non-0 point e.g. 0.01.

**Julia:** (0) Sine wave colours, (1) attractor coded colours as above, (2) RGB ranked colours, (3) rainbow with potential function on escaping points. (4) As 0 but with
square root behavior. Very good for highlighting boundaries and complex
dynamics. For example the classic quadratic Seahorse Valley Julia c = -.74543 + .11301i. (5) KBCGYRM colour rotation with W as above.

Fig 10b: Variety of parameter planes using the second menu function:* cz^m*(1-*z*)^*n*

**Functions:**

**
**

You can investigate a variety of functions, [1] *z*^*k*+*c*, [2] *cz^m*(1-*z*)^*n*, [3] *z*^*m*-*nz*+*c*, [4] (*z*^*m*-*n*)(*z+c*),
[5] Int(*z*^*m*-*n*)(*z*+*c*), [6] *z*^k+(*c*-1)*z*-*c,* [7] Newton's method on the previous function i.e. ((*k*-1)*z*^*k*+*c*)/(*kz*^(*k*-1)+*c*-1),
[8] cSin(1/*z*), [9] *c*Cos(*z*^*m*)^*n*, [10] Cos(*z*^*k*)+*c*, [11] *c*(Sin(*z*)+Sin(2*z*)/2), [12] *c*(Cos(*z*)+Cos(2*z*), [13] *c*Sin(*z*)/*z*, [14] *c(z^m)*e^(*z^n**)*, [15] *(z^k)e*^*z*+*c*, [16] Transcendental (see list below), [17] Rational (see list below), [18] *z^m-10qz^-p n=p.q *[19] *cz*^(*z+k**)*, * *[20] *c(z^3+(k-1)z^2-kz), *[21] *e*^(-*z*^k)+*c, *[22] Quintic, [23, 24] Herman
ring function, [25] generalized Collatz iteration, [26] *z^m+cz**^-n k=m+in *[27] *cCos**(z^m+z^-n), *[28] Milnor rational examples*
*,
[29]

Here is a function number list mapping to the
app menu.

function number Function menu

1-3 1-3

18 4

20 5

4-15 6-17

19 18

21 19

22 20

16 21

17 22

23 on 23 on

Some of the transcendental functions are
comparable with the gamma and zeta functions in Riemann Zeta Viewer. All but a
few of the functions are unique valued on the complex plane. Although cCos(*z*^(1/2))
has no branch cuts, all those implicitly involving log(*z*), including *cz*Log(*z*),
and *cz*^(*z*+*k*), do.

The function *z*^*m*-*nz*+*c*, can be used to
explore variations of the parameter planes as we move from *z*^*m*+*c*
by increasingly separating the critical points. *n* can be
either positive or negative, giving real or imaginary critical points in the
cases of *z*^*3*
± *z*.

The functions *z^m-10qz^-p
n=p.q* and *z^m-10qz^-p n=p.q *(listed at the end) are accessed by inputting k=[m,p.q] e.g. for *z^3-2z^-1* we input *k* = [3, 1.2]. You can also input negative values
for *p* e.g. to get *z^3-z^4 *we input *k* = [3, -4.1]. Some functions might look more
interesting with small values of *q* which bring the parameter planes into
intersection.

*1* *(z^n)e*^*z*+*c,
*

You can input positive or negative values for
k into *(z^k)e*^*z*+*c*. The value n=0 has only the exponential plateau at x=-1000 as critical and
n=1 has this and the other critical at x=-1 as criticals so you can see the
effect of both together in mode 1. To turn off and see the Mandebrot bulbs
select dF to get only x=-1 critical.*
*

*1* *c(e*^*z-1),*

*2 z*Log(*z*)+*c*,

3 *cz*Log(*z*),

4 *z*^*z*+*c, *

* 5 cze(-e^z)*,

* 6* *z=z*e^(-e^z)+c, *

* 7 z=(z^2-2z+2)*e^z*c, *

* 8 z=(z^3-3z^2+6z-6)e^z*c*

* 9 n=1..4 step triangle wave sum[j=0..n] cos((2j+1)z)/(2j+1)^2 *c*

* 10
n=1..4 step square wave
sum[j=0..n] (-1)^n cos((2j+1)z)/(2j+1)
*c*

* 11
-log(cos(z)*c *whose derivative *tan(z)* has both zero and infinite criticals.

*12 (tan(z)-z)*c
*whose derivative *(tan(z))^2*
has both zero and infinite criticals

*13 (z-tan(z)+((tan(z))^3)/3)*c *whose derivative *(tan(z))^4*
has both zero and infinite criticals.

*14 z-atan(z)+c*

* *Rational (k = (m,n))

* *

* 1* *z^2-1/nz*c, *

* 2 ((z^3-1)/(z^2-1))^2+c, *

* 3 (z^6-1)/(z^4-1)+c, *

* 4 *Int(z^3(z+1)(z^2-1))+c,

5 *((z^3-1)/(z^2-1)) ^2*c, *

* 6 (z^n-z)*c,*

* 7-8 *Peterson graph zeta function and reciprocal (*+c * **c 0*/1)

*9 1/(z^2-c2)+c *(Milnor)

*10 2z^3/(27(2-z))+c *(Milnor)

Rational
PrePer(2,1) Needs scale=200 Esc only off Esc Bd =10^4

*11 0 1-8*(c+8)/(c-8)*(1/z-1/z^2)*

Rational Period 1 mating *11 1 *Per1(0) *z=z^2+c *

Rational
Period 2 matings *11 2, 2.5 *Per2(0) *z=c/z/(z+2), z=(z^2+c)/(z^2-1)*

Equivalent
symmetric Julia representations

Rational
Period 3 matings. *11 3, 3.5 *Per3(0)* z=(z-1)(z-c/(2-c))/z/z, z=(z^2+c^3-c-1)/(z^2-c^2)* *
*

Asymmetric
and symmetric Julia reps.

Rational
Period 4 matings. *
*

*11 4, *Per4(0) *z=(z-c)(z-(2c-1)/(c-1))/z/z, *Asymmetric.*
*

* 11
4.5, 4.75 z=(z*z+((c-1)±sqrt(5*c*c-6*c+5))/2)*(1-c*c)-1)/(z*z-c*c) *Double
plane symmetric Julia reps.

*12 z^2+exp(2*pi*i*c)z* Explores boundary of quadratic central
domain c=n e.g. n=0.618034

* 13 z^3-3cz+sqrt(4*c*(c+0.5)^2) *Cubic Per1(0)*
*

*14 2z^3/(3c-2)-3cz^2/(3*c-2)+1 *Cubic Per2(0)*
*

*15 z^3+cz^2+z*cexp(2*pi*i*n) *Cubic exp(2*pi*i*n) e.g. n=0.618034
(Reset on 15)

* 16 (c^3-c+1)/(c^2(c-1))z^3-(c^4-c+1)/(c^2(c-1))z^2+c * Cubic Per3(0)

* 17 (c^2-1)/(c^2)z^3-(c^3-1)/(c^2)z^2+c *Cubic PrePer(2,1)
0>c>1>1

* 18 1/c/(c-1)(z^3-z^2)+c *Cubic PrePer(1,2)
0>c>1>c

*19 0,1,2,3** *Cubic PrePer(2,2)
0>c>1>d>1, *4 *same as 17, *5 *equivalent to 18

*20 0,1,2,3** *Cubic Per4(0)
0>c>1>d>0, Four split parameter planes

When **dF** is **on** the particular split plane is chosen, with its Julias.
**dF** is **off** a superimposed plane is generated. If you start with n=0 you can then click through the four Julia sets

by turning on **hold** after the first and pressing **Set R,I **after each click to retain
the original location.

* 21 0,1 * Cubic PrePer(1,3) Two split parameter planes

Per 1(0)
is *cz^2(z-1)= c(z^3-z^2)* (Fn 5 with k=0. Equivalent to Fn 2 with *z* > -*z*)

PrePer(1,1) 0>1>1
is *cz^2(z-1) +1 *(Equivalent to *c(z^3-2z^2+z)= cz(z-1)^2 *1>0>0, Fn 5
with k=-1, since the two iterations commute under [c,z]->[c,1-z])

Parameter
files for Per1(0), PrePer(1,1)
are included in the quintics folder.

* 22 c^2(2c-3)/(3-3c)*(z*z*z-z*z)+1/c Critical 0 -> 1/c -> crit 2/3.*
*.*

* 23 c(z+0.5/z^2) *Similar to Newton's example with rotational symmetry.

There
is a similar example Mandel1 in Milnor. Both use mode 3 to effect.

*24 (z^2+10qc^p)/(z^2+c) n=p.q>=0,
(z^2-10qc^abs(p))/(z^2+c) n=p.q<0
*

* *E.g. (24,-3.2) is *(z^2-2c^3)/(z^2+c)
*

**Matings** are rational function Julia sets which have
complementary components consisting of two types of quadratic Julia set fractally
intertwined. The above rational examples Per*k*(0) define parameter planes of
quadratic rational functions with the critical point having a fixed period but
the other one free. The Julia sets of these exemplify matings of the root Julia set of periodicity *k *with
the spectrum of Julia sets defined by the other critical point’s *c* values in the parameter plane. A broad palette of precompiled Medusa
mating parameter files are included in the matings folder which upload to the **Mating** function *f(**z)=(az^2+1-a)/ (bz^2+1-b)* where *a* and *b* are input as
coefficients in the file. These allow one to use the Medusa algorithm to define
the rational function mating the Julia sets having two fractional external
angles p/q and r/s. **Medusa** is included
with Dark Heart, with source code, as a command line tool which can be run from
Mac Terminal by typing “./mating”. The final output of
this once convergence is reached can be portrayed in Dark Heart by entering them
into the *c*-script mating.c, or pasting the coefficients into one of the example parameter files. Medusa is consistent with the **symmetric** representations of Per*k*(0)

By saving and adjusting the coefficients and
powers of c in the test file, and reloading, you can portray parameter planes
and Julia sets of **any polynomial up to degree 5**. The application will
automatically find the critical points up to degree five. The application comes
preprogrammed with a sample quintic *f*(*x*)=*x*^5-3.25*cx*^3+2.25*x*+*c*
to illustrate how to program different parameter planes. This will be overwritten on loading a
saved parameter file. You can use this to replicate several parametrizations
e.g. *z*^4+(*c*-1)*z*-*c*
can be cloned as* z*^4-*sz*-1+*s*, *s*=1-*c*. See
parameter file contents below for details.

**Newton's method** on the *k*-th roots of unity shows how seeking for the roots of a function by iteration can leave behind a chaotic boundary set where the iteration can’t reach the attracting roots. To see the standard Julia set of the roots of unity, insert the value (0,1) into Julia mode, since *c *= 1 gives z^*k*+(*c*-1)*z*-*c *= z^*k*-1.* If* this is run in attractor coded modes 3 (or 2) the basins are individually colour coded. For *k* = 3 in RZ 2.0.6 you can set the imaginary part to -1 to get the repelling version. Higher powers don't work here because the forward Newton’s method has critical points determined by *z*=0 and the *c*-displaced roots of unity, since the derivative of *g*(*z*)=*z*-*f*(*z*)/*f* '(*z*) is *g*'(*z*)=*f*(*z*)*f* ''(z)/(*f* '(*z*))^2, and the super-attracting displaced roots have infinite parameter planes and can be ignored, but the inverse repelling process gives *g*'(*z*)=2-* f*(*z*)*f* ''(z)/(*f* '(*z*))^2, whose 2*k*-2 degree equation can be solved only for k ≤ 3. This dynamic is almost entirely repelling except for Julia kernels determined by the small isolated Mandelbrot islands.

The **Herman ring** in *cz*^2(*z*-4)/(4*z*-1) is a famous special rational function case with an
irrational annular flow for Julia sets for which c= exp(i*g*pi/2) = 0.564635 +
0.825341i, or c= exp(i*g*pi)= -0.3624 + 0.9320i where g = (5^(1/2)-1)/2 the
Golden Mean. Choose **colour mode
5 **and have **escape only **turned off and input the precise numbers into
Set R/I and you can see the rotation pictured in cosine of the velocity. You
can adjust the effect for different rotation rates using the **escape bound**
slider.

You can view the Herman ring system in two
configurations, making Mandelbrot sets for each of the two parametrizations *cz*^2(*z*-k)/(1-kz)
and *kz*^2(*z*-c)/(1-cz). If you switch from the second
function to the first just before clicking a point in Mandelbrot mode it will
retain Mandelbrot mode, save c as k, and allow you to input the second
parameter c by clicking. You can see the k=m,n values in Set R, I in function
view. A further click takes you to the *k*, *c* Julia set.

Similarly to the Herman ring, the standard
quadratic function *z^2+c *has Julia
sets with irrational flows on Siegel discs between all the fractal bulbs on its boundary for
example at c = -0.390541-0.586788i , which is a solution of the cardioid c=exp(ig2pi)/2-exp(ig4pi)/4
for g = (5^(1/2)-1)/2. You can contrast this with the period 3 parabolic petals
on the boundary of the cardioid c=-0.125000-0.649519i which clearly shows it is
in transition between period 1 and 3 at 1024 in mode 1. The 20 leaf parabolic
Julia set c = .27334 + .00742i shows its leaves on mode 5 with escape bound
10^3 at 4096 iterations.

A
series of C-script examples of rational parameter planes are also provided
under the **Milnor** function option which explores the iterations *z* > 1/*c*(*z*+*r*.*c*+*s*+1/*z*)
and its dual *z* > *r*/(*c*-*s*)(*z*+*c*+*s* +1/*z*).

One
can use *z*^*m*-*nz*+*c*, and (*z*^*m*-*n*)(*z+c*) in modes 3, 6 or 7 with orbit
trap selected to explore **moduli spaces** of these Mandelbrot sets, as they
have dihedral symmetries. Two c-values c1 and c2 of such functions are
conjugate under a Mobius transformation f(z)=(*az*+*b*)/(*cz*+*d*)
if and only if *c*2=*w***c*1 with *w* an *p*-th root
of 1 (*p=m*-1 in the former case)* *where the symmetry is by an *p*-th
of a revolution. Hence we can take equivalence classes of such *c* to form
a new complex plane *C*=*c*^(1/*p*), displaying each equivalence
class and its conjugate, which fully classifies the resulting Julia sets up to
rotations by 2*pi/*p*.

One
can also use *z*^*m*-*nz*+*c*,to explore the **Mandelbar** equivalents conj(*z)*^*k*-*nz*+*c* , by inputting *k*=(*m+100*,*n*) for *m* a positive integer
≥ 2. The classic **Mandelbar** is conj(*z)*^*2*+*c* , which you will get by setting *k*=(102,0).
**moduli spaces** option gives *C*=*c*^(1/(*m*+1))
for *n*=0 but for *n*≠0 the Mandelbrot set now only has symmetry by *x* and *y* reflection, so we have to assert a reduced symmetry equivalence
class.

The **Collatz** system gives you the complex
generalization of the 3*n*+1 problem *n* -> *n*/2 if *n*
is even or n -> 3*n*+1 if *n* is odd (or (3*n*+1)/2 for k=2,
since this saves one step. This is generalized to (*cz*+1)* *(k=1 for
c=5,7,9)

(*z*/2)Cos^2(pi*z*/2)+((*cz*+1)/*2*)Sin^2(pi*z*/2)

and shows why although all positive integers in
the 3*n*+1 problem eventually end up in the 3-cycle 4>2>1 for
complex values we have fractal chaos.

Set **k** using** function view** and
then **c **using** Julia view**. (k,c) = (1,3) and (2,3) give the
standard and reduced Collatz sequences as above. You can also set 5*n*+1
and 7*n*+1, which give both periodic and chaotic escape to infinity for
given values.

You can use color mode 1 to check the periods
of the **Collatz (3 n+1 n odd n/2 n even)**
iteration. Set up the Julia iteration as above, and set color

The function *z*^*m*+*cz*^-*n* gives symmetrical
Mandelbrot sets with unique Julia sets of three types, Cantor set (Fatou dust)
of points, Cantor rings (simple closed curves) and Sierpinski curves (fractal
Swiss cheese). The function and Julia sets have *m*+*n*-fold
rotational symmetry while the Mandelbrot set has (*n*-1)-fold symmetry,
despite there being *n*+*m* free critical points.

The final function is the zeta function of the
Petersen graph, a degree-24 polynomial with multiple critical values, giving
high order Julia sets. The parametrizations of both *cPetersen
* and *Petersen+c *are given for comparison (k=0 inverse +c k=1 inverse *c k=2 original +c k=3 original *c ). You need to have escape only turned off for the last two.

You can investigate the Rieman Zeta function
and a variety of other zeta and L-functions using Riemann Zeta Viewer which is
designed to deal with these advanced functions.

** Parameters Text file format:**
[0] mandel (2=function, 1= Mandelbrot, 0=Julia), [1-5] Scale, X, Y, (Fn k J/M c) R, I, [6] the current function, [7] escape type (abs real or imag), [8] orbit trap (0/1) + 2*dF + 4*mval (0=use std crits / 1=use input crit), [9] escape only (0 or 1), [10] color scheme (0 to 3), [11] escape bound (exponent 10^n), [12] attractor radius epsilon bound (negative exponent 10^n), [13] maximum iterations, [14-15] real and imaginary values of k, [16] previous function [17] dummy 987.654321 so you can find >> [18-29] complex coefficients

Two C-scripts are provided to explore polynomials. The C-script crits.c will generate any polynomial up to degree 5 from its critical points, scaling and rotating these together as required, enabling one to generate examples with arbitrary criticals in a given position. The script coefs.c provides an easy way of setting up an arbitrary polynomial up to degree 5 from its coefficients and parameter plane c values. See additional software for scripts below.**Milnor** function
option.

** Movie Sequence Formats:** The text file consists of series of floating
point numbers. (1) File format 1-3 (2) N<=1000 number of frames (3) 1/0
Mandelbrot/Julia followed by a sequence of frame parameters [ X, Y, Scale
CX, CY].

The file moduli8.c illustrates an extreme geometric scaling blowup using scientific notation fprintf("%e") rather than the 6 decimal point precision of fprintf("%f"), which can be used in any of the other c-scripts as well.

*Ultra-large images:** The file 'large.c' in the rational folder
enables the generation of very large Julia and Mandelbrot images suitable for
poster size displays. The script can be adjusted to generate a set of tiles in
the standard window size of 750x513 using a set of image parameters you have
saved as a parameter file. A file 'page.png' is also included in the folder, which
forms a white background 7500x5130, which can be opened in Preview. You can
then paste each of the tiles into the large page to get an expanded size image,
by choosing actual size and pasting and lining them up carefully. An app to do this
automatically is in development..*

A series of movie scripts to generate the movies of the cubic separations is included with a manual of how it was created to give an example of using Dark Heart to generate trajectory variations in the field of view as satellite Mandelbrots or Julia parameters change in non-linear ways. The file moduli8.c illustrates an extreme geometric scaling blowup using scientific notation fprintf("%e") rather than the 6 decimal point precision of fprintf("%f"), which can be used in any of the other c-scripts as well.

**Associated Files**

Along with DHViewer are sample projects to show
file handling:

1. Load Parameters for z^5-z^4+z^3-cz^2+z-c to
see an example of a Mandelbrot plane of an arbitrary 5th degree polynomial

2. To generate a movie sequence sample:

(a) Load Parameters for z^3-z+c.txt

(b) Load Movie Seq cubic.txt

(c) Save Movie to an empty folder get a 500 frame Julia movie sequence.

3. To generate an 8 frame sample movie using
Format 3:

(a) load test.txt

(b) Save Movie to an empty folder to get an 8 frame evolution of

cz^(z+k) defined by parameter files
test0.txt-test8.txt

4. Four template movie sequence files are
included in movie C-scripts. You can run the sample files from Terminal as
shown in each file header. This is a fully programmable interface which
provides a template for much more powerful movie making.

**Additional Software for
Scripts and Movies**

Movie frames are in tiff images which can be turned into Quicktime movies with Quicktime Player pros 7's open image sequence option, or using Mpeg Steram clip, which is included with the package. If terminal doesnÕt recognize the gcc command, open an Apple Developer account (free) and install Mac OSX Command Line Tools for your system from https://developer.apple.com/download/more/

Fig 11: Rieman Zeta Viewer
controls portraying a degree-3 Maass form *L*-function.

**Riemann Zeta and L-function Viewer Flight
Manual**

**Riemann Zeta Viewer** allows you to interactively explore the complex **Riemann zeta function**:

*Zt*(*z*)=Sum[1,°](1/*n** ^{z}*)=Xct[

a host of its **Dirichlet** ** L-function**
variants and their transformations and those of a diverse spectrum of abstract
zeta and

RZ operates in the same way as Dark Heart
viewer, but has some additional controls, so we will go through the manual from
scratch for completeness.

By clicking, you can investigate the Mandelbrot
set of these functions for a variety of critical values, and the Julia sets
of *z=f*(*z*)+*c* (or *z=cf*(*z*)) for (*x*,*y*)=*c*.

You can also investigate related functions eta,
xi, the derivatives of each function and Newton's method (see below).

By uploading the provided parameter files you
can also investigate abstract ** L-functions of elliptic curves**,

**Basics:**

**Drag a rectangle** to enlarge a portion of the current image.

**Click a point** to cycle:

Function > Mandelbrot > Julia(c)

at the clicked point *c* on the Mandelbrot
set.

Clicking the Julia with ** keep scope**
on will take you back to the previous Mandelbrot screen to save computation
time and enable you to explore several related Julia sets.

The controls all have ** floating help panes**
to guide you.

The window can be resized to suit in real time,
resulting in a refresh and recalculation, or set to full screen using the green button. Esc to return to windowed mode.

**Standard settings:**

**Threads** enables a ual, or multi-core machine to work
faster using as many threads as coprocessors. ** Max Iterations** gives how many iteration steps
of a point on the Julia or Mandelbrot set before maximum iteration cutoff.

To facilitate locating critical points for
calculating Mandelbrot sets, tick ** dZ** and explore the derivative
function for a critical point (a zero of the derivative looking like a dimple).
Use dragging to blow up to high resolution. Tick

To facilitate fast fractal iteration, the
default is 100 function series terms and a cutoff of 64 iterations for each
point of the Mandelbrot and Julia sets, but these can be adjusted for greater
accuracy.

**Menus:**

** About** gives a complete instruction summary.

**Advanced settings:**

**Pop-up Menus:** ** Color schemes** can be changed in
real time using the color pop up menu. All the other controls require window
recalculation.

** Functions** related to zeta, including eta, xi, gamma, psi
and others discussed below can also be explored using the function pop-up menu.
For completeness, an

**Buttons and Text Fields:** A ** function terms** text field is
provided to set how many terms are calculated in the chosen sum or product
function, with a default of 100 for speed of initial exploration. This can be
adjusted to exact large values which have anomalous behavior (see end). Current

**Tick boxes:** ** dZ** finds the approximate formal derivative
of any function being displayed. Good for finding critical points since these
are the zeros of the derivative. It works only in function mode. For fractals
use dZeta or dXi. You cand get the second derivative approxiation by combining
the two.

**Sliders:** ** Attractor
bound** adjusts the size of the epsilon neighbourhood testing for fixed
point or periodic attractors.

**Colour Schemes:** There are several **colour schemes** for
function, Mandelbrot and Julia:

**Function:** (0) ** Absolute-Angle mode** rgb =
red logarithmic abs(z), blue cosine abs(z), green angle(z). This is the most
informative although not the most appealing (1)

**Mandelbrot:** (0,5) Sine wave colours, (1) Attactor coded
colours, giving escaping points tending to real infinity shades of grey from
white to black in waves by iteration number with periodicities coloured
approximately by the following **1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 **mildly shaded by iteration number. You need
to **turn off escape only** and set the **attractor bound to 10^-2**
(default). (2) RGB ranked colours (3) Potential function rainbow. (4) attractor coded inverse quadratic.
(Highlights geometrical details lost in high iteration numbers). (5) Attractor
coding giving escaping points tending to real infinity green through orange and
points remaining finite coloured by decreasing blue by iteration, combined with
redness corresponding to the attractor period. When ** R- escape** is set in mode 1 it doubles
the period search to 35 colouring the higher values in lighter shades mod 18,
but this will also slow the computation.

The 'critical' point for the Mandelbrot set is
chosen to represent a prominent critical landmark. For zeta, eta, mu, and sigma
it is chosen to be 1000 corresponding to the limit *f*(*z*)>1 as
real(*z*)>+°. For gamma it is 1.465. For Xi it is 0+ki, k=0.00000001~0.
Other critical points can be chosen using the advanced settings and inputing CX
CY values under Mandelbrot mode, just as c values can be inserted for any Julia
set. A list of critical points for zeta eta and xi is provided below, or can be
approximated using the values of
observed zeros of dzeta etc. You can also input CX and CY in function mode to
generate a transform of the function, whose zeros are at the fixed points of
the critical values [f(cv)-v=0 or f(c+v)-v=0] and hence candidates for being in
Mandelbrot kernels of the critical points.

You can flip easily between Mandelbrot mode and
transformed function mode using 'keep scope on click'. To exit reset. This can
potentially find a finite number, out of the infinite collection of kernels,
but sometimes the one located is vanishingly small, leading to blowing the
mantissa of the floationg point doubles before we reach it.

Not all the functions have meaningful
Mandelbrot sets. The zeta attracting fixed point is at -0.2959050055752.

**Julia:** (0) Sine wave colours, (1) Attractor coded
colours, (2) RGB ranked colours, (3) Rainbow with potential function on
escaping points. Colour coded Julia attractors have blue shaded to escaping real, red shaded to periodic
attractor, green non-negative periodic attractor, with grey indeterminate. The
red and green are tinged with blue to indicate the period. (4) Attractor coded inverse
quadratic. (5) Attractor coded with RGB mapping.

For exploring the higher zeros of zeta, a high
number of series terms can be set using the slider. Values of the RZ function
outside the critical strip [0,1] are set to 0 after y=±450i because the sin/cos
component of the analytic continuation overflows to Inf. This leaves the zeros
in the critical strip still well rendered up to values in the millions with the
highest number of zeta iterations set in the slider.

**The Functions:**

The package is designed to facilitate research
into the **widest spectrum of zeta-related and L-functions possible**. Each of zeta, eta and all the
L-function variants

**Zeta **

Zt(*z*)=Sum[1,°](1/*n** ^{z}*)=Xct[

Zeta is represented here in terms of Eta as:

* *Zt(*z*)=*E*(*z*)
/(1-2* ^{1-z}*) for real(z)³0

and by analytic continuation using:

Zt(*z*)=2((2pi)* ^{z-1}*)cos(pi(1-

http://en.wikipedia.org/wiki/Riemann_zeta_function

**Eta** *E*(*z*)=Sum[1,°]((-1)* ^{n}*/

* E*(*z*)=(1-2* ^{1-z}*)Zt(

Used to extend Zeta from real(*z*)>=1
down to real(*z*)>=0.

To access it set L(m,n)=(1,-1).

http://en.wikipedia.org/wiki/Dirichlet_eta_function

**Dirichlet L-functions**

*DL*(*z*)=Sum[1,°](*X*(*p*,*q*)/*n** ^{z}*)

where X(p,q) is the qth set of Dirichlet
characters of period p.

Enter p=Xm and q=Xn into the L(p,q) text
field. Each of the other variant
zeta functions can be applied to any of the L-functions as well as zeta and
eta. The viewer calculates the finite residue groups *Z*/*Zn*
generating the characters, factors both for sub-periodicities and for
conductors, and then applies the correct functional equation and prime
multiplicative factors to give the full representation on the complex plane. A
Mellin transfor is performed in the central basin to improve fidelity.

A Terminal C-script is included with the
application files which shows how a given character cast X(m,n) is generated and reduced to its
primitive form.

**Abstract zeta and L-functions**

Examples such as those of elliptic curves, number fields and
modular forms can be uploaded by including their coefficients and functional
equation parameters in the appropriate file format and viewing as raw/abstract.

A suite of preloadble cases is provided in the
files along with the Terminal C-scripts which generated them and Computel PARI-GP
and Sage scripts which generated the Dirichlet series coefficients. Some of the
examples (particularly the field extensions) display convergence problems in
their critical strip similar to naked Riemann zeta , requiring a Mellin
transform treatment as is done for Dedekind/Hecke functions, but many of the
elliptic curve and the modular form examples give quite accurate portraits. A
working copy of PARI-Computel is included with RZViewer, so all the examples,
except for the modular form coefficients, can be generated without use of Sage.

**Gamma** G(z) the compex number extension of integer
factorial *n*!

By default, the Lanczos approximation is used:

http://en.wikipedia.org/wiki/Lanczos_approximation

or alternatively the product formula

G(z)=Xct[(1+1/n)* ^{z}* /(1+z/n)]

with *n*=10^*k* terms if **alt gamma**
is set to a non zero value.

http://en.wikipedia.org/wiki/Gamma_function

**Xi/xi **X(*z*) = (*z*-1)*G*(*z*/2+1)pi* ^{-z/2}*Zt(

This is now included for every function
possessing a functional equation,

including abstract *L*-functions, by
selecting in the Xi tickbox.

The unction provides a symmetrical presentation
of the zeros on x=1/2.

http://en.wikipedia.org/wiki/Xi_function

The xi functions of Dirichlet L-functions are
also included, as well as the

equivalent singularity bearing Xi function of
zeta for Xm=1 Xn=0.

Note: Xi is rotated so the zeros are on the critical
line, rather than the real axis.

The following set of derived zeta functions all
work also for any L-function.

**Mu** *M*(*z*)=Sum[1,°](mu(*n*)/*n** ^{z}*)

* M*(*z*)=(1/*Zt*(*z*))

The ** Mšbius** function mu(

http://en.wikipedia.org/wiki/Mšbius_function

**Sigma** *S*(*z*)=Sum[1,°](dvs(*n*)/*n** ^{z}*)

* S*(*z*)=Zt(*z*-1)Zt(*z*)

The ** divisor** function dvs(

* S*[*k*](*z*)=Zt(*z*-*k*)Zt(*z*)

gives dvs{k](n)=Sum(d^*k *: *d*|*n*).

http://en.wikipedia.org/wiki/Divisor_function

**Lambda** *L*(*z*)=Sum[1,°](Lam(*n*)/*n** ^{z}*)

* L*(*z*)=(-Zt* *'(*z*)/Zt(*z*))

The ** Mangoldt** function Lam(

http://en.wikipedia.org/wiki/Mangoldt_function

**lambda** *l*(*z*)=Sum[1,°](Lio(*n*)/*n** ^{z}*) = Xct[

* l*(*z*)=Zt(2*z*)/Zt(*z*)

The ** Liouville** function lam(

http://en.wikipedia.org/wiki/Liouville_function

**Phi** *H*(*z*)=Sum[1,°](tot(*n*)/*n** ^{z}*)

* H*(*z*)=(Zt(*z*-1)/Zt(*z*))

The ** totient** function tot(n) =
no.of positive integers

http://en.wikipedia.org/wiki/Totient_function

**dGamma**, **dXi **and **dZeta** are the
derivatives *G*'(*z*), *X*'(*z*) and *Zt *'(*z*)
or any of the L-functions in zeta with xm and xn set. You can also perform an
approximate formal derivative of any function at all using the ** dZ** tick box to loo for critical points to
source Mandelbrot sets, but this is active only in function mode. To see
fractals of the derivative function use

**NewtonZ**, **RepellngNZ** and **NewtonX** are the Newton's method functions for
zeta, and xi.

*NZ*(*z*)=*z*-Zt(*z*)/Zt '(*z*), *NZ*(*z*)=*z*+Zt(*z*)/Zt '(*z*)

They are provided because they naturally relate
to the zeros.

**zZeta** is included to demonstrate the periodicities
in the multiplicative parameter plane

**zetaprod** is the product version of zeta or any L-function

Xct[*p* prime](1/(1-X(m,n)*p*^{-z})), which is technically defined only for real(*z*)>1,
included for comparison with zeta the analytic continuation version above. Zetaterms adjusts the product terms in
the same way as with zeta.

**primeZeta** is the function

*Zp*(*z*)=Sum[p
prime](1/*p** ^{z}*)=Sum[1,°] (mu(

where mu is the Mšbius function (see above). It
is included for completeness. It is defined only for real(z)>0.

**Dedekind/Hekke L(m) **Explores the Dedekind zeta and Hekke *L*-functions
of the field extnsion of *Q* to include the Gaussian integers *Z*[*i*]
= {*a*+*ib*) *a*,*b*, in *Z*}

L(z,*l*)=Sum[(m,n)(0,0)
°]X(m+in)/(4(m^2+n^2))=Xct(1/(1-X(p)/(4(m^2+n^2)))

X(a)=(a/conj(a))^*l*

Enter *l* into *Xm.* *Xn* has no
effect. These functions have a Mellin integral transform in the critical
strip 0 < *x* < 1, for
small *y* for |*Xm *| <10.

**abstract/raw zeta/L** is a direct computation of Sum[1,°](X(m,n)/*n** ^{z}*).

Used from saved parameter files it can also be
used to generate abstract

zeta and *L*-functions, including those of
elliptic curves and modular forms with varying functional equations and gamma
factors. See the section on uploading parameter files and the installation file
set for examples of each.

**Davenport **consists of a finite collection of zeta
functions which have a similar functional equation, but (5,1), (5,2) and (7,1)
have no Euler product. (5,1) is the Davenport-Heilbronn zeta function which has
occasional zeros off the critical line, e.g. at *.*808517 + 85*.*699348*i,
.*650830 + 114*.*163343*i, .*574356 + 166*.*479306*i, .*724258
+ 176*.*702461*i. *(5,2) and (7,1) also have interesting off line
zeros. The remainder: (2,1), (2,2), (3,1), (3,2), (3,3), (4,1), (4,2), (6,1),
(6,2) and (8,1) are derived functions of Riemann zeta and Dirichlet *L*-functions.
In addition (1,*n*) gives (5,4)**n*/1000+(5,5)*(1-*n*/1000) a linear combination of two zeta/L-functions with
the same functional equation with zeros off-critical. (9,*th*) gives a functional combination

{0,1,tan(*th*),-tan(*th*),-1}=(sec(*th*))/2[DL(5,4)*e*^(-*i
th*)+DL(5,2)*e*^(*i th*)]

which equals (5,1) at *th*=100 and (5,2) at
*th*= -468. [-*pi pi*] = [-567 567].

As this function writes and reads DL
information from memory, threads are set to 1. A
gif file of the definitions of these functions is in the attached files.

**theta** is the Riemann-Siegal theta function

Th(*z*)=log(G((1+2*zi*)/4)-log(G((1-2*zi*)/4)-*z*log(pi)/2

**RSZ ** is
the Riemann-Siegal Z function

Z(*z*)=exp(*i *theta(*z*))Zt(1/2+i*z*)

**Hurwitz** zeta functions *H*(*z,a*)=Sum[1,°](1/(*(n+a)** ^{z}*) generalize Riemann zeta.

*Xm, Xn* provide *a*=*Xn/Xm*, (*Xm,Xn*)=1
*Xn<Xm*. These also have unreal zeros off the critical line. *H*(*z,1*)=Zt(*z*),
*H*(*z,1/2*)=(2^z-1)Zt(*z*),

*H*(*z,p/q*)= (*q*^*z*)Sum[1,*q*](conj(*X*(*p*))*DL*(*q*,*p*))

As this writes and reads DL information from
memory, threads are set to 1.

**zeta-z **enables one to explore the behavior of the
atrtracting fixed point of zeta

**pi^(-z/2)*zeta** gives a function demonstrating all zeros are
simple of first order as Z(z)=pi^(z/2)Prod[1-z/r]/(2(z-1)Gamma(1+z/2)),
r non triv 0

**Psi** (Digamma) *P*(*z*)=G'(z)/G(z) the logarithmic derivative
of gamma

http://en.wikipedia.org/wiki/Digamma_function

**Bitmap **imported bitmap to display (see below)

**Power Series **gives the power series
*P*(*z*)=Sum[1,°](*a*(*n*)*z^n*)
corresponding to the Dirichlet series *L*(*z*)=Sum[1,°](*a*(*n*)/*n^z*) either
of character *Xm*, *Xn* or uploaded as a coefficient set (see below).

**Fourier** does the Fourier series viz *F*(*z*)=Sum[1,°](*a*(*n*)exp(2pi*nz*)) either of character *Xm*, *Xn* or
uploaded as a coefficient set (see below).

Both the two above functions are useful when
examining modular forms which are expressed as Fourier series in the upper
half-plane or as power series in the unit circle. By selectng ** Escape Only**,
you can set the areas where the functions are formally undefined to black. By
also selecting R- escape, you add 1 to the result which enables loading an
Eisenstein series leaving out its leading 1 in the same way as an L-function so
that one can do a Fourier or Taylor portrait of all the components of a modular
form space.

1/(k^z) and 1/(1-k^-z) etc. give sum and
product component functions input by k=function terms.

**Weierstrass** plots a Weierstrass modular function using the
first two complex coefficients of any Dirichlet or loaded abstract L-function
as periodic vectors w1 and w2 on a parallelogrammatic grid extending for
2*sqrt(fnterms) to illustrate what modular functions associated with elliptic
curves look like.

**zetaFact
**

If *Ln *= 1 *F*(*z*)=Sum[1,°](Facts(*n*)/*n** ^{z}*) = Xct[2,°] (1/(1-

Facts(*n*)= number of unordered
factorizations of *n*.

If *Ln *= -1 *F*(*z*)=Sum[1,°]((-1)^Facts(n)*Facts(*n*)/*n** ^{z}*)

otherwise *F*(*z*)=Sum[1,°]((-1)^*n**Facts(*n*)/*n** ^{z}*)

This gives an example of a function with a
product that doesn't involve primes. It is included as a script file example
with the application files.

Theta and RSZ have been rotated so that the
zeros are on the critical line rather than the real axis. The chequerboard
effect is an artifact of the log when the gamma function rotates through the
principle value as the imaginary part of *z* increases. A clearer view of
RSZ is gained by turning off angle.

** Mobius transformation: ** M(

** Parameters Text file format:**
[0] Mandel (=2 function =1 Mandelbrot =0 Julia), [1-5] Scale, X, Y, cr,
ci, [6] altgamma (0 or 2-4), [7] the current function, [8] theoretical dzeta
(0, 1, -1 2), [9] R- escape, [10] addtive or
multiplicative c [11] escape only (0 or 1), [12] color scheme (0 to 3), [13]
escape bound (10-100), [14] number of zeta terms, [15] attractor radius epsilon
bound, [16] maximum iterations, [17] do log of fn [18] angle included in colour
scheme [19] Mobius [20] cval (holds entered critical point), [21] old fn. [22]
real k [23] imag k [24] crval+2*Xi [25] full terms+2*dZ+4*Mellin [26] xm [27]
xn [28] flip.

**Arbitary Dirichlet series:** You can also add additional parameters to a
saved text file or scripted movie file to define an arbitrary generalized Dirichlet series Sum[*an*]*[*n*+*bn*]^-*z*
of up to 1024 terms. These are not saved, as they cannot be adjusted in the
advanced settings. x*m* needs
to be set to 0 and *xn* to 2 to cause the system not to override *k*
and *h*. [29] character period length k, [30] chr. type h (2 or -999 or
-998). Type 2 has *k* real and imaginary coefficients which can be varied
in a movie script. Type -999 has both *k *coefficients *a*(*n*)
and an additional *k* adjustments *n*+*b*(*n*) to the
integers *n* forming the powers *n*^-*z*. In this way we can generate continuous
movies which pass between L-functions, using non integer exponent bases. Type -998 is used to instead
multiply the resulting function with integer coefficients by (1-2^(1-*z*))^-1
to convert an eta type series into its zeta form.

**Abstract L-functions:**
you can upload an abstract zeta/L function using the character period
length k [29] with Dirichlet
series coefficients as above with chr. type *h* = -997, appended after the
*k* complex coefficients by adding the following values also as complex
coefficients: *d*=number of gamma factors *g*((*z*+*k*1)/2),
*g*((*z*+*kd*)/2), k followed by *k*1, ... *kd*, *N*
the conductor, *e* the sign of the functional equation, and finally *w*
the weight. *h* = -995 has the same parameters entered as complex numbers
to allow for Dirichlet and Mass *L*-series with complex gamma factors
and *e* terms. For *L*-functions with very
rapidly growing coefficients which would cause numerical overflow (large
weights) enter chr. no -996, scale down the coefficients of n by a factor
n^(-sh) and enter sh as a shift factor after the weight. If you set an *e*
with absolute value *d* other than 1 you will get *d* ^(-*z*)**L*(*z*)
which is useful for generating the full set of modular old forms (see my
research article at the web site). If the imaginary part of the weight is set
to 1 rather than 0 the powers of pi in the functional equation will be
translated by the gamma factors or their conjugates.

You can explore abstract *L*-function
fractal sets, save an image and parameter file. You can then load the
parameters for the image later after making sure you have first loaded the
correct *L*-function and the existing abstract function will continue to
operate.

If the abstract L-function has 2 gamma factors
of 0 and 1 respectively and Mellin is set, RZViewer will also use the Mellin
transform for a modular form (or elliptic curve) in the region 0²x²w, -8²y²8 to
improve fidelity in the central basin. This is useful for considering the Birch
and Swinnerton-Dyer conjecture. Finally with version 1.7.3 a general Dokchitser
type gamma function inverse Mellin transform routine has been instituted for arbitary
L-functions which is currently experimental, but works successfully on the
genus 2 and 3 examples. To activate this fullterms needs to be set to 4 in the
parameter file. In both the modular and general cases, if the number of gamma
factors is given a negative sign, the three terms after weight (or the shift
factor with -996) will be the height and width of a Mellin transform window and
the residue of any pole singularity at z=1.

The easiest way to generate parameter files is
by using a C-script, which will generate all the parameters from the *L*-function coefficients and gamma
factors. Example C-scripts ready to run including elliptic curve, modular form
and Maass form L-functions are provided in the
attached files.

**Computel** with PARI-GP is included with RZViewer files, to
facilitate high resolution plotting of small regions close to the critical line
and central basins for some difficult examples such as the Dedekind zeta
functions of number field extensions. Computel can handle the Mellin transforms
of a wide class of Motivic functions. For the original examples in Computel
see: http://www.dpmms.cam.ac.uk/~td278/computel/

The file “Installing&Running.txt” in the
Computel folder gives working examples of generating a central region function
portrait for the extension field of x^4-x^2-1 and the elliptic curve example
5077a. The Computel examples are designed to be able to be overlayed on the
RZViewer image of the same function example using the coefficients and gamma
functions generated by Computel in the example files and pasted into an
appropriate C-script example in the fields folder. A C-script “overlay.c” is
provided to facilitate merging the Computel bitmap over the RXViewer overview
to give a high fidelity portrait. The Computel process is 14,500 times slower
than RZViewer, so even a small central image will take 15 minutes or so to
process.

PARI-GP and a compiled version of the Computel
algorithm for elliptic curve *L*-functions is also incorporated into the
open source cross-platform math package Sage http://www.sagemath.org/ from which the
coefficients for several of the templates were generated. Example scripts
enabling coefficient generation for elliptic curves and modular forms is
included with RZViewer, but Computel can also generate all the elliptic curve
and field extension examples without having to install Sage.

**Bitmaps: **You can both save and load bitmaps as well as
parameter files and tiff images. You can save whole bitmaps as text files by
using color option 5 and selecting the Save Bitmap menu item. These can then be
merged, or overlayed and reloaded into RZViewer as bitmaps. The portrait will
initially show in its exact size in pixels. Since it's a bitmap, blowing it up
will reduce the resolution of individual pixels and you can’t use it to
generate fractal sets. But this makes it possible to generate L-functions,
which couldn't otherwise be accurately portrayed such as the echelon basis
functions of modular forms. Terminal C-scripts are included with several of the
modular form examples to enable merging of saved bitmaps as shown in the
illustrations in http://dhushara.com/DarkHeart/key/weights.htm.
As noted above, one can also use Computel to generate bitmaps, which can be merged
with RZ portraits and loaded into RZViewer.

.

The Sage file in the 57 folder shows the
information to form the matrix expressing
57a, 57b, 57c, 19a and 19ax3 in terms of 57m0-4 and its inverse, thus
enabling us to express the basis elements in terms of the elliptic curve
eigenfunctions.

.

To regenerate the bitmaps:

1: In RZViewer, load one of the above parameter
files for the elliptic curves in the parameter file folder in 57, turn on full
terms and open the advanced drawer.

2: Slide the window to downsize it to the
smallest possible to avoid overflowing bitmap memory on reload.

3: Set color mode to 5 and set scale e.g. to 25
and click Set X,Y,S.

4: When the window has refreshed with the
L-function profile, save the bitmap under the same name as the parameter file -
e.g. "57a.txt".

5: Do the same for each of the 5 files.

6: Put all the o files in a folder along with
merge57e.c open terminal and cd to the folder, then execute "gcc -o rzo
merge57e.c -lm && ./rzo". The merge script is already set to use
the input filenames you have defined.

7: Rename the output file to something like
57m0.txt

8: Run the same c script again setting opt to 0
- 4 to generate 57m0.txt to 57m4.txt.

9: Upload each of these into RZViewer one at a
time using Load Bitmap to view the results and save as required to get tiffs.

** Movie Sequence Formats:** The text file consists of series of floating
point numbers. (1) File format 1-3 (2)

**Blue-Skies
Method for Finding Mandelbrot Kernels for Zeta Functions**

This method
enables exploration of a wide range of Mandelbrot sets of zeta functions
intuitively taking advantage of the software algorithms without having to do
complex arithmetic to look for the needle in the haystack.

Step 1: Explore
the critical points of the function using the ** dz** derivative
option. Choose a critical point and scale the image by dragging rectangles to
focus on a small region around the critical point. If the critical point has
strip-like artifacts due to function term round-off, tick the

Step2: Tick the ** keep
scope** option and click the function twice right on the critical point
to get Julia representation. This will insert the

Step 3: You now
need to decide whether you are exploring an additive or multiplicative
Mandelbrot set. Untick +c/xc if you are using multiplicative.

Step 4: Untick ** dz**
so we are dealing with the original function (this didn't affect the Julia step
because dz is active only in function mode) and do a

Step 5: Have a
look initially at the principal point, which due to the maths is a double zero
so has two yellow angular rays meeting in it. This is where one is most likely
to easily find a principal Mandelbrot kernel. In the additive case the
principal point will be quite close to the critical point because it only has
an additive shift, but in the multiplicative case it may be rescaled and you
will have to search for the double zero. You can insert a new Y value and click
** Set X,Y,S** to move further up or down the imaginary axis.

Step 6: With ** keep
scope** ticked, click the point once to go into Mandelbrot mode. Click

Step 7: You can
now explore the region of the Mandelbrot kernel or its islands and can check
the corresponding Julia kernels by clicking once on a spot with ** Hold**
unticked to pick up the actual

Step 8: You can
also find a critical value to use with ** crVal** by locating the
critical point as a zero of dz scaling down to a microscopic domain around it
and unchecking dz and refreshing to give the value of the function, which is
stationary at the critical point. This can then be found by saving a bitmap and
viewing it as a text file where the stationary value will be at the midpoint
(see bitmaps below). Use the smallest size screen for a smaller bitmap.
Selected critical values for zeta are included below.

**Additional
Software for Scripts and Movies**

Movie frames are generated as tiff
images, which can be turned into Quicktime movies with Quicktime Player pro 7's
"open image sequence" option, or loading them collectively as files
using Mpeg Stream clip, which is included with the package. If terminal doesnÕt
recognize the gcc command, open an Apple Developer account (free) and install
Mac OSX Command Line Tools for your system from
https://developer.apple.com/download/more.

**First Zeta Critical Points**

**x-axis**

z = -2.7172 z(z) = 0.0092

z = -4.9368 z(z) = -0.0040

z = -7.0746 z(z) = 0.0042

z = -9.1705 z(z) = -0.0079

z = -11.2412 z(z) = 0.0227

z = -13.2956 z(z) = -0.0937

z = -15.3387 z(z) = 0.5206

z = -17.3739 z(z) = -3.7436

z = -19.4031 z(z) = 33.8083

z = -21.4279 z(z) = -374.4187

z = -23.4492 z(z) = 4988

**Critical line** (dzeta approximation plus Newton)

z = 2.463356 + 23.297678i, z(z) = 0.9289 +
0.0308i

z = 1.286578 + 31.708124i, z(z) = 0.7073 + 0.0110i

z = 2.306454 + 38.489796i, z(z) = 0.9919 - 0.0931i

z = 1.382872 + 42.2909775i, z(z) = 0.7930 + 0.1273i

z = 0.9646998675 + 48.8471714103i

z = 2.1016662620 + 52.4314144061i

z = 1.8960801201 + 57.1342532310i

z = 0.8487341239 + 60.1408464582i z(z) = 0.4881 + 0.1283i

z = 1.2073178358 + 65.9199666872i z(z) = 0.7776
- 0.2061i

z = 0.7806300097 + 95.2929688274i z(z) = 0.4295
+ 0.0779i

**Eta Critical Points**

z = -3.0430 e(z) = -0.1252

z = -5.2330 e(z) = 0.2673

z = -7.3360 e(z) = -1.2390

z = -9.4020 e(z) = 9.8440

z = 2.758314+14.451968i, e(z) = 1.0548 - 0.0412i

z = 1.776063+20.348036i, e(z) = 0.9585 + 0.1994i

z = 1.386667+25.644800i, e(z) = 0.7875 - 0.2597i

**Xi Critical Points**

z = 0.5, x(z)= 0.5

z = 0.5 + 15.444i, x(z)= -0.0009

z = 0.5 + 21.918i, x(z)= 0

**Zeta/Eta Critical Line Zeros**

A short list of some zeta zeros mentioned in the
dark heart research, which can be easily copied and pasted into the text
fields, are as follows:

**1-30:**
14.13472514, 21.02203964, 25.01085758, 30.42487613, 32.93506159,
37.58617816, 40.91871901, 43.32707328, 48.00515088, 49.77383248, 52.97032148,
56.4462477, 59.347044003, 60.831778525, 65.112544048,
67.079810529, 69.546401711, 72.067157674, 75.704690699, 77.144840069,
79.337375020, 82.910380854, 84.735492981, 87.425274613, 88.809111208,
92.491899271, 94.651344041, 95.870634228, 98.831194218, 101.317851006

**125-130:** 278.2507435, 279.2292509, 282.4651148,
283.2111857, 284.835964, 286.6674454

**287-293:** 523.9605309, 525.0773857, 527.9036416,
528.4062139, 529.8062263, 530.8669179, 532.688183

**171382-171390:** 121412.139210209, 121412.990421458,
121414.488895067, 121414.739043607, 121415.047364581, 121415.640550747,
121416.302522095, 121416.823543637, 121417.618749154

NOTE: The 'trivial' zeros are at -2, -4, -6,
etc: sin(piz/2)=0

**Sinks**

282.4651148, 391.4560836, 446.8606227,
527.9036416 H,

637.3971932, 653.6495716, 681.8949915,
762.7000333

For further zeros, see:

http://www.dtc.umn.edu/~odlyzko/zeta_tables/index.html

The number of function terms can also be adjusted to large exact values to show up anomalous behavior, for example the 84270 term zeta product up to the prime 1079999, has a value at the first zeta zero of 6.25, well above 0. That for the 1518898th prime 24199999 is a stunning 20067241.5306, anything but 0!

**Functional Equations and Mellin Transforms:
**

RZViewer uses functional equations for analytic continuation
to the left of the critical line, but also selectively applies Mellin transforms to the central basin of Dirichlet, Hecke, and modular *L*-functions and the Dedekind zeta. This
gives a good compromise of rapid computation with central smoothing. Tim Dokchitser’s Computel algorithm
included in RZViewer as an adjunct package, using
advanced generalized Mellin transforms, is accurate
at depicting the zeros at the centre and in the
critical strip for a wider collection of *L*-functions.

The
following gives a summary of the analytic continuations and Mellin integral transforms for Riemann zeta, Dirichlet *L*-functions, Dedekind zeta, Hecke *L*-functions
on Gaussian integers, and for the *L*-functions
of elliptic curves and modular forms used in the package.

**Research Connected with
the Dark Heart Package
**

**
**

*1. *
* Exploding the Dark Heart of Chaos *http://dhushara.com/DarkHeart/DarkHeart.htm

2.
* Fractal Geography of the Zeta Function *http://dhushara.com/DarkHeart/geozeta/zetageo.htm

**3. **
**Experimental Observations on
the Riemann Hypothesis and the Collatz Conjecture **http://dhushara.com/DarkHeart/RH2/RH.htm ** ***This** paper seeks to explore whether the Riemann hypothesis falls into a class of
putatively unprovable mathematical conjectures, which
arise as a result of unpredictable irregularity and to provide an experimental
basis to discover some of the mathematical enigmas surrounding these
conjectures.***
**

**4. **
**A
Dynamical Key to the Riemann Hypothesis **http://dhushara.com/DarkHeart/key/key2.htm* **This sets out a dynamical basis for the non-trivial zeros
of the Riemann zeta function being on the critical line x = 1⁄2. It does not
prove the Riemann Hypothesis (RH), but it does give a dynamical explanation for
why zeta and the Dirichlet L-functions do have their
non-trivial zeros on the critical line and why other closely related functions
do not. It suggests RH is an additional unprovable postulate of the number system, similar to the axiom of choice, associated with
the limiting behavior of the primes as *
*.* **
**

5.
**The Physics and Computational
Exploration of Zeta and L-functions **http://dhushara.com/DarkHeart/dynamical/dynamical.htm** ***This** article presents a spectrum of 4-D global portraits of
a diversity of zeta and L-functions, using currently devised numerical methods
and explores the implications of these functions in enriching the understanding
of diverse areas in physics, from thermodynamics, and phase transitions,
through quantum chaos to cosmology. The Riemann hypothesis is explored from
both sides of the divide, comparing cases where the hypothesis remains
unproven, such as the Riemann zeta function, with cases where it has been
proven true, such as Selberg zeta functions.*

**Research
References
**

1.
Aspenberg M, Yampolsky M (2009) Mating Non-Renormalizable Quadratic Polynomials Commun. Math. Phys. 287 1-40
toi:10.1007/s00220-008-0598-y

2.
Boyd Suzanne, Henriksen Christian (2012) The Medusa
Algorithm For Polynomial Matings Conformal Geometry
And Dynamics 16, 161–183 arXiv:1102.5047 http://www.math.cornell.edu/~dynamics/Matings/.

3. Brown D, Halstead M (2007) Super-attracting cycles for the cosine-root family Chaos, Solitons and Fractals 31 1191-1202.

4.Buff X, Henriksen C (2001) Julia Sets in
Parameter Spaces Communications in Mathematical Physics https://www.math.univ-toulouse.fr/~buff/Preprints/JuliaCubic/Copies.pdf .

5.
Devaney R
et al. (2013) Sierpinski curve Julia sets for
quadratic rational maps arXiv: 1109.0368.

6.
Devaney R
et al. (2015) Generalized Baby Mandelbrot Sets Adorned with Halos in Families
of Rational Maps
https://pdfs.semanticscholar.org/6b13/a9d293f20dd01ef29fc96426be7f1a71c62b.pdf

7.
Douady A
Hubbard J (1985) On the dynamics of polynomial-like mappings Annales scientifiques de l'ENS 18/2 287-343.

8.
Durkin M. (1998) Observations
on the dynamics of the complex cosine-root family J. Differenc Equat Appl 4 215-28.

9.
Epstein A., Yampolsky, M. (1996) Geometry of the Cubic Connectedness Locus I:
Intertwining Surgery arXivMath/9608213v1.

10.
Jung Wolf (2014) Mandel http://mndynamics.com/indexp.html

11.
Lei T (1992) Matings of quadratic
polynomials Ergod. Th. & Dynam.
Sys. 12 589-620.

12.
Milnor J (1993) Geometry and Dynamics of Quadratic Rational Maps Expr. Math. 2/1 37-83.

13.
Milnor J (1992) Remarks on Iterated Cubic Maps Expr.
Math. 1/1 5-24.

14.
Pérez-Marco R (1997) Fixed points and circle maps Acta Mathematica 179/2 243-294.

15.
Riemann B (1859) On the
Number of Prime Numbers less than a Given Quantity.
http://www.maths.tcd.ie/pub/HistMath/People/Riemann/Zeta/EZeta.pdf

16.
Romera M et al. (2004) External arguments of Douady cauliflowers in the Mandelbrot set Computers & Graphics 28/3 437-449.

17.
Romera M, Pastor G, Alvarez G, Montoya F (2006) External
arguments in the multiple-spiral medallions of the Mandelbrot set Computers & Graphics 30 460-469.

18.
Schleicher D. Zakeri S.(2000)
"On biaccessible points in the Julia set of a
Cremer quadratic polynomial." Proc. AMS 128/3 933-937.

19.
Siegel C (1942) Iterations of analytic functions Ann. Math. 43
607-612.

20.
Shishikura M
(1991) The Hausdorff Dimension Of The Boundary Of The
Mandelbrot Set And Julia Sets Annals of Mathematics 147/2 225-267 arXiv:math/9201282.

21.
Shishikura M
(2014) Dynamical charts for irrationally indifferent fixed points of
holomorphic functions http://math.bu.edu/keio2014/talks/Shishikura.pdf.

22.
Woon S
(1998) Fractals of the Julia and
Mandelbrot sets of the Riemann Zeta Function arXiv:chao-dyn/9812031v1

**
**

**Three Sample Dark Heart & Riemann Zeta C-script
Movie Files**

Movie frames are generated as tiff images, which can be turned into Quicktime movies with Quicktime Player pro 7's "open image sequence" option, or loading them collectively as files using Mpeg Steram clip, which is included with the package. If terminal doesnÕt recognize the gcc command, open an Apple Developer account (free) and install Mac OSX Command Line Tools for your system from https://developer.apple.com/download/more.

*You need to make sure the correct parameters are put in the script. You can easily save a confirguration and look at the text file to check against the file structure. For example note that some variables are multiplexed specs[8] in Dark Heart and [24] and [25] in Riemann Zeta. For extreme floating point values, replace the fprintf("%f") command by "%e" to get scientific precision.*

//generates a movie of a Julia
journey around the Mandelbrot set of z^d+c using DHViewer

//save as djulia.c

//To run this file from terminal put
it in a folder, cd to the folder and input

//gcc -o djuliao djulia.c -lm
&& ./djuliao

//To run successive compiled
versions type ./djuliao

#include <stdio.h>

#include <math.h>

#import <complex.h>

double pi=3.14159;

int frames = 41; //number of movie frames - normally use 500-1000!

const char base[] = "Params";

void WriteParamFile(int
frameno, double param1, double param2, double
param3);

int main(void)

{

FILE *mf;

char filename [ FILENAME_MAX ];

int filetyp = 3;

int k;

double d=6; //degree d of x^d+c

double astt = 0; //angle position

double aend = 2*(d-1)*pi;

double apos,xpos,ypos;

double _Complex zpos;

sprintf(filename, "%s.txt",
base);

mf=fopen(filename,"w");

fprintf(mf,"%f %f
\n",(float)filetyp, (float)frames);

fclose(mf);

for(k=0;k<frames;k++)

{

apos=astt+(aend-astt)*k/(frames-1);

zpos=1.01*pow(d,-d/(d-1))*(d*cexp(I*apos/(d-1))-cexp(d*I*apos/(d-1)));

xpos=creal(zpos);

ypos=cimag(zpos);

WriteParamFile(k,
xpos, ypos, (double)d);

}

return 0;

}

void WriteParamFile(int
frameno, double param1, double param2, double
param3)

{

FILE *mf;

char filename [ FILENAME_MAX ];

int j;

double specs[37];

double mandel=0;

double scale=3.5;

double screenX=0;

double screenY=0;

double cx=param1;

double cy=param2;

double thisfn=1;

double escType=0;

double orbitTrapE=0;

double escapeOnly=0;

double colorScheme=4;

double escapeBoundExp=1.666667;

double attractorEscBd=-4;

double maxIterations=1024;

double kx=param3;

double ky=0;

double oldfn=thisfn;

specs[0]=mandel;

specs[1]=scale;

specs[2]=screenX;

specs[3]=screenY;

specs[4]=cx;

specs[5]=cy;

specs[6]=thisfn;

specs[7]=escType; // abs, real, or imag

specs[8]=orbitTrapE;
//orbit trap + 2*dF

specs[9]=escapeOnly;

specs[10]=colorScheme;

specs[11]=escapeBoundExp;
//escape bound exponent

specs[12]=attractorEscBd;
//attractor escape bound 10^-k

specs[13]=maxIterations;
//iterations

specs[14]=kx; //real k

specs[15]=ky; //imag k

specs[16]=oldfn;

specs[17]=987.654321;

sprintf(filename, "%s%d.txt",
base, frameno);

//printf("filename =
\"%s\"\n", filename);

mf=fopen(filename,"w");

for (j=0;j<37;j++)

fprintf(mf,"%f ",specs[j]);

fclose(mf);

}

//generates a movie of separation of
mandelbrot sets of (z^4-p)(z+c) using DHViewer

//save as quintic.c

//To run this file from terminal put
it in a folder, cd to the folder and input

//gcc
-o quintico quintic.c -lm && ./quintico

//To
run successive compiled versions type ./quintico

//To run successive compiled
versions type ./quintico

#include <stdio.h>

double pi=3.14159;

int frames = 121; //number of movie frames - normally use 500-1000!

const char base[] = "Params";

void WriteParamFile(int
frameno, double param1, double param2);

int main(void)

{

FILE *mf;

char filename [ FILENAME_MAX ];

int filetyp = 3;

int k;

double xstt = 0;

double xend = 3;

double xpos;

double ypos = 0;

sprintf(filename, "%s.txt",
base);

mf=fopen(filename,"w");

fprintf(mf,"%f %f
\n",(float)filetyp, (float)frames);

fclose(mf);

xpos=xstt;

for(k=0;k<frames;k++)

{

xpos=xstt+(xend-xstt)*k/(frames-1);

WriteParamFile(k,
(double)xpos, (double)ypos);

}

return 0;

}

void WriteParamFile(int
frameno, double param1, double param2)

{

FILE *mf;

char filename [ FILENAME_MAX ];

int j;

double specs[37];

double mandel=1;

double scale=10;

double screenX=0;

double screenY=0;

double cx=0;

double cy=0;

double thisfn=22;

double escType=0;

double orbitTrapE=0; // orbittrap + 2*dF

double escapeOnly=1;

double colorScheme=0;

double escapeBoundExp=1.666667;

double attractorEscBd=-4;

double maxIterations=128;

double kx=4;

double ky=0;

double oldfn=thisfn;

specs[0]=mandel;

specs[1]=scale;

specs[2]=screenX;

specs[3]=screenY;

specs[4]=cx;

specs[5]=cy;

specs[6]=thisfn;

specs[7]=escType; // abs, real, or imag

specs[8]=orbitTrapE;
//orbit trap and dF

specs[9]=escapeOnly;

specs[10]=colorScheme;

specs[11]=escapeBoundExp;
//escape bound exponent

specs[12]=attractorEscBd;
//attractor escape bound 10^-k

specs[13]=maxIterations;
//iterations

specs[14]=kx; //real k

specs[15]=ky; //imag k

specs[16]=oldfn;

specs[17]=987.654321;

specs[18]=1;

specs[20]=1;

specs[26]=-param1;
// function parameters in quintic equation

specs[28]=-param1;

specs[31]=1;

specs[35]=1;

specs[36]=0;

sprintf(filename, "%s%d.txt",
base, frameno);

//printf("filename =
\"%s\"\n", filename);

mf=fopen(filename,"w");

for (j=0;j<37;j++)

fprintf(mf,"%f ",specs[j]);

fclose(mf);

}

**A Sample Riemann Zeta Movie Script**

//Generates a movie parameter file
set of zeta Julia sets from c=-20 to c=2 using RZViewer

//to be run with RZViewer

//To run this file from Mac Terminal
put it in a folder, cd to the folder and input

//gcc -o rzmovieo rzjulia.c -lm
&& ./rzmovieo

//To run successive compiled versions
type ./rzmovieo

//See: http://www.dhushara.com/DarkHeart/RZV/RZViewer.htm

#include <stdio.h>

#include<complex.h>

const double pi=3.1415926535;

const int frames = 5; //number of movie frames
- normally use 500-1000!

const int spcno = 29;

const char base[] = "Params";

void WriteParamFile(int
frameno, double param);

int main(void)

{

FILE *mf;

char filename [ FILENAME_MAX ];

int filetyp = 3;

int k;

double xstt =-20;

double xend = 2;

double xpos;

sprintf(filename, "%s.txt",
base);

mf=fopen(filename,"w");

fprintf(mf,"%f %f
\n",(float)filetyp, (float)frames);

fclose(mf);

xpos=xstt;

for(k=0;k<frames;k++)

{

if(k==0)

xpos=xstt;

else

xpos=xstt+(xend-xstt)*k/(frames-1);

WriteParamFile(k,
(double)xpos);

}

return 0;

}

void WriteParamFile(int
frameno, double param)

{

FILE *mf;

char filename [ FILENAME_MAX ];

int j;

double specs[spcno];

double mandel=0;

double scale=80;

double screenX=0;

double screenY=0;

double cx=param;

double cy=0;

double altgamma=0;

double thisfn=1;

double split=1;

double orbitTrapE=0;

double addc=1;

double escapeonly=0;

double zetaterms=100;

double colsch=0;

double escapeboundExp=1.666667;

double attractorEscBd=-2;

double maxIterations=64;

double dolog=0;

double sang=1;

double domoib=0;

double cval=0;

double oldfn=thisfn;

double realk=0;

double imagk=0;

double crval=0;

double fullt=0;

double xm=1;

double xn=1;

double flip=0;

specs[0]=mandel;

specs[1]=scale;

specs[2]=screenX;

specs[3]=screenY;

specs[4]=cx;

specs[5]=cy;

specs[6]=altgamma;

specs[7]=thisfn;

specs[8]=split;

specs[9]=orbitTrapE;
//orbit trap epsilon

specs[10]=addc; //additive c/ mult c

specs[11]=escapeonly;

specs[12]=colsch;

specs[13]=escapeboundExp;
//escape bound exponent

specs[14]=zetaterms;

specs[15]=attractorEscBd;
//attractor escape bound 10^-k

specs[16]=maxIterations;
//iterations

specs[17]=dolog; //take log of the function

specs[18]=sang; //angle ploting

specs[19]=domoib; //mobius

specs[20]=cval;

specs[21]=oldfn;

specs[22]=realk;

specs[23]=imagk;

specs[24]=crval; // crval+2*Xi

specs[25]=fullt; // full terms+2*dZ+4*Mellin crval+2*Xi

specs[26]=xm;

specs[27]=xn;

specs[28]=flip;

sprintf(filename, "%s%d.txt",
base, frameno);

//printf("filename =
\"%s\"\n", filename);

mf=fopen(filename,"w");

for (j=0;j<spcno;j++)

fprintf(mf,"%f ",specs[j]);

fclose(mf);

}