MAT 420, Scientific Computing

Catalog description

Survey and application of programming languages, libraries, and scientific visualization tools. Programming assignments emphasize software development skills. Prerequisites: MAT 274 [Introductory Differential Equations], MAT 342 [Linear Algebra], and CSE 200 [Introduction to Computer Science]; their equivalents; or instructor permission.

Online course supplements (updated Sept. 3)

Class schedule

Final exam and last talks

We will meet in the computer lab during our scheduled final exam time:
Thursday, Dec. 6, 12:20-2:10 p.m.
The final exam is a take-home exam. Please bring a printout of your code to class on Friday and also email a copy to mat420hw at gmail.com (see instructions in the final exam copy).

In-class and homework assignments

Intended audience

This course is designed for advanced undergraduate and beginning graduate students who want to learn software development skills that are useful for a computer-intensive research project or internship in the mathematical sciences. Homework assignments will consist of programming exercises to implement software utilities, simple numerical methods, and data analysis tools. We will use tools that are commonly found in a Unix/Posix environment.

Expected background

You should have the equivalent of one year (two semesters) of computer programming coursework or the equivalent experience. Any structured programming language is fine (e.g., Java, C, C++). Examples of the kinds of things that you should know include: how to call one routine from another; how to write an iterative loop; and how to declare and index an array of values.

You should have had the equivalent of one year of calculus and analytic geometry and a basic knowledge of linear algebra (e.g., how to multiply matrices, the relationship between matrices and the solution of linear systems of equations). Some exposure to ordinary differential equations (e.g., the exponential growth equation) is helpful but not essential.

What the course covers

The course is divided into five parts.

  1. (1 week) Introduction to the Unix/Linux operating system, including the file system and simple utilities, command-line arguments; standard input, output and error; file indirection; pipes; return codes.
  2. (2 weeks) Scripting languages for simple utilities and programs: the Korn shell; introduction to Python.
  3. (4 weeks) Fortran 95 and Netlib. The Fortran language provides modern facilities for control of program flow; array manipulation; dynamic data allocation; and elements of object-oriented programming, including data structures with access control. The facilities are designed for efficiency, ease of use, and robustness. Netlib is the largest repository of reusable software code in existence, comprising four decades' worth of thoroughly tested, well documented, public domain codes for a wide variety of scientific programming tasks.
  4. (3 weeks) Introduction to floating-point arithmetic, with some emphasis on the IEEE 754 standard.
  5. (3-4 weeks) C and C++. We will discuss some of the facilities of the C++ Standard Template Library that are of particular interest in numerical programming. Some discussion of traits classes will also be included if time allows.