Course Descriptions

Access to individual course web pages is restricted. Please send me email if you are interested in browsing these pages.

 

 

ENGR 111B: Foundations of Engineering (Electrical and Computer Engineering)

Course home page on WebCT; not accessible without registration

Course taught in Fall ’03, Fall ’05

 

This course introduces basics of Electrical and Computer Engineering to first-year undergraduates with EE/CE major.

 

CPSC 311: Introduction to Algorithms

Course home page

Course taught in Fall ‘01

 

The course will cover the following topics:

-         Mathematical Fundamentals

-         Sorting

-         Selection

-         Hashing

-         Graph Algorithms

-         Union-Find

-         Dynamic Programming

-         NP-Completeness

At the end of the course you should have learnt basic algorithms, techniques to develop and analyze algorithms, determine correctness and efficiency of algorithms, and acquired the ability to systematically design efficient algorithms for new problems. You will also be able to understand the limitations of algorithms for NP-complete class of problems.

 

CPSC 442: Scientific Programming

Course home page

Course taught in Spring ‘03

 

The course will cover the following topics:

1.       Introduction: algorithms, errors, error propagation, MATLAB exercises

2.       Floating point computations: floating-point numbers, floating-point arithmetic (basic operations), numerical instabilities

3.       Matrix computations: setting up matrix problems, matrix operations, solving linear systems

4.       Polynomial Interpolation: Vandermonde approach, Newton representation, cubic splines

5.       Numerical integration: Newton-Cotes rules, composite rules, spline quadrature

6.       Nonlinear equations: bisection method, Newton's method, secant method

7.       The Initial Value Problem: basic concepts, Euler's method, Runge-Kutta methods

 

CPSC 653: Computer Methods in Applied Sciences

Course home page

Course is taught in Fall ’05, Fall ’03, Fall '00

 

This course introduces techniques for computational solution of scientific and engineering problems; the following topics will be covered in varying depths:

-         Number representation and errors

-         Linear systems

-         Nonlinear equations

-         Interpolation

-         Numerical integration

-         Ordinary differential equations

-         Partial differential equations

Homeworks will consist of theoretical problems as well as programming exercises using MATLAB. You are expected to learn basic MATLAB during the early part of the course (this is not at all difficult).

 

CPSC 659: Parallel and Distributed Numerical Algorithms

Course home page

Course taught in Spring ’05, Spring ’03, Spring '01, Fall '99

 

This course will focus on the design and implementation of numerical algorithms for high performance computers. We will cover a wide range of topics in advanced architectures and parallel numerical algorithms and applications to scientific and engineering problems. I will cover introductory material depending on the background of the class . You need to have basic knowledge of sequential computers such as workstations and familiarity with a programming language. Prior knowledge of parallel programming or in-depth knowledge of numerical methods is not necessary for this course. Feel free to send me email with questions.

-         Overview: motivation, high performance architectures, parallel programming, design of parallel algorithms, performance analysis

-         Algorithms: design philosophy, programming model, partitioning, communication, agglomeration, mapping

-         Architecture: multiprocessor architecture, shared-memory and message-passing architectures, interconnection networks, interprocessor communication, performance analysis

-         Parallel programming: overview, data parallelism with OpenMP, POSIX threads for shared-memory machines, message passing for distributed memory using MPI

-         Numerical Algorithms: 

-         Basic linear algebra subroutines (BLAS)

-         Dense matrix algorithms: factorization, pivoting, banded systems, least squares problems

-         Sparse matrix algorithms: sparse LU and Cholesky factorization, cyclic reduction

-         Iterative methods: classical, Krylov subspace, multigrid

-         Preconditioners: domain decomposition, multilevel, parallel ILU

-         Eigenvalues: power method, inverse iterations, bisection/divide & conquer, Lanczos method, SVD

-         Fast Fourier Transforms

-         N-body algorithms

Applications: variety of applications from structures, fluids, astrophysics, biology, medicine, etc.

 

 

CPSC 660: Computational Linear Algebra

Course home page

Course taught in Spring ’06, Spring ’04, Spring ’02, Spring '00

 

This course will focus on algorithms for matrix computations; the following broad topics will be covered:

·        Matrix fundamentals

·        Solution of systems of equations

·        Orthogonalization and Least-Squares problems

·        Eigenvalue problems and Singular value decomposition

·        Iterative methods for systems of equations

Computational techniques will be accompanied by error and stability analysis. Homeworks will consist of theoretical problems as well as programming exercises using MATLAB. You are expected to learn basic MATLAB during the early part of the course (this is not at all difficult).

 

CPSC 689: Iterative Methods for Linear Systems

Course home page

Course taught in Fall ’02

 

The course will provide an overview of a number of iterative methods for solving linear systems of equations. Iterative techniques for nonlinear systems and eigenvalue problems will also be covered. The course is intended for a multi-disciplinary audience that is interested in theoretical as well as practical aspects of iterative methods and their application to real-world problems. In addition to the widely used Krylov subspace methods, several classes of iterative methods will be discussed. These include stationary methods, multigrid and multilevel methods, domain decomposition methods, projection methods, and specialized methods for structured systems. The target audience includes graduate students in science and engineering, especially those who are involved in research activities in Computational Science. This course will provide the knowledge required to select appropriate for large-scale problems that arise in various applications and be able to develop or obtain software to implement the approach. 

Topics

-         Basic linear algebra: matrices, norms, eigenvalues, etc.

-         Partial differential equations: discretization by finite differences, finite elements, and finite volumes.

-         Sparse matrices.

-         Direct methods for sparse matrices.

-         Stationary iterative methods: Jacobi, Gauss Seidel, SOR, SSOR.

-         Krylov subspace methods: Krylov subspaces, Arnoldi's method, application to linear systems, application to eigenvalue problems

-         Conjugate gradient algorithm for symmetric matrices

-         Lanczos algorithm for nonsymmetric matrices and BiCG, CGS.

-         Methods based on the normal equations: CGNR, CGNE, GMRES, bi-CG, CGS.

-         Preconditioning techniques: SSOR preconditioning, incomplete factorizations: ILU, IC, ILUT; polynomial and other preconditionings

-         Multigrid and multilevel techniques.

-         Domain decomposition methods.

Sparse matrix eigenvalue problems; Lanczos and Arnoldi, and Davidson's methods.

 

CPSC 689: Data Mining

Course home page

Course taught in Spring '01

 

This course covers essential topics in data mining that relate to the study and development of computational algorithms for extracting trends or patterns from a set of data.  Data mining has extensive applications ranging from analysis of financial, economic, or sales data, to analysis of epidemiological, genomic, or other biomedical data, to fraud detection and security, and so on. Data mining is an inherently interdisciplinary field, not only due to its applications to other fields, but also within computer science itself.  While many of the concrete techniques come from Artificial Intelligence, especially concept/knowledge representation and machine learning algorithms, real-world application of data mining requires a serious commitment to formal statistical evaluation, such as sampling strategies and assessment of confidence in trends, to draw robust and reliable conclusions.  Data mining also commonly involves issues in Databases, since real-world problems often involve extremely large datasets (in the terabytes), sometimes distributed across multiple servers.  Issue of data integrity, security, "cleansing" (removing outliers or duplicates), and performance (e.g. joins) are often of high importance in practice.

In this course, you will get an integrated picture that synthesizes together as many of these practical issues as possible, that would be needed to successfully apply data mining to real-world problems. This goes beyond the bounds of any one particular area within computer science, and necessitates focus on breadth rather than depth.  You are expected to participate in real data-mining projects, where you will get first-hand experience dealing with raw data, using learning/regression algorithms, making decisions about selection of target concepts, relevant features, hypothesis representation, sampling, etc. By the end of the semester, you will acquire skills and concepts that are potentially useful in the current job market as well as in research for your graduate degrees, regardless of what area you are in.

 

Updated by Vivek Sarin on January 13, 2006