Skip to content
/ nsd Public
forked from yungyuc/nsd

Numerical Software Development

Notifications You must be signed in to change notification settings

yarinbar/nsd

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

99 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Numerical Software Development

Copyright 2019, Yung-Yu Chen yyc@solvcon.net. All rights reserved. Build Status Binder

Objectives: This course discusses the art to build numerical software, i.e., computer programs applying numerical methods for solving mathematical or physical problems. We will be using the combination of Python and C++ and related tools (e.g., bash, git, make, etc.) to learn the modern development processes. By completing this course, students will acquire the fundamental skills for developing modern numerical software.

Prerequisites: This is a graduate or senior level course open to students who have taken engineering mathematics or equivalence. Working knowledge of Linux and Unix-like is required. Prior knowledge to numerical methods is recommended. The instructor uses English in the lectures and discussions.

How to study

Course design

  • There are 15 or more lectures for the subjects of numerical software developing using Python and C++.
  • There is usually homework given after a lecture to exercise the lectured materials, and it usually requires students to write computer programs in Python and/or C++.
  • Mid-term examination will be conducted to assess students' understandings to the analytical materials.
  • Term project will be used to assess students' overall coding skills. Presentation is required. Failure to present results in 0 point for this part.
  • Grading: homework 30%, mid-term exam: 30%, term project: 40%.
  • Lectures:
    1. Python and numpy
    2. C++ and computer architecture
    3. Fundamental engineering practices
    4. Memory management
    5. Matrix operations
    6. Cache optimization
    7. SIMD
    8. Modern C++ I: ownership and meta-programming
    9. Modern C++ II: more than templates
    10. xtensor: arrays in C++
    11. pybind11: binding between Python and C++
    12. cpython API: operate Python from C
    13. Profiling
    14. Array-oriented design
    15. Advanced Python
    16. (Optional) useful architectures for hybrid code
    17. (Optional) application embedding Python

About

Numerical Software Development

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Jupyter Notebook 83.0%
  • C++ 9.9%
  • Python 5.0%
  • Shell 1.1%
  • C 0.5%
  • Makefile 0.4%
  • Other 0.1%