Week 2
Goals
Priorities for Scientific Computing
Exercise 1: Benchmarking
Benchmark functions accurately
Predict cost of an algorithm based on Big-O analysis
Identify real world complications that affect scaling
Exercise 2: Assertions, Unit Tests & Continuous Integration Testing
Write effective tests for floating point calculations
Reduce bugs via assertions
Identify bugs promptly via unit testing
Identify bugs promptly via continuous integration testing
End-to-end Testing to validate code
Exercise 3: Numerical Stability of N-body Integration
Integrate differential equations
Compare the accuracy and numerical stability of results as a function of time step, order and integration algorithm
Appreciate importance of numerical stability
Lessons along the way
Types of languages
Compiled vs Interpretted vs JIT
Static/dynamic type-checking
Plotting with Plots.jl
Integration Algorithms
Lab
Lab 2: Best Practices: Assertions, Unit Testing, Continuous Integrations, Benchmarking (due Sept 12)
Exercise 1: Computational Cost of Numerical Linear Algebra
Exercise 2: Assertions, Unit Tests & Continuous Integration Testing
Exercise 3: Numerical Stability of N-body
Exercise 4: Benchmarking Common Numerical Functions
Readings
Writing Scientific Software Ch 3: Priorities (6pg)
Writing Scientific Software Ch 4: Famous Disasters (4pg)
Best Practices for Scientific Computing: Sec. 1-4 (6pg)
Best Practices for Scientific Computing: Sec. 5-9 (5pg)
Additional Resources
Week 2 Class Discussion: Priorities for Scientific Computing, Conditions, Tests, Writing Generic Code
Instructions for using Lynx Cluster
Install Julia & Pluto on your local machine (optional)
See instructions from MIT Intro to Computational Thinking course (For your lab assignments, you'll use Step 2b: Open an existing notebook file, rather than Step 1a Open a notebook from the web.)