This book provides a seamless approach to numerical algorithms, modern programming techniques and parallel computing. These concepts and tools are usually taught serially across different courses and different textbooks, thus observing the connection between them. The necessity of integrating these subjects usually comes after such courses are concluded (e.g., during a first job or a thesis project), thus forcing the student to synthesize what is perceived to be three independent subfields into one in order to produce a solution. The book includes both basic and advanced topics and places equal emphasis on the discretization of partial differential equations and on solvers. Advanced topics include wavelets, high-order methods, non-symmetric systems and parallelization of sparse systems. A CD-ROM accompanies the text.
Scientific computing is by its very nature a practical subject - it requires tools and a lot of
practice. To solve realistic problems we need not only fast algorithms but also a combination
of good tools and fast computers. This is the subject of the current book, which emphasizes
equally all three: algorithms, tools, and computers. Often times such concepts and tools are
taught serially across different courses and different textbooks, and hence the interconnection
between them is not immediately apparent. We believe that such a close integration is
important from the outset.
The book starts with a heavy dosage of C++ and basic mathematical and computational
concepts, and it ends emphasizing advanced parallel algorithms that are used in modern
simulations. We have tried to make this book fun to read, to somewhat demystify the
subject, and thus the style is sometimes informal and personal. It may seem that this
happens at the expense of rigor, and indeed we have tried to limit notation and theorem
proofing. Instead, we emphasize concepts and useful tricks-of-the-trade with many code
segments, remarks, reminders, and warnings throughout the book.