**Instructor:** Anil Hirani (email), Altgeld Hall Room
375

**TA:** Vaibhav Karve (email).

**Office Hours:**

Anil Hirani: Wednesday 1:00 -- 2:00 PM and by appointment, Room 375 Altgeld Hall.

Vaibhav Karve : Thursday 5:00 -- 6:00 PM, Room 7 Illini Hall

**Course Diary:**

- 01/14: Data structures in Python 3 (list, set, dictionary, tuple).
- 01/16: NumPy array.
- 01/18: Homework01 on data structures.
- 01/23: Basics of SageMath.
- 01/25: Homework02 on dynamics of damped harmonic oscillator.
- 01/28: Modular arithmetic in SageMath.
- 02/01: Homework03 on discrete logarithms and primitive roots.
- 02/04: Computational domains in SageMath.
- 02/06: Polynomials rings and numerical precision in SageMath.
- 02/08: Caesar cipher, Vigenere cipher, Diffie-Hellman-Merkle key exchange.
- 02/11: Graph theory in SageMath.

All course grades and announcements will be posted on Moodle. All worksheets from class will also be available there. Class worksheets and Homework assignments will be released on CoCalc.

**Exam 1:** February 20, 2019. Wednesday. In
class. Syllabus: Everything up to February 18.

**Exam 2:** March 27, 2019. Wednesday. In
class. Syllabus: Everything from February 20 to March 25.

**Exam 3:** April 19, 2019. Friday. In
class. Syllabus: Everything from March 27 to April 17.

**Final Project:** April 22 to May 01, 2019. Final
project will require you to apply some of the skills and techniques
learnt in class to one problem from a list of possible project
ideas. You will be required to work in groups for the final project
and present your project to the class.

**Description:** A self-contained, project-based,
lab-style one semester course for mathematics students that will guide
them through a computational way of approaching problems. Twice a week
there will be a lecture demonstration with short lecture segments and
short programming exercise. One day each week will be for longer
programming project work supervised by instructor and TA. Topics
covered will include topological data analysis, cryptography
algorithms and computational complexity, use of linear programming in
game theory and other applications, networks and graph
algorithms. Programming will be done in Python and SageMath.

**Goals:** There are 4 main goals: (1) Improve
programming skill and algorithmic thinking; (2) Prepare for industrial
computational math work; (3) Prepare for future math courses by
learning to use computation to play with examples; (4) Prepare
for research in mathematics using a computer as a tool.

**Prerequisites:** CS 101 or CS 125 or prior
programming experience in one or more of the following languages:
Python, C, C++, Java. In addition must have taken CS 173 or MATH
347. 3 credit hours, 2 hours lecture-demonstration, 1 hour lab.

**Textbook:** There is no required textbook. However
for SageMath, the free book *Computational
Mathematics with SageMath * is recommended.

**Grading:** Homeworks 20% (This will include Friday-assignments
worth 15% and in-class lectures worth 5%), Three in-class exams 15%
each, Final Project 35%. Your lowest homework score will be
dropped.

There will be approximately 11-13 homeworks due (on CoCalc) on every Friday. Homeworks will be posted on Friday mornings and will be due the next Friday. Late homeworks will not be accepted (however, your lowest homework score will be dropped). You are encouraged and welcome to collaborate with other students on homeworks. That means you can talk to others and discuss the homework problems. But you must write up the solutions on your own (and acknowledge the contributions of your colleagues by name, if applicable).

Lecture notebooks released during class will then be collected and graded for effort instead of accuracy. They will contribute to 5% of the final grade.

Page maintained by Anil N. Hirani

Last modified: Wed Jan 30 20:25:01 CST 2019