
Adjoint Gradients and Reproducible Solvers in PyTorch
For two decades, the hardest part of every inverse problem I touched was the same: deriving, coding, and sign-checking the adjoint equations that supply the gradient. Reverse-mode automatic differentiation ended that. The gradient that once cost a graduate student a season now comes exact, for the price of a backward pass — and autodiff, it turns out, is the classical adjoint method, computed mechanically.
But a gradient is not a reconstruction. This book closes the gap the existing literature leaves open: it proves the autodiff–adjoint equivalence, prices it, and then builds everything the gradient alone cannot give you — the optimizer, the regularization that stabilizes an ill-posed inverse, and the Gauss–Newton uncertainty that turns an estimate into a result. The second half spends that machinery on seven real problems — subsurface flow, contaminant transport, data assimilation, phase retrieval, elastography — and reports each one’s limits without flinching.
Every method is earned by the experiment or derivation that backs it; every number is computed by the runnable code in the appendix and checked against finite differences. For the working scientist who wants the method and the code in one place, with nothing hand-waved and every result reproducible to the last digit.

