Skip Navigation
Search

AMS 325, Computing and Programming Fundamentals in AMS

Description:
Introduction to programming in MATLAB and Python, including scripting, basic data structures, algorithms, scientific computing, and software engineering. No previous programming experience is required.  Homework projects will focus on using computation to solve linear algebra, data analysis, and other mathematical problems.  This is a project-based, 3-credit course.  The content is divided into three parts.


Prerequisite: AMS 210 or MAT 211; AMS major

3 credits

IMPORTANT:  The GPNC option is unavailable for this course.

Offered every fall starting with 2021.  May be offered in summer sessions.


Course Materials:

None.  Recommended reading materials will be provided.

SYLLABUS 

Part I: Numerical and Statistical Computing in MATLAB (2.5 weeks)

Overview of computing + data

Matrix and vector operations in MATLAB

File I/O and plotting

Controls, functions, conditioinals, loops

Introduction to software engineering including the use of git/github, commenting, and documentation

Part II: Scripting and Object-Oriented Programming in Python (Eight Weeks)

Basic data structures (e.g., trees, arrays, lists)

Symbolic computation using SymPy

SciPy and NumPy

Data analysis using pandas

Machine learning using sciket-learn

Object-oriented programming

Basic GUI programming

Part III: Performance Optimization (Four weeks)

Computer architecture, performance, interpreted versus compiled languages

Performance optimization of Python using numba

Multithreading and multiprocessing in Python

Team project

 

Learning Outcomes for AMS 325, Computing and Programming Fundamentals in Applied Mathematics and Statistics

  1. Proficiency in MATLAB programming: including scripting, procedural programming, GUI, debugging, plotting, profiling, and some commonly used toolboxes.
  2. Proficiency with Python programming, including scripting, object-oriented programming, and commonly used Python libraries.
  3. Best practices in scientific software engineering, including code modularization, debugging and testing, version control, documentation, performance optimization, etc.