• 5 years ago
https://haikzalpek345.blogspot.com/?book=1492973173
While recruiting college graduates, the author was surprised to find that many candidates who were working toward their master's degrees in computer science were unable to demonstrate the desired programming skills, though they all indicated in their resumes that they are proficient in C/C++ and objected oriented programming. It appears to the author that there is a gap between academic training and real world computing. As a veteran software developer with an interdisciplinary education background in engineering and applied mathematics, the author was determined to write a book for those who want to pursue a career in developing computational software for engineering and scientific applications. Readers will learn not only a disciplined way to implement numerical methods but also the software development process as a whole. In reading this book and completing all of the hands-on programming exercises, readers will gain an assured confidence and the sound programming skills needed to work in a software house or to develop their own computational software. Numerical methods in this book include evaluation of polynomial and series, root-finding, linear and nonlinear systems, inverse of a matrix, eigenvalues and eigenvector, integration, and least squares approximation. These methods are grouped and presented based on their implementation styles rather than their relevance. This book is organized as follows: Chapter 1 is a fast-paced brief introduction to C/C++ programming under Microsoft Visual Studio to familiarize readers with basic C/C++ syntax and debugging tools. Chapter 2 discusses floating-point notation, comparison, and arithmetic. Rudimentary understanding of floating-point is a pre-requisite for programmers. Failure to understand it is often the source of problems in numerical programming. Chapter 3 continues the study of advanced C/C++ programming such as default arguments, data structure and class, double pointers, dynamic memory allocations, and STL containers. Algorithm efficiency analysis and big O notation will also be discussed. This chapter is designed to help readers to gain the required C/C++ proficiency in implementing numerical methods. Chapter 4 is devoted to give readers an insight on how a computational software library may actually be developed in a software house. Readers will learn how to create and use a dynamic-link library, how to design flexible test drivers, and how to write scripts to improve productivity, to execute test suites automatically, and to compare the test results with the predicted outcomes. Chapter 5 deals with recursive algorithm. Because of its problem-solving power and simplicity in implementation, recursion in numerical methods will be discussed in this chapter with emphasizes on performance and memory usage. Chapter 6 discusses linear systems. Topics include solution to system of linear equations, matrix manipulation, inverse of a matrix, eigenvalue and eigenvector. Chapter 7 and 8 explore how to use function pointers, generic data pointer, and inheritance with polymorphism to design extensible and reusable code - an important topic in software engineering. Chapter 9 discusses the least square approximation method whose applications can be found in many fields such as computer-aided design, metrology, image processing, etc. Chapter 10 aims to develop a simple windows-based application for data visualization and manipulation. Through this miniature application, readers will get a glimpse of how sophisticated CAD/CAM systems are developed. Chapter 11 discusses how classical numerical methods can be parallelized to take the advantage of multi-thread programming. Common problems associated with parallel computing such as data race conditions, workload balance, synchronization, and parallel slowdown are discussed in detail. Appendix A is a brief introduction to Perl programming. Appendix B contains answers to all seven pre-interview questions given in the preface.

Recommended