Mathematica

I have been using Mathematica for about ten years. I have found the design philosophy of Mathematica to be practical for not just performing complex analytical derivations but also for manipulating data of all sorts. Where MATLAB is based on the matrix, Mathematica is based on the function. Algebra, Mathematica's forte, is a pattern recognition process followed by manipulation of functions and their arguments. Geometry, text, and numeric files all can be abstracted as nested functions and, therefore, can be manipulated "algebraically." The power of this cannot be overstated. Mathematica can analyze information in all formats, from abstract theory to measured results. Therefore, it is usually the first and last tool I use in every project, where the analytical derivations, the simulation proof-of-concept, and the experimental results are integrated to yield the final figures.

Mathematica was one of the first programs to use the notebook interface, where text, equations, images, plots, and code are all part of one document. This doesn’t make much sense in traditional programming, where one would have a markdown file for documentation, a code file, and a testing file. However, in conventional programming, one usually has a stronger sense of what needs to be done. This is why we make all of those OOP class diagrams. However, in Science, our work and analysis unfold in real time. We don’t know what will work and the discovery process forms a narrative. In science, failed attempts to solve a problem are still valuable information. However, in traditional code, this would quickly be deleted. This was rediscovered in the Jupyter Project, which copies a lot of the functionality of the Mathematica notebook. Further reading on this can be found under the terms interactive computing or exploratory computing.

Particularly for applied physics, one often begins with some fundamental equations and then derives some analytical result. While the goal is to work algebraically until some final formula, even with Mathematica, the math can become intractable quickly. Once that boundary is hit, Mathematica allows the work to smoothly transition into numerical analysis.

However, despite being a firm believer that Mathematica is the best programming language for scientific work, I have been transitioning to Python for some number of years. The Jupyter project has satisfied my need for the notebook interface. The ubiquity of Python has made it easier to share code.

I am an expert in Mathematica and have authored hundreds of files that I've for various purposes. Some of the more interesting things I've done with it are:

  • proximity correction for e-beam lithography

  • solving non-linear differential equations,

  • overlaying 3D geometries with 2D graphics

  • finding optimal LED blinking patterns that appear smooth

  • simulating attack strategies in a "dog-fight"

  • translating code from one computer language to another

  • finding analytical solutions to generic n-layer electromagnetic boundary problems in cartesian, cylindrical, and spherical coordinate systems

  • finding far-field diffraction patterns from apertures

  • parameter extraction of complicated optical transmission and reflection data

  • processing ultrasound audio files

  • processing ultrasound audio files

  • learning how detector nonlinearities affect FTIR measurements

  • finding the induced dipole on a gold nanorod

  • post-processing AFM images to remove artifacts

  • processing diffraction patterns to determine aperture properties

  • solving for the deflections in timber-frame structures with various joint structures

  • a finite-difference frequency-domain (FDFD) E&M solver

  • objective-first inverse-design topology optimizer