P573: Introduction to Scientific Computing

P573, Introduction to Scientific Computing - Fall 2017
8:00 - 9:15 AM, Monday and Wednesday
102 Lindley Hall

Quick Links:

Not all of these exist yet, but will be filled in as the semester trudges onwards.

General Information



Mathematics M343 and one of M303 or M301, and a working knowledge of C or C++ or Fortran. The requirement in mathematics means Because this is the one area that raises most questions, the computational requirements include: Read this prerequisite check to see if you have the kind of math and coding abilities to succeed in P573. This is not a test to hand in; it is strictly for your own edification.


No textbook will be required or followed. The following may be useful references, but only for small parts of the course material. Math/CS books are expensive and CS books are quickly outdated. Don't go out and buy any of the following until/unless you are sure you would find them useful, and don't use them as a measure of what is going to be in the course. As an example the first two references are mathematical and emphasize the derivation and error analysis of numerical linear algebraic algorithms - but all we will need and use are some of the algorithms themselves, the implementation details, and occasionally the results of the analyses. The rest is better addressed in a numerical analysis class.

In general all of the material you need will be presented in class, is available via the Web, or (in the case of Matlab) through Matlab's help, lookfor, and other commands.

Introduction to Matrix Computations by G.W. Stewart is just what the name says; it gives the basic linear algebra ideas required.

Matrix Computations by Golub and van Loan is a more definitive but higher-level reference work, with numerical linear algebra algorithms clearly stated in an implementable form.

High Performance Computing by Kevin Dowd covers some performance optimization and measurement techniques.

Mastering Matlab by Hanselman and Littlefield is one of the more definitive reference books for Matlab, and the one I use the most for my own coding and debugging sessions. Matlab will be used for analyzing and plotting results from some of the assignments. For the most part scripts will be provided and they will also run using Octave, an open source Matlab wannabe. Since this is not being used as a textbook, you can save money by getting an earlier edition (but get one for Matlab version 6 or higher). Better yet, don't buy a book at all. Matlab has extensive on and off-line documentation and help, such that you don't need a book.

Computer Accounts:

If you have access or ownership of a Unix-based system in your lab or office, use it. You'll want to develop the tools on the system you use in real life anyway. Otherwise all CS students have accounts on the silo Linux system. Students from outside the CS department need to give me their UITS login to have accounts created. If you use UITS platforms, they may be research computers and require some professor to sponsor the account, unless you already have one.

If your lab or research group has other machines, use them as well - in the long run, those are the machines to learn how to use effectively. However, assignments will require your codes to run on silo, to avoid issues of trying to test and grade codes running on potentially dozens of different systems.

Course Description

Open to students from all scientific, engineering, and mathematical disciplines, this course provides an overview of computer hardware, software, and numerical methods that are useful on scientific workstations and supercomputers. Topics include high-performance computer architectures, software tools and packages, characteristics of commonly used numerical methods, graphical presentation of results, and performance analysis and improvement.

The course is not the same as numerical analysis, which concentrates on the study of convergence, stability, and error analysis in numerical methods. For that, students should take Math 571-572. Although numerical analysis is an important component of scientific computing, it is only a part of the field. Instead, this course concentrates on

The last item is the most important one. The single most fundamental skill you will need to master is load-store analysis, and that is the pass/fail criterion. Secondary tools and skills include how to recognize in practice when problems in floating point arithmetic occur, how to write code that gives scientifically reproducible results, how to efficiently implement linear algebraic computational operations, and how to time and profile parts of codes.

P573 is not parallel computing. Other courses including CSci B673 concentrates on that aspect of scientific computing.

Some basic Matlab is coverd in the course, a language that provides interactive graphing capabilities and more importantly gives an easy way to recognize and use numerical vector and matrix operations. Matlab is a rapid prototyping tool with easily-accessed graphics. Mostly scripts will be provided for you and basic Matlab will be taught as needed in lectures.

Grading Policies

Grades are based on small projects, a midterm, and a final. Each programming assignment will have questions intended to begin your thinking process, not end it. Grading will also include the questions you raise and answer in these projects. For example, if the question is "Which of the methods A and B is faster," simply saying "A" is not sufficient. You should also ask (and try to answer) the underlying question "What measure of fast is appropriate here?", "Why is A faster?", etc. Although some assignments can be done in teams, in all cases you must follow my attribution of work policy.

Grading percentages:

All of the web pages posted should have a footer like this, giving a time-stamped log of any changes. Use that to know when something has changed or been added.

History of this page:

  1. Started: 21 Aug 2016, 05:46 PM
  2. Modified: Tue 06 Sept 2016, 12:35 AM to add AI details
  3. Modified: Mon 28 Aug 2017, 01:21 PM for Fall 2017 updates
  4. Last Modified: Mon 28 Aug 2017, 01:21 PM