COSC 70.01 Foundations of Applied Computer Science, Winter 2020
This course introduces core computational and mathematical techniques for numerical computing, physical modeling, and data analysis, foundational to applications including scientific computing, computer graphics, machine learning, computational biology, computer vision, and robotics. The approaches covered include numerical modeling and optimizing both linear and nonlinear systems, representing and computing with uncertainty, analyzing multi-dimensional data, and sampling from complex domains. The techniques are both grounded in mathematical principles and practically applied to problems from a broad range of areas.
One of the main goals in this class is to teach you to build your first, own numerical computing library that can accommodate your future studies in the applied computer science fields. We will develop (and deepen) our mathematical understanding of linear algebra, numeric algorithms, and optimization while we develop our numerical codebase. We will create a final project on top of the . The project will leverage the codebase we have been developing during the quarter and will showcase the efficacy of its computational performance and complexity by solving a real application related to applied computer science, including computer graphics, machine learning, image processing, etc.
Staff:
Instructor: Bo Zhu (Sudikoff 153)
Teaching assistant: Jiayin Hu, Stela Tong
Guest lecturer: Yuanming Hu (MIT CSAIL, the author of Taichi) -- High-performance linear algebra
Logistics:
Class Time: 10A, Tuesday/Thursday, 10:10am-12:00pm
X-Hours: Wednesday, 3:30pm-4:20pm
Office Hours:, Professor, MW 5-6pm, Sudikoff 153; TA, TuTh5-6pm, Sudikoff 143
Location: Sudikoff 214 (lectures TuTh), Sudikoff 114 (X-hours Wed)
Web:
The course information will be posted on both Canvas and the public course website.
Discussion:
We will use Piazza for our class discussion. Link posted on Canvas.
Textbook:
Introduction to Applied Linear Algebra -- Vectors, Matrices, and Least Squares (VMLS), by Stephen Boyd and Lieven Vandenberghe
Numerical Algorithms (Numeric), by Justin Solomon
Prerequisite:
CS 1 and Math 3
Starter Code:
We will build our system together using C++ from completely scratch starting from our first X-hour :-)Assignments and Projects:
Grading policies::The programming assignments are about incrementally building your high-performance numerical library. The implementation practices include the vector math, basic linear algebra, transformation, dense linear solver, matrix factorization, large-scale sparse solver, least squares, gradient-descent and numerical optimization, conjugate gradient, monte-carlo sampling, etc.
Final Project:We aim to write our own kernel library that can rival NumPy, Eigen, or Matlab regarding both its coding conciseness and computing performance. You may refer to the other application classes (e.g., physical computing) to see its potential usage. We will have one final project to showcase your own "NumPy" in a real application you choose for the final project.
High-performance numerical libraries and solvers (and our goal!)Class Schedule:
The following is a tentative lecture schedule. It will be updated dynamically as the course proceeds.
Week 1: Introduction
Tu: Introduction to applied computer science and applied mathematics
Th: Vector, matrix, and Gaussian elimination
Week 2: Linear algebra first glance
Tu: Vector space and linear maps
Th: Geometric transformations for robotics and character animation
Week 3: The sparse world
Tu: Sparse system and its high-performance implementation
Th: Iterative solvers, Krylov space, and scientific super-computing
Week 4: Point matters
Tu: Mathematical foundation for least squares
Th: Weighted least squares and point cloud processing
Week 5: Optimization and differential equations
Tu: Gradient descent and neural network training
Th: Numerical differential equations: a continuous world on discrete grid
Week 6: Estimating the uncertainty
Tu: Introduction to probability
Th: Maximum Likelihood Estimation
Week 7: Observe the hidden world
Tu: Fast SVD decomposition and its Disney snow
Th: Principal component analysis
Week 8: Randomness
Tu: High-dimensional data analysis
Th: Monte-Carlo algorithm and the ray-tracing industry
Week 9: High-performance linear algebra
Tu: Guest lecture: high-performance code for linear operators
Th: Convolution and the modern computer architecture