Winter Semester 2024/2025

Summary

This class is an advanced course in Python programming for Data Science.

Topics include concepts of software engineering (modularization, design patterns, documentation, unit tests, version control), advanced features of the Python language (including Numpy, Scipy, Sympy, Matplotlib), performance aspects of programming (Cython/Numba, sparse matrix operations), 3D Graphics, and elementary concepts of parallelization.

Grading

  • The grade is determined from your solutions to the assignments (approximately 8 in total). Submission must be through Github Classroom (“portfolio grade”)
  • Students are required to present their solutions regularly and without prior announcement.
  • The sequence of presentations is random. If a student fails to be present when called to show their work, they will be put into the front position of the presentation queue and must present at the earlist possible occasion. This must happen at most twice per semester.
  • Subsequent failure to present when called, or failure to be able to explain one’s code will lead to loss of the points for the entire assignment.

Code Plagiarism

  • The code you submit should be written by you.
  • You are encouraged to talk with your peers about the problems, so long as you write the code yourself.
  • You can help others, but do not share your code in electronic version. Copy-paste submissions do not help anybody.
  • Submissions will be checked by plariarism detection software; the ultimate determination what does and what does not constitute plagiarism is with the instructor.
  • If you take substantial help from online resources, you must credit your source in a code comment. If your help comes from an LLM, you have to document the prompts as well. There is no penalty for using properly acknowledged and documented online resources, but you will be expected to be able to explain your code and make small changes on request.

Topics

Oct 14, 2024

Introduction, root finding methods: Newton’s method, secand method, bisection for functions of a single variable (this set of lecture notes summarizes what was covered in class; for more information, see the Wikipedia articles on Newton’s method, the secant method, and the bisection method; the theory is covered in any basic textbook on numerical analysis)

Oct 15, 2024

Implementation questions on root finding methods, order of convergence

Oct 21, 2024

Basins of attraction, meshgrid-plotting (see, e.g., these notes)

Oct 22, 2024

Final questions on Assignment 1; Newton’s method in multiple dimensions, Broyden’s method (start)

Oct 28, 2024

Discussion of Assignment 1 solutions

Oct 29, 2024

Broyden’s method (ctd.) (see notes)

Nov 4, 2024

Outer Products and implementation of the “discrete integral equation” test problem (see notes)

Nov 5, 2024

Final discussion of Assignment 2 tasks

Nov 11, 2023

How to write an \(O(nd)\) implementation of the Broyden matrix as a subclass of LinearOperator

Nov 12, 2023

Discussion of Assignment 2 solutions

Nov 18, 2023

The discrete boundary value test problem (see notes); why do we expect that Broyden’s method fails on a straightforward formulation of this problem?

Nov 19, 2023

Review of the singular value decomposition; final discussion of Assignment 3 tasks