*Mathematica*to create quick-to-compute, invertible interpolation functions that were (within my tolerances) numerically identical to the functions they modeled."

*Some Notes from Designer Chris Nadovich*

### Multidimensional Symbolic Arrays

Every one of the approximately 20,000 unique pieces of steel tubing was
specified in *Mathematica* by a multidimensional data structure that
gave the piece's shape, as well as its position and orientation in 3D.
Some of the entries in this data structure were numerical, and some were
symbolic. For example, the diameter of the tubing was known numerically
in advance, but neither the number of tubes nor their position or other
dimensions (including angles for triple mitered end-cuts) were known.
These unknowns were specified symbolically.

Our venue considerations (overall shape and size), cycling rideability considerations, and mechanical fabrication design ideas were then incorporated to constrain and link the positions of the pieces into an overall model. This was done, in large measure, by applying symbolic manipulations from analytic geometry to the basic pieces. Essentially, I cut, lifted, rotated, and translated the 75 tons of steel using symbolic coordinate transforms and other algebraic techniques. I can say from personal experience that lifting a 24-foot steel beam with a coordinate transform is a lot easier than lifting it by hand.

### Nonlinear Equation Solving

The resulting hybrid symbolic/numerical model of the track resulted in
a system of thousands of nonlinear equations that would be impossible for
a human to cast, let alone solve. However, in *Mathematica*, I was
never forced to arbitrarily break up the problem into separate symbolic and
numerical problems. I could leave the problem statement and constraints in
their natural form and let the machine do the algebraic spadework as
needed.

My method to use symbolic equations became essential when, during the
course of the project, various constraints had to be changed. Since my
*Mathematica* code contained no a priori numerical reductions of
symbolic constraints, I was able to quickly and easily recast the problem
and solve it again.

### Embedded Graphics

Another feature of *Mathematica* that I used to great advantage
was its ability to embed dynamically computed graphics along with the
model. At various crucial places within the track model, I added notes and
graphics that monitored various parameters of the track (*e.g.*, lengths,
angles, curves, and even some 3D renderings) for the purpose of quality
assurance. If I varied an input constraint in such a way that caused the
overall design to vary in a strange, unexpected way, I was able to quickly
pinpoint the cause of the behavior by scanning through the graphs of
intermediate results that I scattered through the notebook.

### Interpolation Functions

Some of the equations that described the track were impossible to solve
analytically and slow to solve numerically. To avoid this potential
roadblock, I made liberal use of the `Interpolation` function feature of
*Mathematica* to create quick-to-compute, invertible interpolation
functions that were (within my tolerances) numerically identical to the
functions they modeled. For example, the Fresnel integrals that were the
basis of the velodrome curve are expensive to compute. They can be
transformed into invertible, relatively inexpensive interpolation functions
as follows:

`CurveX=
Interpolation@
Table[{b,NIntegrate[Sin[a t^2 /2], {t,0,b}]},
{b,-L,L,dl}];`

With proper choice of `dl`, this interpolation function, `CurveX[t]`,
becomes a fast, accurate replacement for the real
Fresnel integral. This feature of *Mathematica* alone reduced the
overall computation time by several orders of magnitude, without
sacrificing any significant accuracy. Often, people complain that symbolic
math engines can leave you high and dry when your problem reduces to a
symbolically or numerically intractable form; I found that with *Mathematica* the tools were always there to get me out of any jam I
created for myself.

### Flexible Output Formatting

The final result of the calculations performed by *Mathematica*
was a completely numerical specification of every unique piece of steel in
the track. The flexible output formatting capabilities of
*Mathematica* were used to produce output in the form of
multidimensional 3D-face lists. These lists were input directly into a CAD
application to conveniently produce mechanical fabrication drawings.

I should emphasize that unlike the way mechanical design is usually done
today, the CAD application was not used to lay out the track surface in any
way or perform any dimensional calculations. Its use was restricted solely
to final QA, adding official drawing borders, notes, labels, and title
blocks and producing the final official plotter rendering. In a sense,
*Mathematica* served as an automated CAD operator; it translated my
high-level engineering design into a specific and complete, part-by-part
set of blueprints--the work normally done by a human designer.