This section of the website contains various free software tools that I have built for helping students learn different concepts from the physical sciences. Many of the tools below are GUIs (graphical user interfaces) for developing intuition for different mathematical concepts. The interactive GUIs are all implemented in Wolfram's computable document format (.cdf). The CDF Player that allows you to view and interact with the CDF files is free and available for download here: https://www.wolfram.com/player/

The Lennard-Jones fluid simulation activities take an opposite approach to teaching computational chemistry compared to the GUIs. Rather than hiding the code so that students can focus on developing intuition using visual representations provided by the GUI, it instead puts the code front and center, allowing students an opportunity to "look under the hood" of a functioning molecular simulation. The simulation is called a Lennard-Jones fluid simulation, and it will run on any ordinary laptop, as will the Jupyter Notebook included with the code, where students complete a set of activities related to the fluid simulation. A motivating philosophy behind the activity is that just as students in an organic chemistry lab need hands-on experience with equipment like separatory funnels, balances, and rotovaps, students of computational chemistry need hands-on experience with writing code.

Lennard-Jones Fluid Simulation Activities

All of the software necessary to complete this activity is free. First, you must install Anaconda, which is the most popular distribution of Python among scientists and data scientists alike (anaconda.com). All of the code needed to complete this activity can be downloaded from my GitHub repository. If you are an instructor who would like to learn more about my Lennard-Jones Fluid instructional activities, I published a paper in the Journal of Chemical Education, which San José State University has made freely available through open access here. I have also created a YouTube video where I go through the entire lab activity (the video is roughly 2 hours), so that instructors can assign this activity as an asynchronous online assignment (below).

Finite Difference Derivatives

Below is a video demonstration of the finite difference derivative CDF in action. In order to work with this CDF, please download the finite difference derivative demo CDF file: derivativeDemo.cdf

If we have a function f(x) and its derivative, f'(x), the value returned by f'(x) is the slope of f(x) at x. That slope has the same slope as a tangent to the curve of f(x) at the point x. If you open this CDF file and set \Delta x to the smallest possible value then move the slider for x (the red dot), you will see a visualization where a tangent line to f(x) is drawn wherever you place the red dot. What you are actually seeing, however, are two overlapping lines, where one is the true tangent obtained using the derivative to assign the slope (the red line), and the other is a linear approximation whereby a linear equation is fit to x and a second point x + \Delta x (the cyan dot). The approximation is quite good when the change is small compared to how wiggly the line is. Another way to think about it is that if we zoom into any smooth curve far enough, that tiny piece of the curve will look like a straight line, so treating it as a straight line within that window is a very good approximation.

Translating and Scaling a Parabola

In order to work with this GUI, please download the translating and scaling a parabola CDF file: transAndScaleParabola.cdf

This GUI shows two parabolas, a blue one: f(x) = x^2, and a red one: f(x) = s(x - t)^2. The parameter s is the scaling constant and the parameter t is the translating constant. Note how changing these parameters affects the red function. Try adjusting the parameters so that the red function exactly matches the blue one. What values for s and t make the two functions equivalent? Plug these values into the red equation and simplify to demonstrate to yourself that these values make the two functions equivalent.

Exponential Functions

First, please download the exponential function demonstration CDF file: expDemo.cdf

The function in this CDF shows an exponential function with a coefficient b in the exponent, which can be manipulated by the user to hold some value between -2 and 2, and a multiplicative scaling constant a that can also be adjusted by the user. Note that negative values of b demonstrate exponential decay, while positive values show exponential growth.

Squared Exponential Functions

In addition to the ordinary exponential function you just examined, please also download the CDF file for a squared exponential function: expSquaredDemo.cdf

As you adjust the slider to change the value of \mu for the squared exponential function, make a note of how differently the function behaves when \mu is negative compared to when it is positive. Keep what you learned in mind as you move on to the Gaussian function below.

The Gaussian Function

First, please download the Gaussian function demo file: gaussDemo.cdf

The Gaussian function is a statistical distribution named after Carl Friedrich Gauss and is also known as a normal distribution. It is widely used in chemistry and physics. Open up the gaussDemo CDF file and try moving the sliders that control the values of \mu (the mean) and σ (the standard deviation). Have you noticed that the Gaussian function looks very much like a squared exponential function with a negative scaling in the exponent (e.g. e^{-x^2})? Have you also noticed that the mean parameter \mu translates the Gaussian distribution the same way the translating constant did in the parabola example? Another very important thing to note is the fact that the entire function is scaled by a constant ( 1 / \sigma \sqrt{2 \pi} ). Thanks to this scaling, the integral of the Gaussian function over all values of x is equal to 1 no matter what values of \sigma and \mu we choose, a necessary quality for a statistical distribution, called being normalized.

Integrals and Numerical Integration

First, please download the finite difference derivative demo CDF file: integralDemo.cdf

In this CDF learning tool, we have a polynomial f(x) = .5x^3 + 2x^2+x-1 that we'd like to integrate, and where the free parameters are both the limits of integration (xMin and xMax) and the number of boxes that we want to use for taking the numerical integral. Calculating the integral of a function outputs the area under that function (where areas below the x-axis contribute negatively to the area). So just as the true value of a derivative at a given point can be thought of as the slope at that position as we take an infinitessimally small step forward (see finite difference CDF above), we can think of taking the integral as adding up the area of a bunch of rectangles under the curve that are infinitessimally thin in width. Play with the sliders a bit and prove to yourself that the numerical approximation to the integral gets closer to the true value when you use many thin boxes rather than just a few thicker ones. It's a bit like measuring in centimeters vs. meters, in that centimeters give you more precision.

An Integral for Work Done by a Spring

First, please download the work by a spring demo CDF file: workBySpring.cdf

In this CDF learning tool, we apply what we learned from the integration CDF demonstration by applying the same methodology to calculating the amount of work done by a spring, also known as a harmonic oscillator in the language of physics and chemistry. Harmonic oscillators can be used to model all sorts of things that can be stretched or compressed and resist the deformation with some restoring force at least approximately linearly proportional to the distance of deformation. Examples include springs, chemical bonds, rubber bands, etc.

Defining Colors With Three 8-bit Numbers

First, please download the 8-bit Colors CDF file: colors_8bit.cdf

This learning tool is for getting a feel for how the colors red, green, and blue are combined to create all the colors you see on a computer screen. The minimum value for an unsigned (i.e. not defined to handle negative numbers) 8-bit integer of base 2 is zero (00000000), and the maximum value is 255 (11111111). Thus, each pixel on your screen lights up according to a set of three 8-bit numbers, ranging from 0 to 255, that produce all the different colors you see! Try playing with the sliders on this learning tool to prove to yourself that this is true. Note how mixing light colors is different from mixing paint colors, so people who paint might actually find it counterintuitive at first!