Computer simulations are an integral part of contemporary basic and applied physics and computation is becoming as important as theory and experiment. The ability "to compute" is now part of the essential repertoire of research scientists. It is time for computation to play a similar role in science education.
Since writing the first edition of our text, more courses devoted to the study of physics using computers have been introduced into the physics curriculum, and many more traditional courses are incorporating numerical examples. We are gratified to see that our text has helped shape these innovations. The purpose of our book includes the following:
Our overall goal is to encourage students to learn about science through experience and by asking questions. Our objective always is understanding, not the generation of numbers.
Many of the problems in the text are open-ended, and students are encouraged to develop the skills necessary to determine when they are satisfied with the results they have obtained. There are no answers in the back of the book. We want students to think critically about their work, and not to rely on instructors to tell them when they have the correct answer.
Our experience has been that the best format for achieving the above goals is a laboratory based course. Such a format allows students to proceed at their own pace, encourages students to learn from each other, and makes it possible for students to choose topics of special interest to them. A separate course also reduces the necessity of introducing new computational methods into already overburdened courses. At Clark University and Kalamazoo College, first-year undergraduates to graduate students have taken courses based on drafts of this text. Student users of our text include majors in a variety of disciplines, including students outside the physical sciences.
At first glance, the second edition might seem formidable because it is longer than the first edition and is published in one volume. There are over 700 pages and many of the topics might be unfamiliar. However, most of the text can be understood at some level by students with a minimal background in physics and calculus. No background in programming is assumed. The first five chapters, and parts of all the remaining chapters (except Chapter 18, which requires a background in quantum mechanics) are accessible to students with only introductory physics and calculus. We have included a few exercises to provide more practice in writing simple programs. Most of the more advanced parts of the text are located in the starred sections, the starred problems, and the project sections. They are not prerequisites to the rest of the text, and can be used by advanced students who wish to use this text for independent or guided research projects.
Most of the chapters are relatively independent, but some necessary background is established in certain key chapters. Chapter 2 provides an introduction to programming and to the finite difference solution of a differential equation. Chapter 3 introduces several approaches for the numerical solution of Newton's equations of motion. Similar methods are used in Chapters 4, 5, 8, 9, and the latter half of Chapter 6. Chapters 7 and 11 introduce the ideas of probability and Monte Carlo methods. The latter is used in a variety of contexts in the remaining chapters. An introductory course for students with a limited background might use Chapters 1-3, 7, 11, and selections from other chapters. Parts of Chapters 9 and 10 on waves and electrodynamics require more theoretical background than most of the other chapters.
Many improvements have been made to the text. The most obvious is that the text is no longer divided into two separate parts. Unifying the text under a single cover has made it possible for us to emphasize the unity of physics by providing more connections between the topics. A single volume also allows beginners to see some of the more interesting topics covered in later chapters, and the more advanced students to review the techniques they need from the introductory chapters. Specific changes include the following. We have introduced the more powerful, but still simple Euler-Richardson algorithm early in the text to simulate particle motion. We have significantly enhanced our chapters on chaos, molecular dynamics, normal modes and waves, electrodynamics, and quantum mechanics. We also have introduced an elementary chapter on random processes (Chapter 7) early in the text so that we can use Monte Carlo methods in later chapters. Finally, we have expanded the original chapter on fractals and cellular automata into two chapters, Chapters 14 and 15. We also have made the graphical output of many programs more interesting and colorful.
Each chapter contains a brief discussion of the important physical concepts, and is followed by program listings, problems, and relevant questions. The discussion, programs, and problems are interrelated, and in general, the discussion will be more readily understood after the problems are completed. All of the problems should be read whether or not they are attempted. The programs are designed to be simple and easy to read, rather than elegant or efficient. We regard the program listings as text for the reader rather than source code for the computer. To do most of the problems, the reader must understand the logic of the programs, and hence the logic of the underlying physical system. Most of the problems require at least some modification of the programs. The problems are organized so that the earlier ones in a chapter provide the basis for the later problems in the same chapter and in succeeding chapters.
We have added projects to the end of many chapters. These projects are similar in scope to the starred problems, but are frequently more open-ended and are appropriate for independent research projects. The recommended readings at the end of each chapter have been selected for their pedagogical value rather than for completeness or for historical accuracy. We apologize to our colleagues whose work has been inadvertently omitted, and we would appreciate suggestions for new and additional references.
We have decided to continue using True BASIC as the programming language discussed in the body of the text. Our motivation for this choice is that True BASIC is easy to learn and use, has true subroutines and excellent graphics capabilities, is inexpensive, and is identical on computers using DOS, Apple Macintosh, and the UNIX operating systems. Readers familiar with other dialects of BASIC should have few problems adapting the programs in the text. The syntax of True BASIC is very similar to Fortran, and hence learning True BASIC provides an easy route to that important scientific language. We discuss the basic syntax of Fortran and C in the appendices. For our purposes, the similarities of BASIC, Fortran, and C are much greater than their differences. Students and instructors may use any language they wish, while treating our True BASIC program listings as pseudocode.
We believe that typing in the programs line-by-line will help students learn programming more easily. The programs have been carefully checked for errors and typos, and the programs have been incorporated into the text directly from the source code. Nevertheless, there may be subtle errors of which we are not aware. It is our experience that few programs are perfect, and we cannot guarantee that our programs are free of error.
We began the revision of our text less than five years after the publication of the first edition. The rate of change in computational science is rapid, and we expect that further revisions will be necessary. To encourage reader feedback and to provide a forum for incorporating changes, we have set up a World Wide Web server devoted to users of our text and to faculty and students using computer simulations in an educational context. Our plan is to continuously update our text, so that everyone can benefit from the experience of others. All the programs in the text can be downloaded for noncommercial use from the server. We hope that our home page zzzz (http://www.clarku.edu/~sip will serve as a forum for faculty and students to share ideas and programs and to make comments, corrections, and suggestions. In particular, we have posted suggestions for the use of the various chapters by instructors.
We acknowledge generous support from the National Science Foundation for an ILI grant to develop curriculum materials for a laboratory-based course on computer simulations at the lower division level, and a grant to develop new computer simulation materials at the upper division level. This support has helped us to find time to write our text and to provide workshops and develop other curricular materials essential to expanding the number of institutions that can offer courses similar to ours.
The text was produced using Textures. We thank Paul C. Anagnostopoulos of Windfall Software who wrote the macros for the book and who patiently explained the vagaries of TeX. Almost all the figures were written in PostScript by Louis Colonna-Romano. In some cases they were edited using Illustrator 5.5. It is difficult to imagine how we could have produced the figures without his help. Lou also read every chapter, ran many of the programs, and made numerous helpful comments and suggestions. We enjoyed working with our former editor, Stuart Johnson, who encouraged us to write a second edition and waited patiently for us to finish it while never losing his sense of humor. We also thank Jennifer Albanese, Associate Editor for Physics, who coordinated our project, and Mona Zeftel for her help with the technical aspects of book publishing. We look forward to working with our new editor at Addison-Wesley, Julia Berrisford, on future projects.
Many colleagues and students have generously commented on preliminary drafts of the second edition and have given encouragement and advice. We thank the students in our classes at Clark and Kalamazoo for their patience and good humor while they suffered through various drafts, and in particular mention students Jeremy Carfi, Aaron Isabelle, Faina Ryvkin, and Jonathan Wall for their helpful suggestions. We thank our physics colleagues at Clark and Kalamazoo for their encouragement and willingness to allow us to take some extra time to complete this text, and our secretaries Sujata Davis and Peggy Cauchy for their assistance. We also acknowledge Bill Klein, Richard Brower, and Roscoe Giles and their colleagues at Boston University for their encouragement and suggestions. We wish to thank Kenneth Basye, Marc Bourzutschy, Alyce Brady, Denis Donnelly, Robert Ehrlich, Allan Ferrenberg, Roger Kohin, Jon Machta, Andrew Mel'cuk, Mark Novotny, George Phillies, Dennis Rapaport, and Dietrich Stauffer for reviewing sections of the text. We are specially indebted to Peter Reynolds and Fred Harris who reviewed large portions of the text. Of course, the responsibility for the remaining errors, typos, and unclear passages is ours. We also wish to acknowledge the work of many people who have contributed to the computer simulation column in Computers in Physics. Their contributions have allowed us to learn about new developments, much of which we have incorporated into our text. One of us thanks Donna and Mark Mogul, the proprietors of Sweetreats for providing the coffee and bagels that continue to sustain members of the Clark physics department.
Finally, we are grateful to our wives, Patti Gould and Andrea Moll Tobochnik, and to our children, Joshua, Emily, and Evan Gould and Steven and Howard Tobochnik, for their patience and understanding during the course of this work.