The complex-step derivative approximation
By Joaquim R. Martins, P. Sturdza, Juan José Palacios Alonso. TOMS, 2003
800 citations recorded by the source corpus.
The complex-step derivative approximation and its application to numerical algorithms are presented. Improvements to the basic method are suggested that further increase its accuracy and robustness and unveil the connection to algorithmic differentiation theory. A general procedure for the implementation of the complex-step method is described in detail and a script is developed that automates its implementation. Automatic implementations of the complex-step method for Fortran and C/C++ are presented and compared to existing algorithmic differentiation tools. The complex-step method is tested in two large multidisciplinary solvers and the resulting sensitivities are compared to results given by finite differences. The resulting sensitivities are shown to be as accurate as the analyses. Accuracy, robustness, ease of implementation and maintainability make these complex-step derivative approximation tools very attractive options for sensitivity analysis.
Subfields: Computational Theory and Mathematics, Numerical Analysis
View Paper: https://www.semanticscholar.org/paper/a5f497bff898033f71cf116a56304df1608f97ea
How researchers see this paper
The researchers whose trusted networks rank it highest, strongest advocate first. Every researcher gets a different order.
In Computational Theory and Mathematics
- Joaquim R. Martins
- Gaetan K. W. Kenway
- Andrew B. Lambe
- John T. Hwang
- Zhoujie Lyu
- Charles A. Mader
- Ping He
- Nicholas M. K. Poon
In Numerical Analysis
- Joaquim R. Martins
- Gaetan K. W. Kenway
- Andrew B. Lambe
- John T. Hwang
- Zhoujie Lyu
- Nicholas M. K. Poon
- Charles A. Mader
- Ping He
Citations in the corpus
- Generic Methods for Optimization-Based Modeling (2012, background): “Complex perturbations (Martins et al., 2003) could also be used to reduce round-off error, if the code for f supports complex numbers.”
- A Coupled-Adjoint Sensitivity Analysis Method for High-Fidelity Aero-Structural Design (2005, methodology): “For comparison purposes, we compute the exact discrete value of these sensitivities using the complex-step derivative approximation (Martins et al., 2003).”
- pyOpt: a Python-based object-oriented framework for nonlinear constrained optimization (2011, neutral): “The Gradient class provides a unified interface for the gradient calculation. pyOpt provides an implementation of the finite-difference method (default setting) and the complex-step method (Martins et al. 2003).”
- Review and Unification of Methods for Computing Derivatives of Multidisciplinary Computational Models (2013, methodology): “All the complex arithmetic operations result in an approximation of the derivative in the complex part [61].”
- Multidisciplinary design optimization: A survey of architectures (2013, methodology): “If the discipline analysis code allows for the use of complex numbers, the complex-step method [91, 92] is an alternative approach that gives machine-precision derivative estimates.”
- Extensions of the first and second complex-step derivative approximations (2008, background): “This approximation is still subject to difference errors, but the truncation error associated with this approximation is h(4) f ((6))(x)/360 whereas the error associated with Eq.”
- Automatic Differentiation Adjoint of the Reynolds-Averaged Navier-Stokes Equations with a Turbulence Model (2013, methodology): “We verify the adjoint accuracy with complex-step derivative approach given by: [5], dF dx = Im[F (x+ ih)] h , (20) where h is the complex step length.”
- An adaptive approach to constraint aggregation using adjoint sensitivity analysis (2007, methodology): “The complex-step method exhibits quadratic convergence, which is consistent with the error term in the complexstep derivative approximation (Martins et al. 2003).”
- Efficient multiple hyperparameter learning for log-linear models (2007, neutral): “Complex step derivative [24].”
- OpenMDAO: an open-source framework for multidisciplinary design, analysis, and optimization (2019, methodology): “The complex-step method [91, 70] is not subject to these inaccuracies, but it requires access to the source code to implement.”
- Effective adjoint approaches for computational fluid dynamics (2019, methodology): “The complex-step method computes the derivative of a real function by perturbing it with a complex step instead of a real one and taking the imaginary part of the result, yielding the approximation [31, 149] ( ∂y ∂x )”