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 3^{rd} 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 2^{nd}-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 property^{1}.

[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 2^{nd}-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 2^{nd}-order DE can cross
and the non-intersecting property does not hold.

However, an easy transformation from non-homogeneous to
homogeneous 2^{nd} 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 3^{rd} 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 2^{nd} order DEs in two dimensions can be
applied to 3^{rd} 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 3^{rd}-order DEs and Ribbons

The non-intersection property of homogeneous 2^{nd}-order
DEs applies to homogeneous 3^{rd}-order DEs, but the conclusions about
boundings are different. Distinct
solution functions of homogeneous, 3^{rd}-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 3^{rd}-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 3^{rd}-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 3^{rd}-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 3^{rd}-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