Welcome to my project site for my ribbons.py 3-D differential equation grapher. I created ribbons.py to help visualize where the solutions of a 3rd order differential equation can and cannot lie. This can be easily interpreted once modifications are made to ribbons.py to customize it to the desired DE.
Ribbons.py is available for download under the GPL license.
Download ribbons.py.
The following is a report I have constructed for Math 198:
Hypergraphics. Professor George Francis
conducted this wonderful course at the
Paul Camann
Math 198
Ribbons
Phase
Portraits
The phase portrait of a differential equation (DE) provides information
about the equation’s behavior in an easily-digestible form. For example, the DE
gives a phase portrait as follows[1]:

[Figure 1]
In this portrait, (
,
) is plotted parametrically.
Defined loosely, a phase portrait is the graph of all solutions to a DE
where a solution’s value, x(t), is plotted along one axis and its derivative,
x’(t), is plotted along the other.
Because the solution functions are often dense in a phase portrait, we
can visualize the graphs of these solution functions by plotting a small line
tangent to these curves near each of a chosen set of sparsely-distributed
positions, as shown in Figure 1.
The
non-intersecting property
Phase portraits are most useful for presenting the behavior of a 2nd-order, homogeneous DE of the form x’’(t) = f(x(t),x’(t)). A homogeneous DE, sometimes called an autonomous DE, is one which has no dependence on time.
For every position in the set of all positions (x,x’), called the phase plane, there is exactly one solution to a homogeneous DE that satisfies it. This property implies that two distinct solution functions may never have the same position. Because the phase plane is a surface and a curve can define the boundary of a surface, this property allows the use of the graph of one solution function in the phase plane as a border for all other solution functions. Using the same program as shown previously, we can draw a few solution curves which do not contradict this property1.

[Figure 2 - no two solution curves intersect in the phase plane.]
Non-homogeneous
2nd Order DEs
The non-intersecting property of solution functions of a DE in the phase plane holds for homogeneous DEs , but it does not hold for non-homogeneous DEs. For non-homogeneous equations, the derivatives of a solution function depend on time, a dimension of the phase plane which can be omitted for homogeneous equations. For a 2nd-order DE, the position (x, x’) is not unique to a solution function. Two solution functions may be at the same position at different times. Thus, solution functions graphed in the phase portrait of a non-homogeneous 2nd-order DE can cross and the non-intersecting property does not hold.
However, an easy transformation from non-homogeneous to homogeneous 2nd order DEs is possible, and many qualities of the non-homogeneous equation are apparent in homogeneous form. If the DE is of the form g(x,x’,x”) = f(t), then the transformed, homogeneous DE is g(x,x’,x”) = 0. For this reason, the rest of this paper only discusses homogeneous DEs.
3rd Order
DEs
The phase portrait of a 3rd order DE graphs the positions (x,x’,x”), and so it exists in a phase space rather than a phase plane. Nevertheless, the same technique applied in two dimensions to 2nd order DEs in two dimensions can be applied to 3rd order DEs in three dimensions. I developed a program to construct the curves of solution functions in this phase space, and several solution curves of x’’’ = x’ are seen in the following snapshot of my program ribbons.py:

[Figure 3 – solution functions resemble those of Figure 2]
Each solution curve is represented as a thick line, and fifty “close” solution curves are shown. A couple rotations reveal more 3-D information about the solution curves:

[Figure 4 – a rotation of Figure 3]

[Figure 5 – a rotation of Figure 3]
The
Non-intersecting Property of 3rd-order DEs and Ribbons
The non-intersection property of homogeneous 2nd-order DEs applies to homogeneous 3rd-order DEs, but the conclusions about boundings are different. Distinct solution functions of homogeneous, 3rd-order DEs cannot have common positions (x,x’,x”), and this does allow a solution function to form a boundary of a surface, but a solution function may not form a boundary of a volume. I do not know a proven method to bound the regions of phase space that a 3rd-order DE may occupy, so I have developed an approximate method to bound such regions.
Beware: I do not give proof, I only observe and
conjecture. In a sufficiently smooth
phase-space of a 3rd-order DE, if at any time the position (
,
,
) of a function
governed by this DE is
sufficiently close the position (
,
,
) of another such function
, then the functions may continue to be close over the other
positions they occupy. Other functions
that are also close to
will be close to each
other as well. The collection of these
“close” functions may form a barrier so that no function which is not close
will ever become close and no function which is close will become far. An infinite collection of these curves
produces a surface, and since distinct functions cannot occupy the same
position, this surface bounds a region.
This is the basis for a ribbon.
Implementation
of ribbons.py
Ribbons.py takes a collection of close points in 3-space and graphs the unique solution function for each point over a chosen time interval. The primary data-type of ribbons.py is a strand. A strand is a collection of points of a solution function. Each strand is initialized as a single point; the main loop of ribbons.py elongates each strand by using Euler’s method to calculate the change in position (x,x’,x”) over a short time dt, adding this change to the last calculated position, and appending the new position to the strand. The graphical representation of each strand is performed by the curve class of python’s visual module.
To change the 3rd-order, homogeneous, differential equation being visualized, the source code of ribbons.py must be modified. It appears as the function x3(x0,x1,x2), which gives the third derivative of the solution function at position (x,x’,x”) = (x0,x1,x2). Hence, the DE must be an explicit function for x’’’.
More Graphs
from Ribbons.py
The following graphs are of the DE x’’’ = x’ + (x’)^3:

[Figure 6]

[Figure 7]
Conclusion
Visualization of several functions through ribbons.py has given evidence that bounding-surfaces can be easily grasped and used to determine the positions a solution function of a 3rd-order DE may occupy.
[1] Figures 1 and 2 are produced with a program created and modified by Richard Mansfield and Frits Beukers and found at http://www.math.uu.nl/people/beukers/phase/newphase.html