Science understands reality by designing models which allow to explain and predict observations of the real world.
Simulation is the computation of the implications of a scientific model.
Computers have been invented in order to run simulations fast and reliably, thus allowing for the investigation of complex models.
In this course we'll confront the fundamental question "What is a good simulation?" and we'll progress toward an answer by introducing key theoretical ideas and by learning how to perform simulations using the Julia programming language.
I'm a computational scientist who started his scientific career in the theory of multi-agent systems, focusing on algorithmic and probabilistic aspects, and then went on tackling questions in computational neuroscience and artificial neural networks. Recently, as an effective altruist, I’ve become interested in Scientific Machine Learning, with the goal of contributing to a more environmentally sustainable society.
The theory behind performing simulations is still not well organized. Here are some references that I found (but I do not endorse any specific one yet). If you have a look at any of them, let me know what you think.
First some references mostly related to programming simulations (which is, after all, our ultimate goal):
Allen B. Downey. Modeling and Simulation in Python. (Green Tea Press). Very light book, doesn't even assume familiarity with Python. Not recommended for graduate students.
Press, W. H., Teukolsky, S. A., Vetterling, W. T. & Flannery, B. P. Numerical Recipes 3rd Edition: The Art of Scientific Computing. (Cambridge University Press, 2007). Often regarded as the bible of numerical methods for scientific computing.
Here are some which deals mainly with the mathematical aspects (probability and statistics) of designing and performing simulations:
Bratley, P., Fox, B. L. & Schrage, L. E. A Guide to Simulation. (Springer US, 1983). doi:10.1007/978-1-4684-0167-7. Old, especially the programming part, but the math part seems good.
Ross, S. M. Simulation. (Academic Press, 2012). Looks like a good book as for the probabilistic and statistical background necessary to perform simulations.
Santner, T. J., Williams, B. J. & Notz, W. I. The Design and Analysis of Computer Experiments. (Springer New York : Imprint: Springer, 2018). doi:10.1007/978-1-4939-8847-1. Seems to provide a solid mathematical statistics foundation.
Here's a philosophy book on the topic:
Finally another book which takes a general perspective and that I didn't feel like listing in previous groups:
Of course there are many more, but these are the one that caught my attention. Feel free to propose other books that you think deserve to be in the list more than some of those already listed.
This mini-course aims at making you curious about the topic of scientific computing and, more generally, the use of the Julia language for your research.
If you want to learn more, check out these courses:
Introduction to Computational Thinking is an MIT introductory online course to several important ideas in Computer Science using the Julia language, and a Julia library called Pluto to explore those ideas with interactive notebooks.
Parallel Computing and Scientific Machine Learning (SciML): Methods and Applications is an MIT advanced online course thought by Chris Rackauckas about scientific computing with a focus on machine learning (hence, scientific machine learning). I particularly recommend this latter course and whatever can allow you to follow it.
Julia is a modern language for scientific computing that strive to be as easy as Python and as fast as C. Installing it is as easy as downloading a file and executing it, and there are tons of (friendly!) resources for learning and using it:
The officially supported IDE for Julia is VSCode.
The first tip about using it is use the command palette!
After installing it, get the julia-vscode extension. Besides all the usual IDE features, you can easily interact with an embedded Julia REPL:
# open the `.jmd` file of this notebook and press `alt+Enter` with the cursor inside this cell π^2
9.869604401089358
Advertisement. Besides programming in Julia, VSCode is a great editor, e.g. for writing LaTeX. It also easily allow pair programming (e.g. editing like in Google Docs or Overleaf), and to easily work on a remote machine.