Instructor: Anil Hirani (email);   TA: Siqi Jiao (email)
Office Hours: See Moodle
Course communication: There will be a Moodle space for the course and a Campuswire class feed for most course communication and for collaborative discussions.
CoCalc: All in-class programming, Python and SageMath notebooks, homeworks and exams will be on CoCalc. The department has purchased a CoCalc group license for the class so you SHOULD NOT purchase anything at CoCalc. To use the department license, you must create an account on CoCalc using your Illinois e-mail address.
Prerequisites: Successful completion of CS 101 or 125 or prior programming experience in any one or more of: Python, C, C++ or Java; as well as successful completion of Math 347 (or CS 173).
This course may serve as an additional 400-level mathematics course for math major requirements or substitute for the requirement for Math 412/484 in Operations Research
Description: This course is designed for undergraduate Mathematics majors and has the following goals: (i) improve programming skill and algorithmic thinking; (ii) prepare for industrial computational math work; (iii) prepare for future math courses by using computation to play with well-chosen examples; and (iv) prepare for research in mathematics using a computer as a tool. This is a project-based hands-on course aimed at guiding students through a computational way of approaching problems while capitalizing on their mathematics knowledge and training. The content of the course has very little overlap with existing courses on campus and is not intended as a first introduction to programming. Topics covered include graph algorithms and computations on graphs, image analysis, computational topology, topological data analysis, computer algebra, cryptography algorithms, analysis of tabular data, neural networks and introduction to qubits for quantum computing. Programming will be done in Python and its extension that the SageMath environment provides. The format of the course will be short lectures and short programming exercises twice a week with longer project once a week that will be started in class on Fridays. There are three evening open-everything programming exams. In addition, students select a longer final semester project done in groups of 2 or 3 and do an in-class presentation. After the short lecture on Mondays and Wednesdays, during each class the TAs and instructor will help the students as they work on the programming exercises for the day. 1 hour lab per week and 2 hours lecture-discussion. Students are expected to bring their laptops to class.
Some final projects in previous years were: (1) Graph neural networks; (2) Modelling a pandemic; (3) Graphs and sports; (4) Data display of COVID-19; (5) Rubik's cube and group theory; (6) Problems from Project Euler and SIAM 100 digit challenge; (7) Cryptosystems and online secrets; (8) Deep reinforcement learning; (9)Solver for the spatial puzzle soma cube
Textbook: There is no required textbook. However for SageMath, the free book Computational Mathematics with SageMath is recommended.
Grading: Homeworks 20%, Three exams 15% each, Final Project 30%, Class participation 5% (details in class). Your lowest homework score will be dropped. You can miss 3 lectures without penalty. Otherwise attendance is mandatory.
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 other students and course staff and discuss the homework problems. But you must write up the solutions on your own.
Final Project: 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.