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++ 特性有广泛支持,并具备稳健的回退与恢复机制。
相关
- 项目
- 项目
- 项目
- 项目
- 项目