The topics covered in this book are all important from the standpoint of applications in physics, engineering, computer science, financial engineering, and computational biology. It is written for the person just getting started in these topics, and the author does a fairly good job of discussing them. Readers should not expect, and they will not get, in-depth discussions on these topics, as this would swell the book to 10 times the size. They will however get preparation for moving on to more advanced and complete treatments. Nonlinear and chaotic maps are considered in chapter 1, with elementary definitions given and six different examples of maps discussed. In discussing the calculation of numerical trajectories of maps, the author deals with the problem of large initial values for the maps and how to implement these in SymbolicC++ and Java. He also shows how to write/read data to a file using C, C++, and JAVA. The exception handling capability of JAVA comes out nicely, but no performance comparison between the three languages for simulating the maps is given by the author. The language REDUCE is used to discuss the stability of the fixed points of the logistic equation, but the code would be useless to the reader who did not have REDUCE since some of the function calls are hidden from the reader. Useful programs are given for calculating the Lyapunov and autocorrelation functions. In addition, C++ programs are given for evaluating the correlation integral for the Henon map. The programs he develops in this chapter can serve as a quick benchmark for one's own programs that calculate the same quantities. In chapter 2, the author discusses methods for studying time series, including the Lyapunov and Hurst exponents. These two quantities are of enormous importance in the study of dynamical systems, financial data, and network performance. The C++ program that the author gives for calculating the Hurst exponent will not work for arbitrary time intervals. This is followed in the next chapter by a consideration of autonomous systems of ordinary differential equations. The classification of fixed points is considered, and the important concept of a homoclinic orbit. The author gives a nice JAVA program that finds the homoclinic orbit of an anharmonic differential equation using the Lie series technique. The phase portrait of the Van der Pol oscillator is calculated using the Runge-Kutta technique in a C++ program, along with the Lotka-Volterra system from mathematical biology. Hamiltonian mechanics is discussed in chapter 4, with the important Henon-Heiles model from astrophysics is discussed and JAVA programs given for studying its behavior using the Poincare section technique. Newcomers to this technique will appreciate seeing it done here explicitly. Integrability of Hamiltonian systems using the Lax representation and Floquet theory are also treated, but only at a very rudimentary level. Dissipation is included in the next chapter, and the author discusses the classification of fixed points according to their stability. Lyapunov exponents are again brought into the picture, and the phenomenon of hyperchaos is discussed. Some bifurcation theory is introduced with an example of the Hopf bifurcation. Chapter 6 studies nonlinear driven systems, with the Duffing oscillator treated, and the author gives a useful program for calculating the autocorrelation function of this system. The controlling of chaos with feedback and non-feedback controls is the subject of the next chapter, mostly in the context of difference maps. Fractals finally get introduced in chapter 8, with iterated function systems defined but proofs of their properties omitted. The author gives programs for calculating various popular fractals, such as the dragon, Sierpinski gasket, Koch curve, the Mandelbrot set, and the Julia set. The main disappointment in this chapter is that the author does not give programs for calculating the Hausdorff dimension or capacity, quantities that are notoriously difficult to get a meaningful computational handle on. The author switches gears in the next chapter and discusses cellular automata, which have recently made a comeback, especially in research on quantum computation. The discussion is too brief however, and does not allow the reader to gain an appreciation of the properties of these important objects. Chapter 10 gives a brief overview of some techniques for solving differential equations, such as the Euler method and the Lie series technique. The latter is not commonly treated in beginning books so its inclusion here is helpful. Symplectic integration is also discussed briefly, but the author does not discuss how to check the integrators using backward integration, which is commonly used in conservative systems modeled by symplectic maps. Chapter 11, covering neural networks, is the most well-written in the book, and the newcomer to the field will get a fairly decent introduction to the subject. The supplied programs serve to illustrate some of the important concepts in neural networks, such as the Hopfield model, the Kohonen network, the perceptron learning algorithm, and the back-propagation algorithm. Chapter 12 is an introduction to genetic algorithms, and I find this one particularly nice also, as it does give a rudimentary introduction to what evolutionary algorithms are all about, and gives some elementary genetic programs that find the maximum of one- and two-dimensional maps. He also discusses simulated annealing, and gives a useful program that allows the reader to see clearly how this technique works. The last chapter covers fuzzy sets and fuzzy logic, which has also taken on importance in recent years, especially in data mining and financial engineering. The programs given to illustrate the concepts are particularly interesting from the standpoint of coding in C++, as the author uses friend functions and operating overloading in some of them. The reader gets a good overview of fuzzy reasoning and fuzzy rule-based systems. |