CoDiPack的自动差异化



以下代码:

#include <codi.hpp>
...
codi::RealForward Gcodi[l];
for (int p = 0; p < l; p++) 
{
...
double a = Gcodi[p];
}

给了我编译错误:

nnBFAD.cpp:在函数"void OptBF(("中:

nnBFAD.cpp:156:25:错误:无法在初始化双中将"codi::RealForward{aka codi::ActiveReal>}"转换为"double">

a = Gcodi[p];

提示?

根据这里的官方文档,RealForward是一个重载了赋值运算符的类型,因此可以使用double。。

喜欢做

codi::RealForward a = 3.0;

相反的方向当然没有定义,

这就是为什么你不能通过执行直接将codi::RealForward转换为double的原因

double a = Gcodi[p];

但你可以调用上面的函数,即

double a = Gcodi[p].getGradient();

更新

然后你可以像做一样用一个double来分配一个RealForward对象

double myDouble{3.3};
RealForward a = myDouble;

但直接从REalForwad:分配替身是不合法的

RealForward a = ...;
double myDouble = a; //not valid!

其他示例

RealForward b = a * a; //this is ok because a * a is a double

我找到了一个函数:getValue((

double a=Gcodi[p].getValue((;

如中所述:https://www.scicomp.uni-kl.de/codi/d5/dbb/Tutorial1.html

相关内容

  • 没有找到相关文章

最新更新