Scientific computing is a rapidly growing field because computers can solve previously intractable problems and simulate natural processes governed by equations that do not have analytic solutions. During the first part of this course, students will learn numerical algorithms for various standard tasks such as root finding, integration, data fitting, interpolation and visualization. In the second part, students will learn how to model real-world systems from various branches of science. At the end of the course, students will be expected to write small programs by themselves. Assignments will regularly include programming exercises.