learning objectives

      NONE.  We do not assume any previous programming experience in any language.

Course Learning Objectives:

The goal of this course is to introduce students to the fundamental concepts of Scientific Programming using Matlab/Octave and similar programming languages (e.g. sagemath) and we will introduce the necessary mathematical concepts as we go (including linear algebra, differential equations, probability and statistics).

The course will cover the syntax and semantics of Matlab/Octave including data types, control structures, comments, variables, functions, and other abstraction mechanisms.

Once the foundations of the language have been established students will explore different types of scientific programming problems including curve fitting, optimization, integration, differentiation, statistical analysis, ODE solving, image processing, clustering, and simulation.

Specific Learning Goals

  • understand the fundamental abstractions in procedural programming
    • variables/values/types, assignment, control flow (conditionals/loops/error handling)
    • procedural abstraction, commenting and documentation, test-based development
  • understand the matlab specific compound data types
    • vectors, matrices, cell arrays and
    • the basic linear algebra underlying them (linear maps, matrix multiplication, factorization)
  • Numerical Analysis Concepts: understand the scope and limits of mathematical modeling,  especially sources of errors from approximation of the model to round-off/truncation error in the calculation
  • Linear Algebra Concepts:
    • connect matrices with linear mappings,
    • understand concepts of real and complex vector spaces,
    • orthogonal and unitary bases,
    • range and kernel of a map,
    • eigenfunctions/values,
    • matrix decompositions and normal forms (LU, QR, SVD, ...)
  • Probability and Statistics Concepts:
    • independent random variables,
    • probability distributions and density functions,
    • correlation statistics,
    • experimental design with null hypothesis
  • Ordinary Differential Equations:
    • differentiable functions,
    • differential equations,
    • computational solution techniques
  • Partial Differential Equations
    • discretization
    • boundary value problems
  • Optimization and Constraint Solving:
    • simplex method,
    • non-linear constraints
  • Clustering: k-means, visualization techniques
  • understand the range of problems to which Scientific Computing can be effectively applied  and the types of tools that are used for those problems
  • Other topics to be covered - time permitting
    • symbolic computation (using Sage at sagemath.org)
    • statistical programming (using R )
    • 3d modeling of scientific data (using blender)
    • parallel scientific computing

Skills to be developed during the course
  • write simple Matlab/Octave programs using functions defined in .m files including conditionals, loops, all the standard scalar types, and file I/O
  • use Matlab/Octave vector and matrix expressions to express fundamental data operations without loops
  • visualize calculated data using the 2d and 3d plot functions
  • set up, solve, and visualize the solutions of ODEs and Difference Equations using Matlab/Octave
  • perform basic image processing operations using Matlab/Octave
  • perform basic statistical analysis of data (including curve-fitting, SVD, PCA, non-linear curve fitting)
  • improve oral presentation skills (presentations of scientific data analysis techniques and results, live presentations with Q&A)
  • improve written presentation skills (use of Latex for Scientific papers, blogging, website construction with googleapps, use of shared documents)
  • improve media presentation skills (ability to create youtube presentations combining screen capture, animation, and video)
  • improve collaborative development skills (ability to effectively use GIT to develop code, google docs and google sites to share documents and disseminate results)