vgvassilev/clad

clad -- automatic differentiation for C/C++

解决的问题

Clad 为 C++ 提供自动微分(AD),允许开发者自动为数学函数生成计算导数的 C++ 代码。这消除了手动推导并编写复杂函数的梯度、海森矩阵或雅可比矩阵的需要,该过程通常容易出错且繁琐。

工作原理

Clad 作为 Clang 编译器的插件实现,基于 LLVM 编译器基础设施。它使用源码转换技术分析 C++ 源代码,并自动生成对应的导数 C++ 代码。支持前向模式和反向模式 AD,以及两者的组合以计算高阶导数。

适用人群

适用于需要为优化、机器学习或科学计算计算数学函数导数的 C++ 开发者和研究人员,以及需要估算程序中浮点误差的用户。

主要特性

  • 多种 AD 模式:支持前向模式、反向模式以及组合模式,用于计算海森矩阵和雅可比矩阵。
  • 全面的 API:提供专用函数如 clad::differentiate、clad::gradient、clad::hessian 和 clad::jacobian。
  • 浮点误差估算:包含专用工具 clad::estimate_error 用于计算程序的浮点误差。
  • 编译器集成:可作为 Clang 插件使用,或通过 xeus-cpp 内核在 Jupyter Notebook 中使用。
  • C++ 特性支持:对现代 C++ 特性有广泛支持,并具备稳健的回退与恢复机制。

相关

  • 项目
  • 项目
  • 项目
  • 项目
  • 项目