C++ 利用CoDiPack进行自动微分
以下代码:C++ 利用CoDiPack进行自动微分,c++,c++11,automatic-differentiation,C++,C++11,Automatic Differentiation,以下代码: #include <codi.hpp> ... codi::RealForward Gcodi[l]; for (int p = 0; p < l; p++) { ... double a = Gcodi[p]; } 提示?根据官方文件, RealForward是一种重载赋值运算符的类型,因此可以使用double 喜欢做 codi::RealForward a = 3.0; double myDouble{3.3}; RealForward
#include <codi.hpp>
...
codi::RealForward Gcodi[l];
for (int p = 0; p < l; p++)
{
...
double a = Gcodi[p];
}
提示?根据官方文件,
RealForward
是一种重载赋值运算符的类型,因此可以使用double
喜欢做
codi::RealForward a = 3.0;
double myDouble{3.3};
RealForward a = myDouble;
相反的方向当然没有定义
这就是为什么您不能通过执行以下操作直接将codi::RealForward转换为double的原因:
double a = Gcodi[p];
但是你可以在上面调用函数,也就是
double a = Gcodi[p].getGradient();
更新: 然后,您可以像这样使用double指定RealForward对象
codi::RealForward a = 3.0;
double myDouble{3.3};
RealForward a = myDouble;
但直接从REalForwad分配一个double是不合法的:
RealForward a = ...;
double myDouble = a; //not valid!
其他例子
RealForward b = a * a; //this is ok because a * a is a double
我找到了一个函数:getValue() 双a=Gcodi[p].getValue() 如以下所述: