# PHYS 250 : Course Syllabus

## Course Faculty

Name | Phone | Office | Office Hours | ||
---|---|---|---|---|---|

Course Leader: | Craig J Copi | cjc5 | 368-8831 | Rock 210 | MWF 3:00-5:00 PM (tentative) |

Assistant: | Tate Deskins | jtd55 | Rock 201F | M 11:40AM-2:00 PM, Th 1:00-3:30 PM |

## Text

There are **no textbooks** required for this course! This saves
you a lot of money but does not give you a single reference for the
course. Fortunately there are some good, freely available references
for our use.

**Numerical methods:** A good description of numerical methods is
found in *Numerical Recipes*. This is an old book that has
evolved over the years. I find the code in it atrocious; they have
proven you can write Fortran in any language (if you do not know what
this means you are fortunate). However, they give a great overview
of techniques and discussions of the theory behind them. I will
loosely be following this book but will not go into the detail you
can find in it. I *strongly* encourage you to look through the
topics we cover (and those we do not!).

You can find the second edition of the book freely available online.
Unfortunately they also use terrible, old technology for viewing the book, Flash, so it may require some effort to view the book in a modern browser.
(Search online to find out how to turn on Flash *for this site only* to view the book.)
Since we are ignoring the code any language of the book is fine, the discussion of the techniques is the same.
Note that the provide link also contains some other good references.

**Python:** Although we are using Python in this course we are not
really going to learn to use Python. Instead we are going to be
using NumPy and SciPy which are extremely powerful
numerical/scientific packages built in Python.
The Guide to NumPy is a freely available
book downloadable in pdf. It is an excellent reference to help us
get up to speed on tools we will use in this course. It does, of
course, go into much more detail than we will need but also does show
some of the immense power of the tools at our disposal.

**Jupyter:** The way we will use Python is through the Jupyter
notebook which used to be called the IPython notebook (you will still
see it called by both names). As with everything else this is
extremely powerful and is one of the reasons why the whole
environment is useful. Many tutorial videos exist on YouTube to help
get us started. We will use an older video from one of the lead
developers of the project. There is a lot in this video and it is
worth watching more than once (though perhaps not all in one
sitting). See the Python
Information page for a discussion of this video. **You must
watch part of this video!**

**Jupyter Notebook Examples:** There are many, many example
notebooks available
through NBViewer. Also
see the Python Information
page for a bit more details.

**Matplotlib:** This provides all the plotting functionality we
need. It is easy to make nice, simple plots. It is also extremely
powerful and gives us full control over all aspects of a plot. A
good resource showing some of the power is
the Matplotlib
Gallery.

**MATLAB™ Recovery:** If you have been forced to learn/use
MATLAB™ all is not lost! There are many similarities between
MATLAB™ and NumPy+Matplotlib, but also many important
differences. You can find many references online showing how to
translate between the two. Here is
one NumPy -
MATLAB™ reference.

## Lecture Times

The course meets MWF, 2:15PM-3:05PM, ROCK 309

## Course Philosophy and Goals

In physics, and the sciences in general, mathematical tools are commonly used. We often learn these tools in our science courses but also have them reinforced through mathematics courses. It is expected that we become proficient with the use of these tools. As we move through college we master vectors, derivatives, integrals, differential equations, etc. We are expected to know what they are and how to use them. We write down our theories in terms of them and solve many problems based on them. Though this provides a powerful way of describing theories and understanding the key features there are very few problems we can actually solve analytically. Approximations must always be made; for example in introductory physics we almost always ignore friction and air resistance because we cannot solve these problems analytically.

When we face problems in the real world and/or in research we eventually hit the limitations of analytic work. We deal with very complicated systems and/or large amounts of data. We are driven to the computer to do the "boring" work for us. Despite the ubiquitous need for numerical solutions and the fact that we have used computers all our lives we are rarely taught anything about using computers for productive work (productive work by definition is anything related to physics, of course). We are now in a position to correct this!

The main goals of this course are:

- Develop a basic set of tools for numerical computation. These tools are useful in every programming language.
- Learn to use Python and for scientific computation and the Jupyter notebook as a platform for such computations.
- Learn to use Matplotlib for producing high quality plots.
- Learn how to learn! That is learn how to find information for specific problems we encounter, how to understand this information, and finally how to use it.

## Software: Python

In this course we will use Python for all work. It is by far the best choice. The only thing that come close to it is MATLAB™. Python is a much cleaner, nicer programming language, freely available, does not require a limited number of network dependent licenses to run, and can be installed anywhere. In particular we will be using the Jupyter notebook. This provides a complete platform for developing, documenting, and sharing your work. More details about Python, Jupyter, and the tools we will use is available. These tools will be introduced during the first week of classes.

## Topics Covered

Likely numerical topics covered in this course are listed below. Along with them we will learn how to implement/use them in the Python environment.

- Special issues faced in numerical computations: limited precision, round off, convergence, choosing a good algorithm, etc.
- Solutions of equations in one variable: bisection, iterative techniques, derivative techniques, etc.
- Numerical derivatives and integration.
- Ordinary differential equations.
- Approximating functions (interpolation).
- Optimization problems.
- Random numbers and Monte Carlo techniques.
- Many aspects of linear algebra.
- Solving linear systems.
- Inverting matrices.
- Special types of matrices.
- Singular value decomposition.
- Iterative techniques.
- Eigenvalue problems.

## Lab

There is a "lab" associated with this course!
It will be done in class time on Fridays.
There will be an assignment intended to be completed in class and turned in electronically.
Though intended to be done in the class time it is unlikely this will occur so they are **due at the same time** as the homework.
You will work in small groups.
These groups will be assigned during the first week of classes.

The group assignments can be found at Lab Group Assignments.

The labs are designed to be a guided exploration of using python to solve problems. They will (typically) consist of two parts: a prelab and the full lab.

### Prelab

The prelab is *individual work*. Though you
are encouraged to work with others, everyone must complete their own
prelab. We will often be solving "real" problems so there
will be preliminary work required to understand the set up of the
problem before we can turn to the computer.

The prelab will be graded on a coarse scale meant to represent how
much effort you put into it. Not completing all portions of the
prelab is fine **if you put in effort to try to understand the
tasks assigned!** The main point is to get you thinking about
and working on issues before the lab. If there are confusing things
these can then be addressed at the beginning of the lab. Ideally
this means the lab time itself can be used to implement solutions to
the problems posed instead of spending all of our time trying to
understand what the problems are asking.

The first prelab will occur for Lab 1.
The prelab will be assigned, collected, and graded as discussed below for the labs.
They will typically be **due by Thursday, 8:00 AM** of the week they are assigned.

### Full Lab

The full lab is *group work*. A single lab will be collected
from each group. The work on the lab must be performed and
understood by all members of the group!

The prelabs, labs, and their solutions can be found on the Labs page. This is where you will go to download the prelabs and labs. They will be turned in using Google Drive as discussed in Lab 0.

## Homework

Homework will be assigned for the course. It will typically be due
weekly on Monday's **at the beginning of class!** It is
not worthwhile to skip class to scramble to finish a homework that is
due. As noted above the lab is a good opportunity
to strengthen your understanding prior to completing the homework.
Thus it is in your interest to think about the homework prior to lab.
If the lab itself does not clear up any confusions you can ask
questions at this time.

The homework assignments are (will be) available online.

## Exams

There will a midterm and final exam in this course. In both cases part of the exam will be computational and done outside of class time.

### Midterm Exam

The in class portion of the midterm exam is tentatively scheduled
for **Wednesday March 07, 2018**. The computational portion is
scheduled for Wednesday or Thursday. You will have 2 hours to
complete the computational portion of the exam. You will "sign up"
for a time to take this portion on the in class exam. The
computational portion will be similar to a lab and handled in a
similar manner as the prelab (but must be done individually, of
course).

### Final Exam

The final exam for the course as scheduled by the University is on
**Monday May 07, 2018** from 12:00-3:00 PM, *probably* in **ROCK 309**.
As noted above part of the exam will be computational thus the full three hours will not be required for the other part of the exam.
For this reason the exam will only run for two hours from **1:00-3:00 PM**.
All students must take the final exam to pass the course.

## Academic Integrity

In this course you are expected and encouraged to work together. We will be covering a wide variety of topics and different students will be more comfortable with different topics. Teaching someone else is one of the best ways to learn.

That being said working together does not mean copying! The University has a clear Academic Integrity policy that we will strictly adhere to.

This course is designed to be very open. Many assignments will be in an electronic form. Copying in the electronic domain is unfortunately very easy. One of the goals of this course is to learn how to learn. Copying is not a viable way to learn!

## Course Grading Scheme

Please check your grades online. If there
are errors you must report them to me **by the time of the final
exam** to get them corrected.

Below are the expected weights for the various aspects of the course. These may be adjusted at the instructors discretion.

Homework: | 25% | |

Labs: | 30% | |

Midterm Exam: | 15% | |

Final Exam: | 30% | |

Total | 100% |