Автоматическое дифференцирование с 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];

Советы?

3

Решение

Согласно официальному документу Вот,
RealForward тип с перегруженным оператором присваивания, так что вы можете присвоить его с двойным ..

нравится делать

codi::RealForward a = 3.0;

противоположное направление, конечно, не определено,

вот почему вы не можете преобразовать напрямую Коди :: RealForward в двойник, просто выполнив:

double a = Gcodi[p];

но вы можете вызывать функции для этого, т.е.

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

ОБНОВИТЬ:

тогда вы можете назначить объект 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
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector