{
 "id": "eptsj6jkaf",
 "slug": "adjoint-sensitivity-analysis",
 "title": "Adjoint sensitivity analysis",
 "updated": "2026-09-30",
 "topic_path": [
  {
   "id": "physical",
   "label": "Physical world and mathematics",
   "api_url": "https://www.edgepedia.org/api/v1/topics/physical"
  },
  {
   "id": "physical.math",
   "label": "Mathematics and statistics",
   "api_url": "https://www.edgepedia.org/api/v1/topics/physical.math"
  },
  {
   "id": "physical.math.analysis",
   "label": "Analysis and mathematical models",
   "api_url": "https://www.edgepedia.org/api/v1/topics/physical.math.analysis"
  },
  {
   "id": "physical.math.analysis.numerical_analysis_and_computation",
   "label": "Numerical analysis and computation",
   "api_url": "https://www.edgepedia.org/api/v1/topics/physical.math.analysis.numerical_analysis_and_computation"
  }
 ],
 "geo": [
  {
   "id": "geo.nongeo.t1946.physical.math.analysis.numerical_analysis_and_computation",
   "label": "Non-geographic · 1946 to 2000: Numerical analysis and computation",
   "api_url": "https://www.edgepedia.org/api/v1/geo/geo.nongeo.t1946.physical.math.analysis.numerical_analysis_and_computation",
   "path": [
    {
     "id": "geo.nongeo",
     "label": "Non-geographic",
     "api_url": "https://www.edgepedia.org/api/v1/geo/geo.nongeo"
    },
    {
     "id": "geo.nongeo.t1946",
     "label": "Non-geographic · 1946 to 2000",
     "api_url": "https://www.edgepedia.org/api/v1/geo/geo.nongeo.t1946"
    },
    {
     "id": "geo.nongeo.t1946.physical",
     "label": "Physical world and mathematics",
     "api_url": "https://www.edgepedia.org/api/v1/geo/geo.nongeo.t1946.physical"
    },
    {
     "id": "geo.nongeo.t1946.physical.math",
     "label": "Mathematics and statistics",
     "api_url": "https://www.edgepedia.org/api/v1/geo/geo.nongeo.t1946.physical.math"
    },
    {
     "id": "geo.nongeo.t1946.physical.math.analysis",
     "label": "Analysis and mathematical models",
     "api_url": "https://www.edgepedia.org/api/v1/geo/geo.nongeo.t1946.physical.math.analysis"
    },
    {
     "id": "geo.nongeo.t1946.physical.math.analysis.numerical_analysis_and_computation",
     "label": "Numerical analysis and computation",
     "api_url": "https://www.edgepedia.org/api/v1/geo/geo.nongeo.t1946.physical.math.analysis.numerical_analysis_and_computation"
    }
   ]
  }
 ],
 "excerpt": "Adjoint sensitivity analysis is a computational method that computes gradients of a model output with respect to many parameters at a cost independent of their number.",
 "snippet": "Adjoint sensitivity analysis is a computational method that computes gradients of a model output with respect to many parameters at a cost independent of their number.",
 "node": "physical.math.analysis.numerical_analysis_and_computation",
 "markdown": "# Adjoint sensitivity analysis\n\nAdjoint sensitivity analysis is a computational method that computes the gradient of a scalar output of a numerical model with respect to many input parameters by solving one auxiliary, linear adjoint problem, at a cost essentially independent of the number of parameters.<sup>[1](https://math.mit.edu/~stevenj/18.336/adjoint.pdf)</sup> In neural networks the same computation is known as [backpropagation](https://www.edgepedia.org/backpropagation), and in automatic differentiation as reverse-mode differentiation.<sup>[1](https://math.mit.edu/~stevenj/18.336/adjoint.pdf)</sup> It is the gradient engine for optimal design, control, inverse problems, sensitivity analysis, and uncertainty quantification <sup>[2](https://hal.science/hal-01242950v1/document)</sup>, and for [PDE-constrained optimization](https://www.edgepedia.org/pde-constrained-optimization) tasks such as fitting model parameters to observations or designing shapes like airplane wings.<sup>[3](https://cs.stanford.edu/~ambrad/adjoint_tutorial.pdf)</sup>\n\n| Key fact | Detail |\n|---|---|\n| What one adjoint solve buys | The full gradient of a scalar functional with respect to an arbitrarily large parameter set, at cost comparable to one forward solve <sup>[1](https://math.mit.edu/~stevenj/18.336/adjoint.pdf)</sup> |\n| Typical runtime | About 2 to 5 times one cost-function evaluation in ocean modeling <sup>[4](https://mitgcm.org/public/r2_manual/latest/online_documents/node205.html)</sup>; roughly two flow solutions in aerodynamics <sup>[5](http://aero-comlab.stanford.edu/Papers/jameson.vki03.pdf)</sup> |\n| Linearity | The adjoint equation is always linear, even when the governing equation is not <sup>[6](https://www.oden.utexas.edu/media/reports/2023/2304.pdf)</sup> |\n| Reverse-mode AD bound | Floating-point operations are guaranteed no more than three times those of the original nonlinear code <sup>[7](https://people.maths.ox.ac.uk/~gilesm/files/ftc00.pdf)</sup> |\n| Continuous vs discrete | Continuous adjoints cost about 2 primal simulations but can be numerically inconsistent; discrete adjoints via automatic differentiation cost 2 to 20 but are consistent <sup>[8](https://drops.dagstuhl.de/storage/04dagstuhl-reports/volume04/issue09/14371/DagRep.4.9.1/DagRep.4.9.1.pdf)</sup> |\n| Checkpointing | Raises runtime by at most 2x while cutting memory, though its memory use is not generally \\( N \\cdot C \\) <sup>[9](https://arxiv.org/pdf/2106.13879)</sup><sup> • </sup><sup>[37](https://sundials.readthedocs.io/en/v7.7.0/cvodes/Mathematics_link.html)</sup> |\n| Machine learning | Applying the reduced-space adjoint approach to deep neural network training recovers the backpropagation algorithm <sup>[6](https://www.oden.utexas.edu/media/reports/2023/2304.pdf)</sup> |\n\n## How it works\n\nThe method follows from treating the state equation as a constraint. For a state \\( x \\) depending on parameters \\( p \\) through \\( g(x, p) = 0 \\), and an objective \\( f \\), one forms the Lagrangian and chooses the multiplier \\( \\lambda \\) so that the expensive cross term vanishes. This choice is the adjoint equation \\( g_x^{T} \\cdot \\lambda = -f_x^{T} \\), and what remains is the gradient \\( \\mathrm{d}_{p} f = f_p + \\lambda^{T} \\cdot g_p \\).<sup>[3](https://cs.stanford.edu/~ambrad/adjoint_tutorial.pdf)</sup> In the general distributed-system form, the gradient \\( j'(u) = \\partial_{u} J(u, y(u)) + A'(u)y(u) \\cdot p \\) requires solving only the additional adjoint equation \\( A^{T}(u) \\cdot p = -\\partial_{y} J(u, y(u)) \\), whatever the number of parameters \\( k \\).<sup>[2](https://hal.science/hal-01242950v1/document)</sup>\n\nThe direct (forward) formula instead needs \\( k \\) linear solves, one per parameter, so the adjoint formula largely outperforms it for many-parameter problems.<sup>[2](https://hal.science/hal-01242950v1/document)</sup> The adjoint-state method in geophysics is the same idea: one extra linear system, with gradient cost often equivalent to one or two forward evaluations and almost independent of the number of model parameters.<sup>[10](https://adsabs.harvard.edu/pdf/2006GeoJI.167..495P)</sup>\n\nTwo structural facts make the solve cheap. The adjoint equation is always linear even when the original equation is not <sup>[6](https://www.oden.utexas.edu/media/reports/2023/2304.pdf)</sup>, and the adjoint system has the same size, condition number, and eigenvalue spectrum as the original \\( A \\cdot x = b \\) system, so an existing LU factorization \\( A = L \\cdot U \\) immediately gives \\( A^{T} = U^{T} \\cdot L^{T} \\).<sup>[1](https://math.mit.edu/~stevenj/18.336/adjoint.pdf)</sup> For time-dependent problems treated by semi-discretization, the adjoint equation is an ODE integrated backwards in time from \\( t = T \\) to 0, and the total work of computing the functional and its gradient is approximately equivalent to integrating only two ODEs.<sup>[3](https://cs.stanford.edu/~ambrad/adjoint_tutorial.pdf)</sup>\n\n## How it is done\n\nA typical inversion or design loop has four steps: solve the forward problem; solve the adjoint problem and, combined with the forward solution, obtain \\( \\nabla_p E(p) \\); perform a line search; and update the model \\( p_{k+1} = p_k + \\alpha \\cdot \\nabla_p E(p) \\).<sup>[11](https://www.crewes.org/Documents/ResearchReports/2010/CRR201091.pdf)</sup> For time-dependent systems the adjoint is integrated backwards in time, driven by forcing derived from the mismatch between the forward solution and the observations.<sup>[3](https://cs.stanford.edu/~ambrad/adjoint_tutorial.pdf)</sup>\n\nThe approach is intrusive: it requires developing an adjoint solver, either analytic or derived by automatic differentiation.<sup>[2](https://hal.science/hal-01242950v1/document)</sup> Discrete adjoint solvers differentiate the timestepping algorithms themselves, whereas continuous adjoint solvers such as SUNDIALS CVODES and IDAS, on which CasADi builds, require users to derive a new set of equations before discretization.<sup>[12](https://ar5iv.labs.arxiv.org/html/1912.07696)</sup> Annotation-based tools remove most of the burden: dolfin-adjoint overloads the solve and assign calls of a finite-element code to record every step of the forward model, then symbolically derives the tangent linear and adjoint models with no changes to user code; a gradient is produced by a single compute_gradient call, and adjoining a Burgers-equation model required only four added lines.<sup>[13](https://dolfin-adjoint-doc.readthedocs.io/en/latest/documentation/tutorial.html)</sup> Hand-written adjoint codes compute large gradients with machine accuracy at a small constant multiple of the primal cost, but may take several man-years to write and are error-prone and hard to maintain.<sup>[8](https://drops.dagstuhl.de/storage/04dagstuhl-reports/volume04/issue09/14371/DagRep.4.9.1/DagRep.4.9.1.pdf)</sup>\n\n## Origin\n\nThe adjoint approach grew out of optimal control theory. J. L. Lions's 1971 monograph *Optimal Control of Systems Governed by Partial Differential Equations* established the framework for systems governed by PDEs.<sup>[14](https://doi.org/10.1007/978-3-642-65024-6)</sup> Earlier work the method built on includes O. Pironneau's 1974 paper *On optimum design in fluid mechanics*, a precursor on optimum design in fluid mechanics.<sup>[15](https://doi.org/10.1017/s0022112074002023)</sup> Jean Cea (1986) gave the rapid computation of the directional derivative of the cost function through a Lagrangian formulation for shape optimization and identification.<sup>[16](https://doi.org/10.1051/m2an/1986200303711)</sup> Antony Jameson's 1988 paper *Aerodynamic design via control theory* is regarded as pioneering the use of adjoint equations in aeronautical CFD.<sup>[17](https://doi.org/10.1007/bf01061285)</sup>\n\nEngineering use predates much of this literature: a 1965 NASA technical note documents increasing use of the method of adjoint systems for trajectory optimization, two-point boundary value problems, and simulation, with the adjoint solution integrated backward in time to obtain sensitivities in one run.<sup>[18](https://ntrs.nasa.gov/api/citations/19650003538/downloads/19650003538.pdf)</sup> Algorithmic consolidation followed in several directions: Michael B. Giles, Mihai C. Duta, Jens-Dominik Muller, and Niles A. Pierce (2003) developed algorithms for discrete adjoint methods <sup>[19](https://doi.org/10.2514/2.1961)</sup>, and Yang Cao, Shengtai Li, Linda Petzold, and Radu Serban (2003) derived the adjoint DAE system, with consistent initialization, for parameter-dependent DAEs of index up to two.<sup>[20](https://doi.org/10.1137/s1064827501380630)</sup>\n\n## Variants\n\n**Continuous versus discrete adjoints.** The adjoint can be formed by differentiating the discretized equations (discrete approach) or by discretizing a separately derived adjoint PDE (continuous approach).<sup>[21](https://cse.cs.ucsb.edu/sites/default/files/publications/adjpde2.pdf)</sup> Continuous adjoints are derived analytically and cost approximately two primal simulations, but they can be numerically inconsistent with the primal discretization; their gradients are guaranteed fully consistent only at the limit of an infinitely fine mesh, giving inaccurate gradients on coarse meshes.<sup>[8](https://drops.dagstuhl.de/storage/04dagstuhl-reports/volume04/issue09/14371/DagRep.4.9.1/DagRep.4.9.1.pdf)</sup><sup> • </sup><sup>[22](https://websites.umich.edu/~mdolaboratory/pdf/Kenway2019a.pdf)</sup> Discrete adjoints built by automatic differentiation are consistent with the primal discretization and independent of mesh size, at 2 to 20 primal simulations depending on AD mode, tool maturity, and user expertise.<sup>[8](https://drops.dagstuhl.de/storage/04dagstuhl-reports/volume04/issue09/14371/DagRep.4.9.1/DagRep.4.9.1.pdf)</sup>\n\n**Checkpointed adjoints.** Time-dependent adjoints must re-read the forward trajectory, so checkpointing re-solves the forward problem from saved time points, raising runtime by at most 2x while keeping memory well below the full trajectory of states rather than a general cost of \\( N \\cdot C \\).<sup>[9](https://arxiv.org/pdf/2106.13879)</sup><sup> • </sup><sup>[37](https://sundials.readthedocs.io/en/v7.7.0/cvodes/Mathematics_link.html)</sup> An offline schedule that minimizes recomputed steps given the number of steps and allowed checkpoints is used by ADOL-C, ADtool, Tapenade, and dolfin-adjoint.<sup>[9](https://arxiv.org/pdf/2106.13879)</sup> H-Revolve extends optimal checkpointing to platforms with several storage levels of different writing and reading costs and is released as a public Python library.<sup>[23](https://dl.acm.org/doi/10.1145/3378672)</sup>\n\n**Software.** Source-transformation AD tools include Tapenade <sup>[24](https://doi.org/10.1145/2450153.2450158)</sup>, clad, and Enzyme; operator-overloading tools include Adept, CppAD, and ADOL-C, which are typically slower due to memory usage but easier to maintain.<sup>[25](https://sbel.wisc.edu/wp-content/uploads/sites/569/2023/10/main.pdf)</sup> CoDiPack <sup>[26](https://doi.org/10.1145/3356900)</sup> is the AD tool chosen in SU2 <sup>[27](https://link.springer.com/article/10.1007/s00158-021-03117-5)</sup>, and the ADjoint approach of Charles A. Mader, Joaquim R. R. A. Martins, Juan J. Alonso, and Edwin van der Weide (2008) targets rapid development of discrete adjoint solvers.<sup>[28](https://doi.org/10.2514/1.29123)</sup> PETSc TSAdjoint provides first- and second-order adjoints for ODE/DAE systems with revolve-based checkpointing, dolfin-adjoint serves FEniCS and Firedrake, and FATODE derives adjoints from timestepping algorithms.<sup>[12](https://ar5iv.labs.arxiv.org/html/1912.07696)</sup> Python and Julia AD tools such as autograd, JAX, and Zygote implement reverse mode but cannot differentiate external-library calls and handle iterative solvers suboptimally, so a manual vector-Jacobian product can be supplied.<sup>[1](https://math.mit.edu/~stevenj/18.336/adjoint.pdf)</sup>\n\n## Applications\n\n**Aerodynamic shape optimization** is the classical use: the control theory approach was first applied to transonic flow with adjoint formulations for the potential flow and Euler equations <sup>[5](http://aero-comlab.stanford.edu/Papers/jameson.vki03.pdf)</sup>, building on the 1988 control theory formulation.<sup>[17](https://doi.org/10.1007/bf01061285)</sup> One-shot methods that converge primal, adjoint, and design equations simultaneously reach optimization costs of only 2 to 8 times a single steady Navier–Stokes simulation.<sup>[8](https://drops.dagstuhl.de/storage/04dagstuhl-reports/volume04/issue09/14371/DagRep.4.9.1/DagRep.4.9.1.pdf)</sup>\n\n**Seismic inversion** uses the adjoint formulation of the wave equation, where the forcing term of the adjoint equation is called the adjoint source <sup>[3](https://cs.stanford.edu/~ambrad/adjoint_tutorial.pdf)</sup>; Fréchet kernels are computed as zero-lag cross-correlations of a forward-propagated field and a time-reversed adjoint field, requiring in principle only two forward-problem solves.<sup>[11](https://www.crewes.org/Documents/ResearchReports/2010/CRR201091.pdf)</sup> **Data assimilation** in ocean modeling uses adjoint compilers, with the adjoint variables acting as the [Lagrange multipliers](https://www.edgepedia.org/lagrange-multipliers) of the model equations.<sup>[4](https://mitgcm.org/public/r2_manual/latest/online_documents/node205.html)</sup>\n\n**Machine learning.** The discrete adjoint approach has been shown to deliver better accuracy than the continuous adjoint in machine learning applications.<sup>[12](https://ar5iv.labs.arxiv.org/html/1912.07696)</sup> For neural ODEs, a trajectory-checkpoint adjoint that records the forward trajectory for the reverse solve achieved half the error rate in half the training time compared with the adjoint and naive methods <sup>[29](https://proceedings.mlr.press/v119/zhuang20a/zhuang20a.pdf)</sup>, and memory-efficient accurate gradients for neural ODEs were developed in ANODE by Amir Gholami, Kurt Keutzer, and George Biros (2019).<sup>[30](https://doi.org/10.48550/arxiv.1902.10298)</sup>\n\n## Limitations and alternatives\n\n**Memory** is the classic weakness for time-dependent problems, where the state may need to be stored at all times to compute the gradient integral <sup>[1](https://math.mit.edu/~stevenj/18.336/adjoint.pdf)</sup>; checkpointing trades at most 2x runtime for memory use well below the full storage of \\( N \\cdot C \\) states.<sup>[9](https://arxiv.org/pdf/2106.13879)</sup><sup> • </sup><sup>[37](https://sundials.readthedocs.io/en/v7.7.0/cvodes/Mathematics_link.html)</sup> Unsteady adjoints cost at least one order of magnitude more than steady ones because linearizations must be stored and recomputed at each time step.<sup>[22](https://websites.umich.edu/~mdolaboratory/pdf/Kenway2019a.pdf)</sup>\n\n**Numerical failure modes** are specific. Discrete adjoints based on a standard primal discretization may fail to converge to the analytic adjoint, as uniform channel flows with Dirichlet or Neumann conditions show, precluding use of point values of the adjoint solution.<sup>[8](https://drops.dagstuhl.de/storage/04dagstuhl-reports/volume04/issue09/14371/DagRep.4.9.1/DagRep.4.9.1.pdf)</sup> On a stiff ODE model (ROBER), the adjoint method struggles to converge unless the step size is decreased to 0.1, which is much more computationally intensive.<sup>[31](https://journals.plos.org/ploscompbiol/article?id=10.1371%2Fjournal.pcbi.1009598)</sup> Tailored adjoint approaches are not applicable when the transposed Jacobian is not full rank, for example due to conserved quantities.<sup>[32](https://journals.plos.org/plosone/article?id=10.1371%2Fjournal.pone.0312148)</sup> Each observation introduces a jump discontinuity in the adjoint solution, making cost depend on observation count.<sup>[33](https://www.cs.toronto.edu/~calver/papers/adjoint_paper.pdf)</sup> When the gradient does not exist, the discrete adjoint still applies and returns subgradients, requiring suitable optimization algorithms.<sup>[34](https://ar5iv.labs.arxiv.org/html/1107.1831)</sup> The adjoint-state method also does not provide the sensitivity of the solution to errors, for which Fréchet derivatives or [Monte Carlo](https://www.edgepedia.org/monte-carlo) methods are needed.<sup>[10](https://adsabs.harvard.edu/pdf/2006GeoJI.167..495P)</sup>\n\n**Alternatives.** Reverse-mode AD computes gradients of arbitrary size \\( n \\) at a constant relative cost, typically between 1 and 100, versus at least \\( n + 1 \\) simulations for finite differences; for \\( n = 10^{6} \\) and a 1-minute simulation this is 1 to 100 minutes versus almost two years.<sup>[35](https://pmc.ncbi.nlm.nih.gov/articles/PMC4772124/)</sup> AD derivatives are exact up to machine precision, while finite differences incur truncation errors and need a step size balancing accuracy and stability <sup>[34](https://ar5iv.labs.arxiv.org/html/1107.1831)</sup>; across six real-world ODE problems, forward and adjoint sensitivity were more reliable and efficient than finite differences, which can be numerically unstable.<sup>[32](https://journals.plos.org/plosone/article?id=10.1371%2Fjournal.pone.0312148)</sup> Forward-mode AD suits problems with more outputs than inputs, reverse mode the opposite; forward-mode cost scales linearly with the number of inputs with a proportionality constant near one.<sup>[36](https://public.websites.umich.edu/~mdolaboratory/pdf/Martins2013a.pdf)</sup> The complex-step method requires access to the source code <sup>[36](https://public.websites.umich.edu/~mdolaboratory/pdf/Martins2013a.pdf)</sup> and requires model functions to be complex analytic, excluding discontinuities, maxima, minima, and absolute values.<sup>[31](https://journals.plos.org/ploscompbiol/article?id=10.1371%2Fjournal.pcbi.1009598)</sup>\n\n## References\n\n1. [Notes on Adjoint Methods for 18.336 (Steven G. Johnson, MIT)](https://math.mit.edu/~stevenj/18.336/adjoint.pdf)\n2. [A review of adjoint methods for sensitivity analysis, uncertainty quantification and optimization in numerical codes](https://hal.science/hal-01242950v1/document)\n3. [PDE-constrained optimization and the adjoint method (A. M. Bradley, Stanford tutorial, 2024 revision)](https://cs.stanford.edu/~ambrad/adjoint_tutorial.pdf)\n4. [MITgcm manual: Reverse or adjoint sensitivity](https://mitgcm.org/public/r2_manual/latest/online_documents/node205.html)\n5. [Aerodynamic Shape Optimization Using the Adjoint Method (Jameson, VKI Lecture Notes)](http://aero-comlab.stanford.edu/Papers/jameson.vki03.pdf)\n6. [Oden Institute REPORT 23-04: Adjoint Methods in Computational Sciences, Engineering, and Mathematics](https://www.oden.utexas.edu/media/reports/2023/2304.pdf)\n7. [An Introduction to the Adjoint Approach to Design (Giles & Pierce)](https://people.maths.ox.ac.uk/~gilesm/files/ftc00.pdf)\n8. [Adjoint Methods in Computational Science, Engineering, and Finance (Dagstuhl Seminar 14371 report)](https://drops.dagstuhl.de/storage/04dagstuhl-reports/volume04/issue09/14371/DagRep.4.9.1/DagRep.4.9.1.pdf)\n9. [Optimal checkpointing for adjoint computation of multistage time-stepping schemes (CAMS)](https://arxiv.org/pdf/2106.13879)\n10. [A review of the adjoint-state method for computing the gradient of a functional with geophysical applications (Plessix, Geophysical Journal International, 2006)](https://adsabs.harvard.edu/pdf/2006GeoJI.167..495P)\n11. [Tutorial on the continuous and discrete adjoint state method and basic implementation (Yedlin & Van Vorst, CREWES 2010)](https://www.crewes.org/Documents/ResearchReports/2010/CRR201091.pdf)\n12. [PETSc TSAdjoint: a discrete adjoint ODE solver for first-order and second-order sensitivity analysis (Smith et al.)](https://ar5iv.labs.arxiv.org/html/1912.07696)\n13. [dolfin-adjoint documentation: First steps](https://dolfin-adjoint-doc.readthedocs.io/en/latest/documentation/tutorial.html)\n14. [J. L. Lions (1971). Optimal Control of Systems Governed by Partial Differential Equations. .](https://doi.org/10.1007/978-3-642-65024-6)\n15. [O. Pironneau (1974). On optimum design in fluid mechanics. Journal of Fluid Mechanics.](https://doi.org/10.1017/s0022112074002023)\n16. [Jean Cea (1986). Conception optimale ou identification de formes, calcul rapide de la dérivée directionnelle de la fonction coût. ESAIM Mathematical Modelling and Numerical Analysis.](https://doi.org/10.1051/m2an/1986200303711)\n17. [Antony Jameson (1988). Aerodynamic design via control theory. Journal of Scientific Computing.](https://doi.org/10.1007/bf01061285)\n18. [Application of Adjoint Method to Sensitivity Analysis (NASA technical note, 1965)](https://ntrs.nasa.gov/api/citations/19650003538/downloads/19650003538.pdf)\n19. [Michael B. Giles and colleagues (2003). Algorithm Developments for Discrete Adjoint Methods. AIAA Journal.](https://doi.org/10.2514/2.1961)\n20. [Yang Cao and colleagues (2003). Adjoint Sensitivity Analysis for Differential-Algebraic Equations: The Adjoint DAE System and Its Numerical Solution. SIAM Journal on Scientific Computing.](https://doi.org/10.1137/s1064827501380630)\n21. [Adjoint methods for transient PDEs with adaptive mesh refinement (Li, Li, Petzold, J. Computational Physics 2004)](https://cse.cs.ucsb.edu/sites/default/files/publications/adjpde2.pdf)\n22. [Effective Adjoint Approaches for Computational Fluid Dynamics (Kenway et al.)](https://websites.umich.edu/~mdolaboratory/pdf/Kenway2019a.pdf)\n23. [H-Revolve: A Framework for Adjoint Computation on Synchronous Hierarchical Platforms (ACM TOMS 2020)](https://dl.acm.org/doi/10.1145/3378672)\n24. [Laurent Hascoet, Valérie Pascual (2013). The Tapenade automatic differentiation tool. ACM Transactions on Mathematical Software.](https://doi.org/10.1145/2450153.2450158)\n25. [Computing sensitivities of an Initial Value Problem via Automatic Differentiation: A Primer](https://sbel.wisc.edu/wp-content/uploads/sites/569/2023/10/main.pdf)\n26. [Max Sagebaum, Tim Albring, Nicolas R. Gauger (2019). High-Performance Derivative Computations using CoDiPack. ACM Transactions on Mathematical Software.](https://doi.org/10.1145/3356900)\n27. [Discrete adjoint methodology for general multiphysics problems (Structural and Multidisciplinary Optimization, SU2)](https://link.springer.com/article/10.1007/s00158-021-03117-5)\n28. [Charles A. Mader and colleagues (2008). ADjoint: An Approach for the Rapid Development of Discrete Adjoint Solvers. AIAA Journal.](https://doi.org/10.2514/1.29123)\n29. [Adaptive Checkpoint Adjoint (ACA) Method for Gradient Estimation in Neural ODE (ICML 2020)](https://proceedings.mlr.press/v119/zhuang20a/zhuang20a.pdf)\n30. [Gholami, Amir, Keutzer, Kurt, Biros, George (2019). ANODE: Unconditionally Accurate Memory-Efficient Gradients for Neural ODEs. arXiv (Cornell University).](https://doi.org/10.48550/arxiv.1902.10298)\n31. [Differential methods for assessing sensitivity in biological models (PLOS Computational Biology)](https://journals.plos.org/ploscompbiol/article?id=10.1371%2Fjournal.pcbi.1009598)\n32. [Benchmarking methods for computing local sensitivities in ODE models at dynamic and steady states (PLOS One, 2024)](https://journals.plos.org/plosone/article?id=10.1371%2Fjournal.pone.0312148)\n33. [Adjoint and variational approaches for least-squares sensitivities in ODEs and DDEs (Calver & Enright)](https://www.cs.toronto.edu/~calver/papers/adjoint_paper.pdf)\n34. [Adjoints and automatic (algorithmic) differentiation in computational finance](https://ar5iv.labs.arxiv.org/html/1107.1831)\n35. [GPU-Accelerated Adjoint Algorithmic Differentiation](https://pmc.ncbi.nlm.nih.gov/articles/PMC4772124/)\n36. [Review and Unification of Methods for Computing Derivatives of Multidisciplinary Computational Models (Martins et al., AIAA Journal)](https://public.websites.umich.edu/~mdolaboratory/pdf/Martins2013a.pdf)\n37. [4.2. Mathematical Considerations, Documentation for SUNDIALS documentation](https://sundials.readthedocs.io/en/v7.7.0/cvodes/Mathematics_link.html)\n\n---\n*Topic: Encyclopedia › Physical world and mathematics › Mathematics and statistics › Analysis and mathematical models › Numerical analysis and computation*\n\n*Initially written Sep 29, 2026 · Reviewed: Sep 30, 2026 · Edited: Sep 30, 2026 · Last review: Sep 30, 2026*\n\n*Copyright 2026 EdgeChat AI, a subsidiary of Biostate AI.*\n\nLicense: Edgepedia Community License 1.0, https://www.edgepedia.org/edgepedia/license\n",
 "same_as": [
  "https://math.mit.edu/~stevenj/18.336/adjoint.pdf",
  "https://cs.stanford.edu/~ambrad/adjoint_tutorial.pdf",
  "https://websites.umich.edu/~mdolaboratory/pdf/Kenway2019a.pdf",
  "https://www.cs.toronto.edu/~calver/papers/adjoint_paper.pdf",
  "https://public.websites.umich.edu/~mdolaboratory/pdf/Martins2013a.pdf"
 ],
 "url": "https://www.edgepedia.org/adjoint-sensitivity-analysis",
 "markdown_url": "https://www.edgepedia.org/adjoint-sensitivity-analysis.md",
 "license": {
  "name": "Edgepedia Community License 1.0",
  "url": "https://www.edgepedia.org/edgepedia/license",
  "summary": "Free with credit, commercial use included. AI training is open to everyone. For other uses, organizations over USD 100M in revenue or 100M monthly users license separately.",
  "spdx": "LicenseRef-Edgepedia-Community-1.0"
 },
 "credit": "\"Adjoint sensitivity analysis\", Edgepedia (EdgeChat), https://www.edgepedia.org/adjoint-sensitivity-analysis. Edgepedia Community License 1.0.",
 "credit_md": "\"[Adjoint sensitivity analysis](https://www.edgepedia.org/adjoint-sensitivity-analysis)\", Edgepedia (EdgeChat), [https://www.edgepedia.org/adjoint-sensitivity-analysis](https://www.edgepedia.org/adjoint-sensitivity-analysis). [Edgepedia Community License 1.0](https://www.edgepedia.org/edgepedia/license).",
 "credit_html": "\"<a href=\"https://www.edgepedia.org/adjoint-sensitivity-analysis\">Adjoint sensitivity analysis</a>\", Edgepedia (EdgeChat), <a href=\"https://www.edgepedia.org/adjoint-sensitivity-analysis\">https://www.edgepedia.org/adjoint-sensitivity-analysis</a>. <a href=\"https://www.edgepedia.org/edgepedia/license\">Edgepedia Community License 1.0</a>.",
 "speakable": "Adjoint sensitivity analysis is a computational method that computes gradients of a model output with respect to many parameters at a cost independent of their number."
}
