Syllabus

Course number: CAAM 37830=STAT 37830

People

Instructor: Tianyu Kong (tianyuk@uchicago.edu). William H. Kruskal Instructor in the CCAM (Committee on Computational and Applied Mathematics).

TA: Tina Wang (jw2181@uchicago.edu) and Angela Wang (aawang@uchicago.edu)

Office Hours:

Course Format

This course is scheduled to meet TR 12:30PM - 01:50PM in Jones 303.

Homework will be posted Thursday, and due the following Thursday at 10 PM. We plan to have a homework assignment every week, apart from Thanksgiving break.

There will be around 4 in-class quizzes, which will cover basic concepts and understanding of homework problems.

There will be a course-long group project. This will include a project proposal, a midterm checkpoint, a presentation, and a final written report. Groups will be organized a few weeks into the quarter.

Prerequisites

Multivariable calculus, linear algebra, prior programming experience (not necessarily in Python).

Because this is an introductory graduate-level course, the Prerequisites are fairly informal and minimal. Since we’re doing scientific computing, we’ll assume some basic familiarity with high-school or introductory undergraduate physical science, and maybe some social science. We’ll also assume familiarity with multivariable calculus and linear algebra. We’ll cover some ODEs and PDEs, but not at a level that requires significant prior experience. Prior programming experience is assumed, but this can be informal.

What you need for this course

You will need

  1. A computer, with the ability to install software and run programs
  2. An internet connection

We will assume you are running some UNIX-based operating system on your computer. For most people, this will mean either Mac or Linux. We will not support troubleshooting Windows issues - if you have Windows on your computer please download Windows Subsystem Linux.

In addition to a University of Chicago account, you’ll need to create a GitHub account as assignments will be distributed through Classroom50 (GitHub accoount needed). Any work you do will be kept in private repositories. If you want, you can create a “burner” account that isn’t associated with your primary account (if you already have one).

Evaluation

There are several things your work will be evaluated on

  1. Correctness - is your answer correct? Does your code produce the correct output? (may use an autograder to check this)
  2. Performance/efficiency - there are often many ways to implement an algorithm. Some will be faster than others. We’ll let you know if we are looking for certain optimizations.
  3. Style - your code should be reasonably easy to understand. This is typically achieved through the use of docstrings, comments, and appropriately named variables.
  4. Team work - we’ll ask your teammates to evaluate whether you performed a fair share of the work. Teammate evaluations will be kept confidential. If you believe your score to be unfair, you can reach out to the instruction staff. We will look at git logs/history if we need to resolve any disputes.

Late Work Policy

Deadlines have a 2 hour grace period to compensate for technical issues. Work submitted after that grace period is considered late.

Individual work: Two 48 hour extensions will automatically granted per student, no questions asked. However, you do need to notify both of the TAs before the deadline. Beyond those, exceptions will only be granted in abnormal circumstances.

Group work: Project related extensions will be only be granted in abnormal circumstances.

If an assignment is taking an unreasonable amount of time to complete, please let us know. If this is done a few days before the due date, the assignment may be adjusted.

Regrade Requests

You will have one week from the day assignment grades are released to request a regrade.

Collaboration Policy

You are encouraged to collaborate with others in the class and use the internet to help with solving problems.

When working with others, you can discuss problems and solutions, but do not copy each others work directly. Note anyone you who contributed to your solution in a comment in your code. Same goes for any written answers (write your own, acknowledge others).

If you find helpful information online (e.g. on stackoverflow), put a note about what you used as well as the url in a comment in your code. There are only so many ways to call a function, and it is perfectly acceptable to copy and paste a line or two of code (with a comment).

You are welcome to make your solutions publicly available, but please wait until after the assignment due date.

The group project will be judged collectively - you do not need to say who did what. This will all be recorded by git logs anyways.

The Use of Generative AI

There are many natural language processing tools available, which can be used to generate good code efficiently. We recognize the importance of using generative AI as a tool for assisting you with your tasks, so the use of AI is allowed in this course. Students must disclose the use of AI in their work, and summarize the prompt used and the response of AI, especially if mistakes are identified in their output. Students are expected to take responsibility of their work, i.e. to explain the thought process behind the completed works. We want you to develop skills and knowledge that are important to discover and practice on your own.

Using AI tools for any purposes in this course without proper acknowledgement will violate the University’s academic integrity policy and be treated as such.

Textbook & Readings

There is no required textbook for this course. Readings will be posted in the schedule. We are also building an online course reader.

A good reference which we may follow portions of is: Mastering SciPy by Francisco J. Blanco-Silva.. This is available as a free electronic resource through the University of Chicago Library.

We will cover a variety of topics that are not adequately covered in Mastering SciPy, including basic Python (and some advanced topics), use of computing resources, basic numerical and algorithmic analysis, and additional libraries.

Required, recommended, and optional readings will be posted in the schedule. Required means that the reading covers something that you will want to know that we may not cover in lecture, either for homework or life in general. Recommended means that the reading covers something you may find interesting/useful but may also not be necessary. Optional means that the reading covers material that overlaps with other sources, but perhaps you will like the exposition better.

List of Topics

We’ll survey a variety of topics used in scientific computing in (roughly) the following order, and with (roughly) 1 week per topic.

  1. Programming in Python
  2. Dense linear algebra (numpy)
  3. Sparse linear algebra (scipy)
  4. Functions of one variable (scipy)
  5. Symbolic computing (sympy)
  6. Numerical optimization (scipy)
  7. Data processing (pandas)
  8. Machine learning (scikit learn)
  9. Fast Multipole Method

In parallel, we will cover several practical topics, including

  1. Version control with git
  2. Unit testing
  3. Package development
  4. Cluster computing
  5. Parallel & GPU computing

Changes may be made based on interest and a detailed schedule will be maintained.

Students with Disabilities

The University of Chicago is committed to ensuring equitable access to our academic programs and services. Students with disabilities who have been approved for the use of academic accommodations by​ ​Student Disability Services​ ​(SDS) and need a reasonable accommodation(s) to participate fully in this course should follow the procedures established by SDS for using accommodations. Timely notifications are required in order to ensure that your accommodations can be implemented. Please meet with me to discuss your access needs in this class after you have completed the SDS procedures for requesting accommodations.

Phone: (773) 702-6000
Email: ​disabilities@uchicago.edu