0

我正在尝试使用 stan 数学库进行反向自动微分,我从这个链接得到了例子

// [[Rcpp::export]]
auto g(Eigen::VectorXd x, Eigen::VectorXd a) {  // gradient by AD using Stan
  double fx;
  Eigen::VectorXd grad_fx;
  using stan::math::dot_self;
  stan::math::gradient([&a](auto x) { return dot_self( (x - a).eval() ); },
                       x, fx, grad_fx);
  return grad_fx;
}

上述函数成功计算了函数 f(x)=||xa||^{2} 的梯度。

相反,是否可以计算矩阵值参数的标量函数的梯度?例如 f(x) = trace( x * transpose(x) ) 其中 x 是一个矩阵?我尝试了以下但它给出了错误

// [[Rcpp::export]]
auto g(Eigen::MatrixXd x) {  // gradient by AD using Stan
  double fx;
  Eigen::MatrixXd grad_fx;
  stan::math::gradient([](auto x) { return (x *x.transpose()).trace() ; }, x, fx, grad_fx);
  return grad_fx;
}
4

0 回答 0