Below are several math programs that I have made in the course of my teaching and research as well as other programs I have written in my spare time. They are separated more-or-less by topic. Some are incredibly particular to my corners of research and others are of more general interest.

Programs uploaded are written using either C++, SageMath, Mathematica, or MATLAB. Some have multiple available.

**This code is not maintained, so some of the programs may not run anymore.**Programs uploaded are written using either C++, SageMath, Mathematica, or MATLAB. Some have multiple available.

- C++ programs are compiled and given as a compressed folder (.zip) of the executable (.exe) with a source code (.cpp) and other files. C++ Programs are written using Visual Studio and often involve using OpenGL via freeglut for graphing.
- SageMath code runs in-browser via the SageMathCell with their source code available in the html.
- Mathematica computable documents (.cdf) can be viewed for free using Wolfram CDF player and have no source code
- Mathematica notebooks (.nb) can only be viewed in Mathematica and contain source code.
- MATLAB files (.m) can only be viewed in MATLAB and contain source code.

Heisenberg Groups

**Malcifyer**(SageMath): Calculates the Mal'cev normal form of elements in the discrete Heisenberg group.**Path Grapher**(SageMath): Graphs paths in the continuous Heisenberg group.**Heisenberg Renders**(various) Multiple 3D models for visualizing the continuous Heisenberg group that I made for my dissertation work.**See also**: this in-browser Heisenberg path visualization tool made by J. Noah Cowie (Wheaton College '22) at my behest. Scribble a path in the plane using your cursor on the left side and displayed on the right will be the lifted path in the continuous Heisenberg group.

HNN Extensions

**Horocyclic Word Simplifier**(SageMath): Simplifies spellings of elements in the horocyclic subgroup of*any*HNN extension of $\mathbb{Z}^3$.**McCann-Schofield Reduction Algorithm**(SageMath): Gives the word length for a horocyclic element $a^k \in BS(p,q)$ for *most* combinations of $p$ and $q$. (some debugging needed)**Cubing Growth Calculator**(SageMath): Calculates the horocyclic growth series for the groups $\mathbb{Z}^3*_{g \mapsto g^3}$.

Probability and Statistics

**ANOVA simulator**(Mathematica cdf): Simulates Anova by generating $4$ data sets of size $n$ from normal distributions with means $\mu_1$, $\mu_2$, $\mu_3$ and $\mu_4$ and standard deviation $\sigma$ (all are manipulable sliders except the number of groups which is fixed at 4). The program graphs the boxplots side-by-side and displays all sample means, all sample standard deviations, the degrees of freedom, the mean squares, $F$ and the $P$-value.

**Bayes' Theorem Calculator**(Mathematica cdf or SageMath or C++) : Enter the prevalence of a disease, as well as the specificity/sensitivity of a test for the disease and this will use Bayes' theorem to calculate the probability someone has the disease given a positive test result and that one does not have the disease given a negative result.**Sampling Distributions**(Mathematica cdf or SageMath) : Simulates a sampling distribution for a uniformly distributed random integers between 0 and 9. It takes $m$ samples of size $n$, generates the histogram of sampling distribution of sample means , and displays the mean of the sample means.**Binomial Approximations**(Mathematica cdf 1 and Mathematica cdf 2 or SageMath) : Visualization of approximations to a binomial distribution by both a normal distribution and a Poisson distribution by overlaying histograms for the three distributions for a given $n$ and $p$. The SageMath version can do both together or separately.

Single Variable Calculus

**Taylor polynomial visualizer**(Mathematica cdf): Input a function $f(x)$ and a value $c$, and this will graph the Taylor polynomial of $f(x)$ centered at $c$ to any degree from $1$ to $20$.

**Riemann sum visualizer**(Mathematica cdf) : Input a function $f(x)$ and an interval $[a, b]$ and this will graph a left/right Riemann sum approximation for any number of rectangles from $2$ to $100$.

**Method of bisections example**(C++): Input the bounds of an interval $[a,b]$ and a number of iterates $n$ and this will carry out the method of bisections to approximate $1 - x - x^5 = 0$.**Newton-Raphson method example**(C++): Input an initial guess $x_0$ and a number of iterates $n$ and this will carry out Newton-Raphson to approximate $1 - x - x^5 = 0$.

Linear Algebra

**Eigenspace Visualizer**(Mathematica cdf or Mathematica nb): Input a $2 \times 2$ matrix $A$ and this will graph its eigenspaces. You may click anywhere in the graph to draw a vector $v$, and $Av$ will be displayed. Beneath the graph the Eigenvalues are listed with an associated eigenvector for each.

Differential Equations

**Euler's Method and Improved Euler's Method demonstration**(Mathematica nb, MATLAB m, and C++): Demonstrates (improved) Euler's method on the ODE $y' = y$. Specify $y_0$, $x_0$, $x_n$, and the number of steps and this will carry out the method and graph the results alongside the true value (manipulable). Also appropriate for a Calculus I or II course if Euler's is covered with differentials.

**Predator-Prey model/Euler's Method Demonstration**(Mathematica nb, MATLAB m, or C++): Demonstrates Euler's method on the Lotka-Volterra equations that model the populations of a predator and their prey with choosable parameters and graphs of both the populations over time and the phase diagram. Additionally, the C++ version outputs the data as txt files.

**Lorenz Attractor/Runge-Kutta Method Demonstration**(Mathematica nb or__C++__) : Demonstrates RK4 methods on the ODEs that arise from the Lorenz system with choosable parameters and graphs the approximation. The C++ version has slightly more functionality in that it can output nice txt files of the set of points so you can feed it to a nicer graphing program, but the Mathematica has a nice dynamic environment.

Differential Geometry

**Parametrized Helix Curve**(Mathematica nb): Graphs a helix curve*parametrized by arclength*, and displays the Frenet-Seret (TNB) frame as well as some information about the speed, torsion, and curvature at a given time parameter. Can easily be amended for different helix curves or other curves parametrized by arclength. Also appropriate for a Multivariable Calculus/Calculus III course.

**Parametrized Cone Spiral Curve**(Mathematica.nb or C++): Graphs a cone spiral curve*NOT parametrized by arclength*. and displays the Frenet-Seret (TNB) frame as well as some information about the speed, torsion, and curvature at a given time parameter. As this program does not require your curve to be unit speed/parametrized by arclength you can see it as a better version of the above with a different example. Can easily be easily amended for any regular curves. Also appropriate for a Multivariable Calculus/Calculus III course.

**Hyperboloid Triangle Example**(Mathematica.nb): Graphs a triangle on a hyperboloid of one sheet and compares lengths, angles, and area of the hyperbolic triangle to a Euclidean triangle to demonstrate that triangles on surfaces of negative Gaussian curvature have angle sum and area less than Euclidean triangles.