Computational Neuroscience is an exciting branch of science, which is helping us understand how simple biophysical processes within cells such as neurons lead to complex and sometimes surprising neural responses, and how these neurons, when connected in circuits can give rise to the wide range of activity patterns underlying human thinking and behavior. To bridge the scales from molecules to mental activity, computer simulations of mathematical models are essential, as it is all too easy for us otherwise to produce descriptions of these complex interacting systems that are internally inconsistent. Simulations allow us to ask “given these ingredients, what is possible?”

Simulation showing how weaker input that is localized can produce spiking when stronger dispersed input does not.
The best way to study computational neuroscience is to write the computer codes that model a particular biological phenomenon, then see what the simulation does when you vary a parameter in the model. Therefore, the course I teach at Brandeis (NBIO 136B) is based around a large number of computer tutorials, in which students, some of whom have no computer-coding background, begin with codes of 5-10 lines that simulate charging of a capacitor, and end up completing codes that simulate the neural underpinnings of learning, pattern recognition, memory, and decision-making. It turns out that very few computational principles are needed to build such codes, making these simulation methods far more easily understood and completed than any mathematical analysis of the systems. However, in the absence of a suitable introductory textbook—most computational neuroscience textbooks are designed by Ph.D. physicists and mathematicians for Ph.D. physicists and mathematicians—it proved difficult for me to use the flipped classroom approach (see below). Therefore, my goal was to create a text that students could read and understand on their own.

Different behaviors of a three-unit circuit as connection-strengths are changed. (Multistable constant activity states, multiple oscillating states, chaotic activity, heteroclinic state sequence). Each color represents firing rate of a unit as a function of time.
In keeping with the goal of the course—to help students gain coding expertise and understand biological systems through manipulations of computer codes—I produced over 100 computer codes (in Matlab) for the book, the vast majority of which are freely available online. (All codes used to produce figures and some tutorial solutions are accessible, but I retained over half of the tutorial solutions in case instructors wish to assign tutorials without students being able to seek a solution elsewhere.)
Learn more at MIT Press.
From the Preface of the book:
I designed this book to help beginning students access the exciting and blossoming field of computational neuroscience and lead them to the point where they can understand, simulate, and analyze the quite complex behaviors of individual neurons and brain circuits. I was motivated to write the book when progressing to the “flipped” or “inverted” classroom approach to teaching, in which much of the time in the classroom is spent assisting students with the computer tutorials while the majority of information-delivery is via students reading the material outside of class. To facilitate this process, I assume less mathematical background of the reader than is required for many similar texts (I confine calculus-based proofs to appendices) and intersperse the text with computer tutorials that can be used in (or outside of) class. Many of the topics are discussed in more depth in the book “Theoretical Neuroscience” by Peter Dayan and Larry Abbott, the book I used to learn theoretical neuroscience and which I recommend for students with a strong mathematical background.
The majority of figures, as well as the tutorials, have associated computer codes available online, at github.com/primon23/Intro-Comp-Neuro, and at my website. I hope these codes may be a useful resource for anyone teaching or wishing to further their understanding of neural systems.