I was curious about the behavior of solutions

*x*(

*t*),

*y*(

*t*),

*z*(

*t*) of the

Lorenz attractor equations when the independent variable

*t* is allowed to be complex. (When

*t* is real, the behavior is chaotic.) There are a few references to this problem online but I couldn't find any good pictures, so here's my attempt at plotting some. The solutions are kinda interesting, with lots of complicated branching in the complex plane.

The parameters I used are

*sigma* = 3,

*rho* = 26.5,

*beta* = 1, with initial conditions

*x*(0) = 0,

*y*(0) = 1,

*z*(0) = 0. So the Lorenz equations become

*x'*(

*s*) = 3 (

*y*(

*s*) -

*x*(

*s*)),

*y'*(

*s*) =

*x*(

*s*) (26.5 -

*z*(

*s*)) -

*y*(

*s*),

*z'*(

*s*) =

*x*(

*s*)

*y*(

*s*) -

*z*(

*s*),

*x*(0) = 0,

*y*(0) = 1,

*z*(0) = 0,

where

*s* is complex.

**Approach**I used Mathematica, which can numerically solve differential equations for real, but not complex, values of the independent variable. So we need to rewrite the equations in terms of a real variable. In order to get flexibility with regards to any branch cuts that might appear, we want an approach that lets us specify an arbitrary complex contour along which to solve the equations. Here's what I did; please let me know if the following approach seems incorrect for some reason:

In order to follow the solutions

*x*(

*s*),

*y*(

*s*),

*z*(

*s*) along a contour line from

*s*_{i} to

*s*_{f} in the complex plane, introduce an auxiliary real variable

*t* that goes linearly from 0 to 1 as

*s* goes linearly from

*s*_{i} to

*s*_{f}. That is,

*s* = (1 -

*t*)

*s*_{i} +

*t* *s*_{f}.

And introduce auxiliary functions

*X*(

*t*),

*Y*(

*t*),

*Z*(

*t*) of this real variable

*t* such that

*X*(

*t*) =

*x*(

*s*) =

*x*((1 -

*t*)

*s*_{i} +

*t* *s*_{f}),

*Y*(

*t*) =

*y*(

*s*) =

*y*((1 -

*t*)

*s*_{i} +

*t* *s*_{f}),

*Z*(

*t*) =

*z*(

*s*) =

*z*((1 -

*t*)

*s*_{i} +

*t* *s*_{f}).

Differentiating with respect to

*t*, we get

*X'*(

*t*) = (

*s*_{f} -

*s*_{i})

*x'*(

*s*),

*Y'*(

*t*) = (

*s*_{f} -

*s*_{i})

*y'*(

*s*),

*Z'*(

*t*) = (

*s*_{f} -

*s*_{i})

*z'*(

*s*),

so that

*x'*(

*s*) =

*X'*(

*t*) / (

*s*_{f} -

*s*_{i}),

*y'*(

*s*) =

*Y'*(

*t*) / (

*s*_{f} -

*s*_{i}),

*z'*(

*s*) =

*Z'*(

*t*) / (

*s*_{f} -

*s*_{i}).

Letting

*t* = 0 to get initial conditions, the Lorenz equations become

*X'*(

*t*) = 3 (

*s*_{f} -

*s*_{i}) (

*Y*(

*t*) -

*X*(

*t*)),

*Y'*(

*t*) = (

*s*_{f} -

*s*_{i}) (

*X*(

*t*) (26.5 -

*Z*(

*t*)) -

*Y*(

*t*)),

*Z'*(

*t*) = (

*s*_{f} -

*s*_{i}) (

*X*(

*t*)

*Y*(

*t*) -

*Z*(

*t*)),

*X*(0) =

*x*(

*s*_{i}),

*Y*(0) =

*y*(

*s*_{i}),

*Z*(0) =

*z*(

*s*_{i}),

and at

*t* = 1 we get the answer

*x*(

*s*_{f}) =

*X*(1),

*y*(

*s*_{f}) =

*Y*(1),

*z*(

*s*_{f}) =

*Z*(1).

We can numerically solve these equations along a polygonal path between values

*s*_{0} = 0,

*s*_{1}, ...,

*s*_{n - 1},

*s*_{n} =

*s* to obtain the values

*x*(

*s*),

*y*(

*s*), and

*z*(

*s*) based on a contour through the

*s*_{k}. Note that each segment of this path will have its own system of equations defining its own

*X*_{k},

*Y*_{k}, and

*Z*_{k}. The final values (at

*t* = 1) for each segment will provide the initial conditions (at

*t* = 0) for the following segment.

**The pictures**For plots in the complex

*s* plane, there turned out to be lots of branch cuts, which made the pictures look messy. The best thing I came up with was to choose all the branch cuts to be vertical, going away from the real line (corresponding to a contour from 0 to Re(

*s*) to

*s* for a given point

*s*).

**---- ***x*(*s*) ----Here's a plot of

*x*(

*s*) for real

*s*. The wiggles are either below or above the axis depending on which "wing" of the Lorenz attractor the solution is currently on:

Here's a contour plot over the complex

*s* plane of log(|

*x*(

*s*)|). Zeros of

*x*(

*s*) appear dark blue, while infinities appear light blue. The zeros all appear to be simple, and the infinities all appear to be branch points of some kind. The most visible branch cuts, coming from the infinities that are closest to the real line, occur at approximately the real coordinates of the peaks in the previous plot:

There's an obvious quasi-repeating pattern of some kind as you move away from the real axis. The

*y* and

*z* functions, plotted below, have this same characteristic.

Here's a contour plot of Re(

*x*(

*s*)). Negative values are dark blue; positive values are light blue. The infinities all seem to have one dark lobe and one light lobe, so they look a bit like simple poles, except that they're also branch points.

And here's Im(

*x*(

*s*)):

**---- ***y*(*s*) ----Here's a plot of

*y*(

*s*) for real

*s*:

Here's log(|

*y*(

*s*)|). It looks roughly similar to the corresponding plot for

*x*. Again all the zeros look like simple zeros, and all the infinities appear to be some kind of branch points:

Here's Re(

*y*(

*s*)). This time the infinities all seem to have two dark lobes and two light lobes, so they look kinda like double poles, except that they're branch points:

Here's Im(

*y*(

*s*)):

**---- ***z*(*s*) ----Here's

*z*(

*s*) for real

*s*:

Here's log(|

*z*(

*s*)|). Again all the zeros look simple and all the infinities look like branch points (except that the zero at the origin is double because my particular choice of initial conditions leads to

*z'*(0) = 0):

Here's Re(

*z*(

*s*)). As with

*y*, the infinities all seem to have two dark and two light lobes, so they look similar to double poles, except that they're branch points:

Finally, here's Im(

*z*(

*s*)):