physics resources

physics resourcesp250

PHYS 250 : Course Syllabus

Course Faculty

Name E-mail 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


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.


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.


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 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.


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%