### learning objectives

 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 Goalsunderstand the fundamental abstractions in procedural programmingvariables/values/types, assignment, control flow (conditionals/loops/error handling)procedural abstraction, commenting and documentation, test-based developmentunderstand the matlab specific compound data typesvectors, 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 calculationLinear 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 hypothesisOrdinary Differential Equations: differentiable functions, differential equations, computational solution techniquesPartial Differential Equations discretizationboundary value problemsOptimization and Constraint Solving: simplex method, non-linear constraintsClustering: k-means, visualization techniquesunderstand the range of problems to which Scientific Computing can be effectively applied  and the types of tools that are used for those problemsOther topics to be covered - time permittingsymbolic computation (using Sage at sagemath.org)statistical programming (using R )3d modeling of scientific data (using blender)parallel scientific computingSkills to be developed during the coursewrite simple Matlab/Octave programs using functions defined in .m files including conditionals, loops, all the standard scalar types, and file I/Ouse Matlab/Octave vector and matrix expressions to express fundamental data operations without loops visualize calculated data using the 2d and 3d plot functionsset up, solve, and visualize the solutions of ODEs and Difference Equations using Matlab/Octaveperform basic image processing operations using Matlab/Octaveperform 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)