The LaueView code described by Ren and Moffatt make use of a variety of numerical analysis and optimization techniques. Essentially, the problem is one of fitting a model to observed data using a least-squares measure of the goodness of fit. Major issues that arise include (i) parametrizing the model and (ii) efficient choice and implementation of an algorithm for the nonlinear least-squares problem.
In this talk with describe our experience to date with the second topic. We describe a trust-region Levenberg-Marquardt algorithm that has proved to be more efficient than the previously implemented strategy, yielding speedups of between 3 and 10 on most of the data sets we tested. We will discuss how the textbook Levenberg-Marquardt implementation had to be adapted to the requirements of the problem at hand (in particular, the fact that a Jacobian matrix cannot be computed explicitly because it is simply too large.) Much of the savings came from a decoupling of the fitting function evaluation from the more expensive derivative evaluation, so that new derivatives were evaluated only after a successful step had been taken. We also discuss "details" that were significant in improving the efficiency and robustness, such as speedup of a time-critical loop involving intrinsic FORTRAN functions and the use of double precision accumulation in evaluation of the approximate Hessian. Finally, we discuss plans for testing alternative, more compact parametrizations of the model, which may improve both the efficiency, robustness, and accuracy of LaueView.
Our experiences in detecting and speeding up time-critical sections of the code by using techniques from numerical analysis, and in encapsulating the complex parts of the code to make possible the use of more powerful optimization techniques, will certainly be relevant to other codes to be discussed at the meeting .
(posted 21-Oct-97 jw)