首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复变函数的自动微分

复变函数的自动微分
EN

Stack Overflow用户
提问于 2020-10-23 01:24:51
回答 1查看 271关注 0票数 3

我想知道是否可以应用boost的自动区分库:

代码语言:javascript
复制
#include <boost/math/differentiation/autodiff.hpp>

返回std::complex<double>值的函数?

例如,,考虑多元复值函数:

代码语言:javascript
复制
 #include <complex>

 std::complex<double> complex_function(double a, double c){
     // Assuming a < 0
     return exp(sqrt(std::complex(a, 0.0))) + sin(c);
 }

如何使用Boost的a将导数wrt转换到cautodiff?这可能吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-23 14:58:56

是否可以将boost的自动微分库应用于返回std::complex<double>值的函数?

现在不行。

这样的版本看起来可能是这样的:

代码语言:javascript
复制
// THIS DOES NOT COMPILE - FOR DISCUSSION ONLY
#include <boost/math/differentiation/autodiff.hpp>

#include <iostream>
#include <complex>

namespace ad = boost::math::differentiation;

template <typename T0, typename T1>
auto complex_function(T0 a, T1 c){
  // Assuming a < 0
  return exp(sqrt(complex(a, 0.0))) + sin(c);  // DOES NOT COMPILE
}

int main() {
  auto const a = ad::make_fvar<double, 2>(-3);
  auto const c = 0.0;
  auto const answer = complex_function(a, c);
  return 0;
}

这就要求定义特定于complex模板类型的autodiff::fvar,类似于其他数学函数(expsqrt等)。在autodiff库中重载,并通过ADL调用。

正如@ them 14717在注释中指出的那样,它是向量值自差的特例,因为返回值不是单个截断的Taylor多项式,而是它们的一个元组。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64492633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档