A Practical Guide to Developing Computational Software

Dr. Yong-Ming Li

  • 出版商: CreateSpace Independ
  • 出版日期: 2013-11-14
  • 售價: $800
  • 貴賓價: 9.5$760
  • 語言: 英文
  • 頁數: 375
  • 裝訂: Paperback
  • ISBN: 1492973173
  • ISBN-13: 9781492973171

下單後立即進貨 (約1週~2週)


This book is written for those who want to pursue a career in developing computational software for engineering and scientific applications. Unlike traditional numerical programming books that focus on the analysis and implementation of numerical methods, this book emphasizes on the development of a reliable and reusable software package. Readers will not only learn implementation of numerical methods but also the software development process that includes creating and using a dynamic-link library, designing flexible test drivers, writing scripting tools for productivity, performing and validating an automated test suite. Based on the computational library developed in this book, readers will also learn how to develop a windows-based application for data visualization and manipulation. Multi-core processors bring parallel computing to mainstream customers. The shift to parallel computing leads to fundamental changes in the design of software. For this reason, this book discusses also how classical numerical programs can be parallelized via Open Multi-Processing.

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.