Насколько я понимаю, есть только два способа автоматического создания производного кода:
- прямая дифференциация
- обратная дифференциация
Из того, что я понимаю, обратная дифференциация является только академической, поскольку она требует запоминания операций, выполняемых в массиве, и в конце, возвращаясь к этому массиву.
и интерпретировать содержимое этого массива.
В результате (из-за интерпретации) такой код очень медленный.
Насколько я помню, метод backward как-то связан с правилом цепочки.
Также возможно смешать оба метода:
Если у вас есть код:
a=f(b);
и функция f () не тривиальна, а b имеет много производных,
тогда полезно посчитать
a=f(b);
da_db=df(b);
da_dc=da_db*db_dc;
da_dd=da_db*db_dd;