Since the mid 1980's, we in the Department of Physics at Lawrence University have been developing curricular components that

Over the years, a wide assortment of instructional materials has been drafted and redrafted. This book brings these materials together into a single publication with the hope that it may prove useful to others who seek to achieve these same or similar objectives.

With these objectives in mind, this book consciously focuses on helping students get started. It is not designed to be comprehensive or exhaustive, either in laying out the capabilities of any particular computational resource or in discussing numerical algorithms. Students must understand throughout that they must refer regularly to vendors' manuals and on-line help files for details beyond those discussed in the book---details that may, in fact, be necessary for successful completion of some of the exercises. The need for that activity is noted here; repeated reminders will not be included in the body of the book.

The book is also not a book about computational physics; it addresses uses of computational tools. Indeed, the course at Lawrence in which this book is used would not in any way replace a course in computational physics. Rather, the materials treated here should provide strong background for a subsequent, junior-senior level course in computational physics, which would---I believe---be substantially enhanced if students came to it already familiar with the resources on which this book concentrates.

One major difficulty in creating materials on computational topics is that different potential users favor different hardware platforms and software packages. Especially in the computational arena, the variety of options and combinations is so great that any single choice (or coordinated set of choices) is bound to limit the usefulness of the product to a small subset of all potential users. This book addresses that difficulty by being assembled from a wide assortment of components, some of which---the generic components---will be included in all versions and others of which---those specific to particular software packages---will be included only if the potential user requests them. Thus, the specific software and hardware discussed in the book can be tailored to the spectrum of resources available at the instructor's site. Two versions may well differ in numerous respects. One may include the generic components and the components that discuss[1] IDL, MAPLE, C (with Numerical Recipes), and LaTeX while another may include the generic components and the components that focus on MATLAB, Mathematica, and FORTRAN (including Numerical Recipes). The index contains only entries from the included chapters and sections. To facilitate communication among users of different versions, however, chapter and section numbers and the numbers identifying package-independent exercises are preserved in all versions. In a version that does not include FORTRAN, for example, the FORTRAN sections will be omitted from Chapters 7, 9, 11 and 12, Chapter 10---for which FORTRAN is prerequisite---will be omitted altogether, and FORTRAN-specific exercises will be omitted from the end-of-chapter exercises as well. Because of version-specific omissions such as those just described, there will therefore be gaps in the chapter, section and exercise numbers in any version that does not include all options. In contrast, equation numbers, figure numbers, table numbers, and footnote numbers advance from one without gaps within each chapter, and page numbers run continuously from the beginning of the book to the end. In consequence, the numbers assigned to identical equations, figures, tables, footnotes, and pages may differ from version to version, but the numbers assigned to chapters and sections with identical titles and the numbers assigned to identical exercises will be the same in all versions (and will have gaps reflecting omitted chapters, sections, and exercises). Such flexibility would be impossible were we not able to exploit features of LaTeX, including the particular capabilities of the ifthen and makeidx packages and the auxiliary program makeindex, to assemble the PostScript files that subsequently can be printed to obtain each version.

Even among sites that use the same spectrum of hardware and software, however, some aspects of local environments remain unique to individual sites. Local rules of citizenship, the features and elementary resources of the local operating system, local practices and policies governing structuring of public directories, assignment of accounts and passwords, backup schedules, and after-hours access, licensing restrictions on proprietary software, means to launch particular application programs, compile user-written FORTRAN and/or C programs, and access printers, and numerous other aspects are subject to considerable local variation. This book does not constrain local options in these matters. Instead, its users must draft a site-specific supplement, which we will refer to as the Local Guide, to which individuals should refer for site-specific particulars. A LaTeX template for that guide, specifically the one used at Lawrence, is available to users of this book, but it will require editing to reflect local practices. In particular, to give local sites flexibility in configuring their environments, we have in the book used symbols like $HEAD, $IDLHEAD, and $NRHEAD to stand for paths to the specific directories that sit at the head of particular directory trees. All such symbols must be expanded as described in the Local Guide when commands or statements illustrated in the book are submitted to the user's machine.

With the broadest brush, Chapter 1 stands alone. The next several chapters introduce specific array processors (Chapter 2 on IDL, Chapter 3 on MATLAB), computer algebra systems (Chapter 4 on MACSYMA, Chapter 5 on MAPLE, Chapter 6 on Mathematica), programming languages (Chapter 7---with sections on FORTRAN and C), and subroutine libraries (Chapter 8 on Numerical Recipes). And the remaining chapters address several important categories of computational processing (Chapters 9 and 10 on solving ordinary differential equations, Chapter 11 on evaluating integrals, and Chapter 12 on finding roots). Each of Chapters 9, 11, and 12 begins with a (generic) section in which several problems drawn from subareas of physics and using the computational technique on which the chapter focuses are laid out. Each of those chapters then continues with one or more (optional) sections in which some of the identified problems are addressed with whatever computer algebra systems are included in the version, a (generic) section on numerical approaches to the category of problem on which the chapter focuses, and several (optional) sections in which some of the problems laid out in the first section are addressed with whatever array processors, computer algebra systems, and programming languages are included in the version. Each chapter concludes with a collection of exercises using the techniques---both symbolic and numerical---of the chapter. The appendices introduce a publishing system (Appendix A on LaTeX and a program for producing drawings (Appendix B on TGIF). In time (and in subsequent editions), other options than those available in the first edition may be added.

The order of presentation in the book does not compel any particular order of treatment in a course or program of self-study. To be sure, some later sections depend on some earlier sections, but the linkages are not particularly tight. In the Lawrence context, for example, we start with the chapters and appendices introducing IDL, MAPLE, and LaTeX; move to the IDL and MAPLE portions of the chapter on ordinary differential equations (ODEs), the FORTRAN portions of the chapter on programming, the FORTRAN portions of the chapter on ODEs, and the chapter introducing LSODE; and finally address the IDL, MAPLE, and FORTRAN portions of the chapters on integration and root finding.

Despite the organization of the chapters by program or by computational technique involved, the focus throughout is on physical contexts. The materials are designed to be used in conjunction with intermediate level courses, not introductory courses. While the illustrations of computational procedures highlight significant physical contexts and most of the examples and suggested exercises emerge from interesting physical situations, the objective is for students to become both fluent and wary in using computational resources in application to these physical situations, not to dwell excessively on the microscopic details of numerical analysis or to teach them the underlying physics (except insofar as successful computer-based solution of problems underscores the power of the fundamental physical ideas). The students are assumed to have completed an introductory survey course and to be embarking on intermediate level studies as they undertake a study of this book. We focus not so much on the set up of the situations---that is assumed to be the province of other courses---as on computer-based techniques and strategies for determining the solution once the set up is complete. Examples are drawn from classical mechanics, classical electricity and magnetism, thermal physics, quantum mechanics, curve fitting, DC and AC circuit theory, optics, and several other areas.

[1] Many of the packages mentioned in this list are commercial and proprietary, and the names are registered trademarks of the respective vendors. Full contact information for all mentioned packages will be found in Appendix Z.