Preface
Computational science involves using mathematics, computer science, and domain knowledge to solve complex problems in the domain of interest. The ability to represent real-world systems with mathematical models and use computers to simulate and analyze the behavior of these models is now an essential part of research in the natural, social, and engineering sciences and in design work performed by engineers. The goal of this book is to introduce new students in science and engineering to fundamental concepts and tools of computational science and apply these ideas to example problems in several areas of science and engineering.
We will begin our study of computational science with an introduction to computational thinking, which is concerned with mental skills and practices that facilitate using computation to solve problems. Computational thinking is then applied to developing a strategy to create mathematical models that can be studied using computer simulation. Next, basic programming concepts are introduced within the context of a science or engineering problem. We introduce the Numpy package, which is critical for performing numerical computations in Python. Principles of scientific visualization are developed with examples created using Python visualization packages. We introduce the concept of a dynamical system and how to develop a model of such a system. We develop techniques for the numerical simulation of dynamical system models. Next, we investigate several kinds of stochastic models and using Monte Carlo methods to study such models. The book concludes with several project suggestions that require practicing the modeling and programming tools developed in the rest of the book.
Many books on computational science or computational methods in science and engineering assume that the student has a well-developed mathematical background, including courses in calculus and differential equations. Since the goal of this book is to expose first-year students to computational science techniques, and these students have typically not taken calculus in high school, we assume the student is ready to take calculus but has not yet done so. Some calculus concepts are introduced in the book, but mainly through geometrical interpretation rather than through rigorous mathematical definitions. Dynamical systems models, defined using differential equations, are introduced, but their properties are explored primarily through computer simulation rather than through analytical techniques.
No programming experience is assumed by the book. The necessary techniques are developed simultaneously with computational science ideas. Students will gain programming experience in the context of using programming to solve science and engineering problems.
Two kinds of programming exercises are provided at the end of each chapter: program modification problems and program development problems. The modification problems require adapting a code developed in the chapter to a new but related problem. The development problems ask students to solve a non-trivial problem not yet addressed in the text, including developing all code required for the solution. These development problems will often require integrating ideas from previous chapters in addition to ideas developed in the chapter posing the problem.
Students who master the concepts developed in this book and complete the program modification and program development problems should be ready to use computation in many advanced courses required by science and engineering majors. Students should also be ready to increase their knowledge of computational science through the independent study of many library and online resources.