P573: Introduction to Scientific Computing
Introduction to Scientific Computing - Fall 2014
P573, Section number: 12183
8:00 - 9:15 AM, Monday and Wednesday
102 Lindley Hall
Not all of these exist yet, but will be filled in as the semester trudges
- Randall Bramley
- 301A Lindley Hall
- Office hours: Monday to Thursday: 1:30 PM - 5:00 PM or by appointment
Mathematics M343 and one of M303 or M301, and a working knowledge of Fortran,
C, or C++. The requirement in mathematics means
The computational requirements include:
- At least calculus
- Some basic linear algebra, for example,
- how to add vectors and matrices
- how to compute an inner prodct, also called a dotproduct
- how to multiply a matrix times a vector, both mathematically and in
one of the languages C, C++, or Fortran
- what the null space and range space of a matrix are
- how to multiply two conformal matrices (and what
"conformal" means in matrix multiplication!)
- what an upper (and lower) triangular matrix is
- The ability to write and run programs under a UNIX operating system, in
one of the languages C, C++, or Fortran
- The ability to create executables involving multiple files
and libraries either by a script or a makefile
- Write programs that read and write formatted data from and to files
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.
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 some 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 UITS password
(from IU's ADS) will work on both CS and UITS systems.
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.
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
practical implementation of solutions of scientific problems on computers
the efficient mapping of solution methods to modern architectures
software tools and methods useful in modern scientific computing.
the basic foundations of performance analysis, modeling,
and prediction (together, called performance engineering)
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.
Another course, CSci
B673, concentrates on that aspect of scientific computing.
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.
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.
For those who would like a preview the
Tutorial material prepared by Dave Hart is useful, and a good
tutorial is at the University of Florida. Another tutorial, posted
on is at
Technical University . However, all that is needed will be covered
in class, so don't go out and memorize Web pages ... yet.
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.
- 30% Final Project
- 70% Assignments
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 some fool(s) hand in
duplicate documents or code without mention of 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. Changing format and variable
names is not sufficient to throw off the identification of copying.
Unattributed copying will lead to a zero on an assignment at least, and a zero in
the course more commonly.
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:
- Started: Wed 21 May 2014, 11:33 AM
- Last Modified: Wed 21 May 2014, 11:33 AM