# Syllabus

*Note*: The syllabus has been updated to account for COVID 19. This
version of the syllabus was posted on April 3, and follows what I
believe to be the most recent university guidance. I will attempt to
keep the syllabus up to date as the situation evolves.

### Lecture and section information

CS 4220/CS 5223/MATH 4260, Spring 2020

Lecture time: MWF 2:30-3:20

Lecture location: Gates G01 / Zoom

### Staff and office hours

Prof: David Bindel

425 Gates Hall

Phone: 607-255-5395

E-mail: bindel@cornell.edu

OH: W 1:30-2:30, Th 2:30-3:30 or by appointment.

TA: Darian Nwankwo

TA: Xinran Zhu

TA: Leo Huang

OH: Mon 12-1, Tue 6-7, Fri 12:30-1:30.

### Catalog description

4 credits. Introduction to the fundamentals of numerical linear algebra: direct and iterative methods for linear systems, eigenvalue problems, singular value decomposition. In the second half of the course, the above are used to build iterative methods for nonlinear systems and for multivariate optimization. Strong emphasis is placed on understanding the advantages, disadvantages, and limits of applicability for all the covered techniques. Computer programming is required to test the theoretical concepts throughout the course.

### Prerequisites

Linear algebra at the level of MATH 2210 or 2940 or equivalent and a CS 1 course in any language. We will assume you remember your calculus and can pick up MATLAB or Julia. Recommended but not essential: either CS 3220 or one additional mathematics course numbered 3000 or above. This course can be taken before or after CS 4210/MATH 4250.

### Texts

#### Recommended text

- Ascher and Greif,
*A First Course in Numerical Methods*(etext)

We will cover roughly chapters 1-9.

#### References

Some linear algebra references:

- Meyer,
*Matrix Analysis and Applied Linear Algebra* - Lay,
*Linear Algebra and its Applications* - Strang,
*Linear Algebra and its Applications* - Strang’s excellent online course is here

The Julia language home page has many pointers to using the Julia programming language; see in particular the learning link at the top of the home page.

Some MATLAB references (if you prefer MATLAB/Octave to Julia):

- Moler,
*Numerical Computing with MATLAB* - Van Loan and Fan,
*Insight Through Computing: A Matlab Introduction to Computational Science and Engineering* - Pratap,
*Getting Started with MATLAB 7* - Gilat,
*MATLAB: An Introduction with Applications* - Hanselman and Littlefield,
*Mastering MATLAB7* - Or pick a favorite from the many available

## Course work

### Flipped class work (April 6 onward)

The primary mechanism for the latter half of the course is a collection of Jupyter notebooks using the Julia programming language. These notebooks have questions and small programming exercises embedded in them. You should attempt these questions on your own and come to the lecture slot (or office hours) with questions about places where you are confused. You may also ask about points of confusion on Piazza. You should submit your attempt at filling out the questions within one week (where “I don’t know” is an acceptable attempt) and submit via CMS. Each submission counts as 1/3 point toward the class participation grade.

### Readings and the problem du jour (before March 13)

Readings from the course text (or notes) will be listed on the course
page before class. *You are responsible for reading before lecture*.

For most lectures, there will be a “problem of the day” related to the class material. These problems are not graded, but you should try them (and try to understand them) as a way to better learn the material – and as a way to study for the exams.

### Class work (before March 13)

During each lecture, I will ask 1-2 questions of the class. You should bring along some paper to jot the answers to these questions, as well as notes on anything that you found particularly confusing during the lecture. Each submission counts for a third of a point on the final grade (for a total of 10% of the grade, equal to one project).

### Homework and projects

There will be eight one-week homeworks, generally assigned Friday and due the following Friday. These problems will involve a mix of short answers, plots, and computations done in MATLAB or Julia. Homework should be typed and submitted as PDF files on CMS. After they are graded, homework scores will be posted to CMS. Regrade requests must be submitted within one week of receiving the graded homework.

There will be one two-week programming projects, to be done either alone or in a group of two. Projects will involve solving a larger problem, and may be done in MATLAB or Julia. For projects, you will need to submit both codes and a writeup PDF file on CMS.

### Exams

There will be one midterm and one final exam:

- Midterm: March 6-April 6 (extended due to COVID closure)
- Final Exam: May 11-18

Both exams are take home. A couple points on the final will go toward course evaluation.

## Grading

This class, along with all other classes this semester, may be taken S/U.

Your final grade in CS 4220 will be computed from grades on the assignments and exams using the following weights:

- Class work: 10%
- Homework: 8% times 6 homeworks (bottom two dropped)
- Project: 10%
- Midterm: 15%
- Final: 15%
- Course evaluation: 2%

## Course policies

### Late work policy

All work is requested by 11:59 pm on the due date. The reason for the due dates is to provide the course staff adequate time to grade. Given that COVID will doubtless cause problems, we will accept late submissions generously up until May 11 (the date the final goes out). Please try to give us advance warning if you are going to submit late.

### Collaboration

An assignment is an academic document, like a journal article.
When you turn it in, you are claiming everything in it is your
original work, *unless you cite a source for it*.

You are *encouraged* to discuss homework and projects among yourselves
in general terms. You should feel absolutely free to collaborate in
any way you wish for the lecture notebooks (with attribution for any
good ideas). However, while you may discuss the homework sets
generally, you should not look at code or writeups from other
students, or allow other students to see your code or writeup, even if
the general solution was worked out together. Unless we explicitly
allow it on an assignment, we will not credit code or writeups that
are shared between students (or teams, in the case of projects).

If you get an idea from a classmate, the TA, a book or other published source, or elsewhere, please provide an appropriate citation. This is not only critical to maintaining academic integrity, but it is also an important way for you to give credit to those who have helped you out. When in doubt, cite! Code or writeups with appropriate citations will never be considered a violation of academic integrity in this class (though you will not receive credit for code or writeups that were shared when you should have done them yourself).

### Academic Integrity

We expect academic integrity from everyone. School is stressful, and you may feel pressure from your coursework or other factors, but that is no reason for dishonesty! If you feel you can’t complete the work on the own, come talk to the professor, the TA, or your advisor, and we can help you figure out what to do.

For more information, see Cornell’s Code of Academic Integrity.

### Emergency procedures

In the event of a major campus emergency, course requirements, deadlines, and grading percentages are subject to changes that may be necessitated by a revised semester calendar or other circumstances. Any such announcements will be posted to the course home page.