Prerequisites: 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, testbased 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 roundoff/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,
 nonlinear constraints
 Clustering: kmeans, 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 curvefitting, SVD, PCA, nonlinear 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)

