This introductory textbook presents optimization theory and computational algorithms useful in practice. The approach is practical and intuitive, rather than emphasizing mathematical rigor. Computationally oriented books in this area generally present algorithms alone, and expect readers to perform computations by hand. Some books are written in traditional computer languages, such as Basic, Fortran or Pascal. The programs in this text help with computations. This book is the first text to use Mathematica to develop thorough understanding optimization algorithms, fully exploiting Mathematica's symbolic, numerical and graphic capabilities.