Numerical Methods (cspp58001)

Spring 2011




Professor: Andrew Siegel
Location : Reyerson 277
Time : Tue 5:30-8:30
Office: Ry175-B
Email:asiegel@cs.uchicago.edu
Office Hours: Tue 3:30-5:30 and by appointment

TA: Vijay Mahadevan
email: vijay.m@gmail.com
Office Hours:

Listhost: http://mailman.cs.uchicago.edu/mailman/listinfo/cspp58001

Course Description: This is a practical programming course focused on the basic theory and efficient implementation of a broad sampling of common numerical methods. Each topic will be introduced conceptually followed by detailed exercises focused on both prototyping (using matlab) and programming the key foundational algorithms efficiently on modern (serial) architectures. The ideal student in this course would have a strong interest in the use of computer modeling as predictive tool in a range of discplines -- for example risk management, optimized engineering design, safety analysis, etc. The numerical methods studied in this course underlie the modeling and simulation of a huge range of physical and social phenomena, and are being put to increasing use to an increasing extent in industrial applications. After successfully completing this course, a student should have the necessary foundation to quickly gain expertise in any application-specific area of computer modeling.

There is no formal pre-requisite for the course, though a familiarity with or strong interest in basic concepts of calculus and linear algebra will be helpful.

Course Format: Combination of instructor lecture, student presentations, and group discussion.

Grading: Bi-weekly homework assignments only. No exams.

Getting Help: When possible, all technical questions should be discussed over the course listhost (see link above). Otherwise, please consult TA first and then professor if further assistance is required.

Suggested texts:
Numerical Recipes in C. Free online edition here
Strang, "Linear Algebra and Its Applications"


Required Computing Resources:
Matlab: available on CS cluster; personal student version recommended
Any C/C++, fortran, or Java compiler


Lesson
directory (including homeworks, examples, etc.)

Lesson 1
Part I: Standards/libraries for numerical programming in C; Floating point representation
Part II: Review of relevant linear algebra basics; Gaussian elimination with backsubstitution, partial and full pivoting, roundoff error
Homework: homework 1
Readings: What every computer scientist needs to know about floating point: link; Numerical Recipes Ch. 1, 2.0-2.1

Lesson 2
Part I: Gauss Jordan elimination and calculation of inverse, many right hand sides, non-square matrices: ref, rref
Part II: LU Decomposition, discussion of algorithmic complexity; tridiagonal systems; norm and condition number
Readings: Numerical Recipes Ch. 2.2-2.4

Lesson 3:
Part I: a)Root finding methods: Newton-Raphson, secant, bisection; b)least squares
Part II: Eigenvalues/vectors: basic theory
Homework: homework 2
Readings: Numerical Recipes Ch. 9; Strang ch. 6

Lesson 4:
Part I: Eigenvector factorization: A = S Λ S-1; powers of A
Part II: Computing largest Eigenvalue/eigenvector numerically: power iteration; examples

Lesson 5:
Part I: A = Q R; Gramm Schmidt; calculating eigenvalues numerically
Part II: Norm, condition number, stability
Homework: homework 3

Lesson 6:
part I: More on QR, rotation matrices, similarity transformations

Lesson 7:
Part I: Complex eigenvalues/eigenvectors; derivation of cubic splines
Part II: Method of Steepest Descent
Readings: Very intuitive tutorial

Lesson 8:
Part I: Conjugate gradient method
Part II: Large sparse systems derived from PDEs
A very nice introductory reference
Homework: homework 4

Lesson 9:
Part IJacobi iteration, Gauss-Seidel, and SOR
Part II Overview of Pre-conditioning (Vijay)

Lesson 10:
Discrete Fourier Transforms
Systems of ODEs
Proper Orthogonal Decomposition Lesson 11:
Linear Programming and the Simplex Method
Finite difference solutions to canonical PDEs (diffusion equation, wave equation)