Prerequisites and Resources#
There are no formal prerequisites for the course, but I will expect you to be comfortable with the material discussed here, which contains links to additional resources should you need to refresh your knowledge. Please work with your classmates to try to share knowledge as needed. Generally, I will expect familiarity with the following:
- Domain Specific Preparation:
The most important prerequisite is the ability to communicate about and formulate complex problems in your field of study that would benefit from the techniques covered in this course. Students will expected to actively engage with the techniques taught in this course, apply them to relevant problems in their domain of expertise, and to communicate about the efficacy to the class.
- Linear Algebra
Properties of Linear Operators (Self-Adjoint, Hermitian, Unitary, etc.), Matrix Factorization including the Singular Value Decomposition, Bases and Orthogonalization via Gram-Schmidt.
- Real and Complex Analysis
Topology (notions of continuity), Calculus, Banach spaces (e.g. conditions for the existence of extrema), Fourier Analysis, Contour Integration, Conformal Maps.
- Differential Equations
Formulation of differential equations, existence of solutions and boundary value requirements, Sturm-Liouville Theory.
- Programming Skills
There are some specific skills you will need for this course, including basic programming skills, distributed version control, how to connect remotely to computers etc. with SSH. We will use the CoCalc platform so you do not need to install any of the software on your computer.
Version Control#
You should know how to use a distributed version control system such as Git or Mercurial. This project assumes you can use Git, but I actually prefer Mercurial which I find has a much more intuitive interface. Git is much more popular due to GitHub and GitLab (but keep an eye on Heptapod – a fork of GitLab for Mercurial), and you are likely to find more resources about Git online. Also, Heptapod is not yet ready for prime time, so GitLab or GitHub are to be preferred.
Note
If you install the hg-git plugin, then you can use Mercurial to work with Git repos. This is what I generally do, but it adds some potential complications, so I do not recommend it unless you are comfortable with Mercurial:
hg clone https://gitlab.com/wsu-courses/physics-581-physics-inspired-computation.git
To enable Mercurial with a useful set of tools, you can do the following:
python3 -m pip install --upgrade --user pip mercurial hg-evolve hg-git jupytext black
This allows you to use the Heptapod workflow
If you are not familiar with a distributed version control system like Mercurial or Git, the Software Carpentry program has two relevant courses you should work through completely:
Software Carpentry: The Unix Shell. Please work-though the course (about 4.5h) if you are not familiar with the Unix command line.
Software Carpentry: Version Control with Git. Please work-though the course (about 3h) if you are not familiar with Git.
Python, SciPy, NumPy, etc.#
While not absolutely required, a good working knowledge of [Python] is needed. You will also need to develop an understanding of the SciPy ecosystem, especially NumPy, Matplotlib, and the SciPy library itself. The following are a good place to start learning about these:
Official Python Tutorial: A good starting point is to read this tutorial. It goes into quite a few details, but will give you a good idea of what is possible with python and the standard library.
Software Carpentry: Programming with Python: The Software Carpentry course provides a pretty good gentle introduction (~7.5h) although it is quite data focused.
[Gezerlis, 2020], “Numerical Methods in Physics with Python” (2020): The course textbook has a fairly gentle introduction to basic python and then quickly gets into some of the more important points about array processing with NumPy which will be central to this course.
[VanderPlas, 2016], J. VanderPlas: “Python Data Science Handbook” (2016): Jake’s book assumes you know Python, then dives into some of the more interesting features for data analysis, including NumPy, [Pandas], etc. Definitely read Chapter 2 about NumPy and Chapter 4 about visualizing with Matplotlib,
Scipy Lecture Notes: “One document to learn numerics, science, and data with Python”. An in-depth tour of NumPy, SciPy, Matplotlib, etc.
CoCalc#
You should be familiar with CoCalc; specifically:
Creating an account.
Creating projects.
Using Jupyter Notebooks.
Adding SSH keys to your project so you can use SSH to connect.
References#
SSH#
You should know how to use SSH to connect to remote servers (in particular CoCalc)
with password-less login using ssh-keygen to generate a key, ssh-agent to add this
key, and the forwarding this key so you can use this to authenticate to GitLab etc.