P573: Introduction to Scientific Computing

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

Quick Links:

General Information


Associate Instructor:



Mathematics M343 and one of M303 or M301, and a working knowledge of Fortran or C/C++. The requirement in mathematics means The computational requirements include:


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 Guide by Higham and Higham is an extremely good starting book to learn Matlab.

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 CS Department system, including the burrow cluster. 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 me or another professor to sponsor the account (unless you already have one).

Note that you don't have to physically sit at the console of those machines, and can just login to them remotely via ssh, which provides for secure login and file transfer. For Windows platforms ssh is available as the Putty app, downloadable from UITS's IUWare and other places. ssh is on all IU Unix machines. Your Kerberos password (from IU's ADS) is what will work on both CS and UITS systems, except for CS research systems.

We will use some basic Matlab 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. If you use a Windows-based machine as your console and remotely login to a IU machine, you may also want to install and use a tool like hummingbird, which allows graphics windows from a remote Unix-based machine to be opened on your local Windows machine. Another option (somewhat clunky) is to use Matlab's print command to save the graphics window as a file. To test this, type

    % matlab -nojvm -nosplash

in a console or command line interface on the remote Unix system. Then test the ability to view graphics dynamically via the command

    > plot(randn(1, 12))

If that does not open a window on your console, the clunky way is

    > print -dpng graph

which will create a file called graph.png, that you can then transfer over to your own platform to view. Matlab should be available on all CS and IU Unix and MS Windows systems. Matlab is available for abut $99 to students, to install on a personal computer. Buying Matlab is not required, but if you find accessing a system with it difficult or inconvenient, it is an option.

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, some assignments will require your codes to run on a specified system so that we can have comparable results across the class.

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 just parallel computing. Another course, CSci B673, concentrates on that aspect of scientific computing.

Matlab will be as a rapid prototyping tool and for its easily-accessed graphics. The needed skills in Matlab will be taught as part of the course, but for those who would like a preview the Matlab Tutorial material prepared by Dave Hart is useful, and a good Matlab tutorial is at the University of Florida. Another tutorial, posted on is at Michigan Technical University . However, all that is needed will be covered in class, so don't go out and memorize Web pages ... yet.

Grading Policies

Grades are based on a final and small projects which involve writing and/or analyzing computer programs, accompanied by written reports. Each 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.

Grading percentages:

Attribution of Work

Leveraging the existing base of tools, software, knowledge, and earlier explorations is the only practical way to carry out science and engineering via computational methods.

Cheating in this class is nearly impossible, because the course encourages collaboration, code scavaging, and using publically available resources available whenever possible. It's why they gave us ears, the Internet, the ability to read and write things and Google. You can get away with almost any lifting or scavenging of material, provided that you cite the source. If your citation is "I photocopied another student's write-up" then you may not get many points on the assignment or may be assigned something to verify you have learned the material and skills, but at least you won't be expelled for plagiarism. The distinction between plagiarism and leveraging is citation. If in doubt, ask. Better still, play it safe and give a citation for any material or help you have received or given. Using the Web board is a great way to seek help - it's public to the entire class, the questions and answers are available to everyone, and so anything posted there is automatically fair game.

In spite of it being "nearly impossible", amazingly often somebody hands in a document or code that duplicates another's, down to the mispellings and errors in the coding, without mention of its provenance. It's not that hard to put in a code comment or a text footnote about just where you got any material, guidance, or help. Make a habit of having a section just for that in any code or other material handed in or presented, so that you have to think about and remember just where everything came from.

Although Professor Bramley is older than dirt, he also knows how to use Google as well as some tools to find matches that you don't have. So ... play it safe and give a citation anytime you did not do all the work yourself.

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: 08 May 2012, 01:16 PM
  2. Modified: Mon 02 Sep 2013, 07:22 PM set AI office hours
  3. Modified: Mon 09 Sep 2013, 07:59 AM add office hours for professor Bramley
  4. Last Modified: Mon 14 Oct 2013, 12:33 PM