Course Website
During the semester, we will use Piazza for the course website. Resources will periodically be updated here.
Course Description
This is an introductory programming course in python that will provide a foundational background for programming in a mathematical setting.
Students will learn the basics of object oriented programming:
memory storage and variable scoping, recursion, objects and classes,
and basic data structures. A variety of numerical methods will be introduced,
with a focus on their practical implementation, through a series of modules covering a
variety of subjects such as physical modeling, genetics, and optimization.
The course is separated into two parts: In the first, we cover programming fundamentals
in python. The second part is comprised of a series of modules on applications in computational mathematics,
which provide a practical setting in which to develop these programming skills. In addition, towards the
end of the course, there will be a final project in which the student chooses a topic to explore in depth.
Prerequisites
Students should have taken at least linearr algebra (Math 216, 218 or 221),
while no programming background is required.
Not open to students who have taken CS 201.
Technology
Access to the following (free) resources is required: Zoom (for lectures), github (to share and turn in work),
Python 3.x and an editor (e.g. a text editor or an IDE like PyCharm), LaTeX, (for some homework and project writing).
Information for getting started will be provided.
Homework and Exams
- Homework will be assigned approximately twice each week; typically due on the date of the next assignment.
- Homework should be turned in by the deadline to ensure full credit. If late, the homework should still be turned in for feedback (and partial credit).
- Working and studying in groups is strongly encouraged, as well as discussing code (writing code to be read by others is an excellent way to improve computational skills!). However, the final product - solutions and code - should be your own.
Further guidelines for code and computational results will be provided throughout the course.
- Solutions should be complete arguments and code should be functional `out of the box' (i.e. it runs and produces the required outputs). W
When explanations are asked for, they may reference code but should be complete and easy to follow (it should not be necessary to `dig through' the code to get to solutions).
- Typing solutions in LaTeX is suggested; if handwritten, make sure solutions are readable when scanned (a high quality phone camera with good lighting should be sufficient).
Exams
There is one midterm exam that covers programming fundamentals and
no final exam.
The midterm will be `take-home' and open notes (with some restrictions),
to be taken during a subset of a continuous three hour period of the student's choice.
Grading
Course grades will be based on the following components:
- Midterm exam (20%)
- Homework (lowest score dropped; 45%)
- Final Project (30%): Students select a topic involving some application of computational mathematics. The project will
involve learning and implementing algorithms to solve that problem and a written report.
- Participation (5%); this includes active participation in out-of-class activities such as posting
questions/answers on Piazza, attending office hours and final project discussions with the instructor.
Note that participation in synchronous class meetings is strongly encouraged but,
if missed,
is not penalized in the grade.
Ethics
Students are expected to follow the Duke Community Standard.
If a student is found responsible for academic dishonesty
through the Office of Student Conduct, the student will receive a
core of zero for that assignment. If a student’s admitted academic
shonesty is resolved directly through a faculty-student resolution
agreement approved by the Office of Student Conduct, the terms of that
ent will dictate the grading response to the assignment at issue.