gpt4 book ai didi

c++ - 如何使用 Eigen::AutoDiff Scalar 检索微分结果

转载 作者:行者123 更新时间:2023-11-30 03:37:47 58 4
gpt4 key购买 nike

我正在学习使用这个库。尝试微分一个简单的函数 y = x^2,不会产生预期的结果(dy/dx = 2x = 16x = 8).

#include <eigen3/Eigen/Core>
#include <eigen3/unsupported/Eigen/AutoDiff>
#include <iostream>

int main(int argc, char *argv[])
{
Eigen::AutoDiffScalar<Eigen::Vector2d> x(8.0), y;

y = x*x;

std::cout << y.derivatives()[0];

return 0;
}

最佳答案

您声明的标量实际上就是一个标量,因此您正在求一个标量 (8*8) 的导数,即 0。要表明 8 是第一个变量的值,您需要将其一阶导数设为 1:

#include <eigen3/Eigen/Core>
#include <eigen3/unsupported/Eigen/AutoDiff>
#include <iostream>

int main(int argc, char *argv[])
{
// Note different initialization
Eigen::AutoDiffScalar<Eigen::Vector2d> x(8.0, Eigen::Vector2d(1,0)), y;

y = x*x;

std::cout << "x = " << x << "\n"
<< "y = " << y << "\n"
<< "y' = " << y.derivatives()[0] << "\n";

return 0;
}

这输出

x = 8
y = 64
y' = 16

我建议将变量命名为 x 以外的名称,因为如果您希望对通常称为 x 同样。所以,我们称它为 a

  • 如果da/dx=0,则a是常数。那么,显然,d/dx a² = 0。
  • 如果 da/dx=1,则基本上 a=x。那么,d/dx a² = d/dx x² = 2x。

关于c++ - 如何使用 Eigen::AutoDiff Scalar 检索微分结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40043137/

58 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com