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. 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.
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.