В настоящее время нет возможности указать аналитические c частичные для ExecComps, и вы правы в том, что они являются сложными.
Короткий ответ на ваш следующий вопрос заключается в том, что для простых функций нет значимых повышение производительности при использовании явных компонентов по сравнению с ExecComp. Это связано с тем, что комплексный шаг вычисляет производные с машинной точностью при использовании достаточно малого размера шага, что и делает OpenMDAO. Фактические вычислительные затраты на выполнение сложного шага для однострочников, как правило, тривиальны. якобиан, и стоимость фактической вычислительной функции. Если вы хотите, я могу go более подробно рассказать об этих соображениях и предложить, какой метод использовать для ваших проблем.
[Изменить: я обновил рисунок с результатами для этого вычисления: y=sum(log(x)/x**2+3*log(x)
]
Я добавил ниже рисунок, показывающий стоимость вычисления производных компонента по мере изменения размера входного массива для этого компонента. Компонент analyti c работает немного быстрее по всем направлениям, но требует большего количества строк кода.
В принципе, любой из методов, который легче реализовать, вероятно, выгоден, поскольку нет большой разницы в стоимости. Для этой чрезвычайно простой вычислительной функции, поскольку она настолько недорогая, накладные расходы инфраструктуры, вероятно, имеют большее влияние на стоимость, чем фактическое вычисление производной. Конечно, эти тенденции также зависят от конкретной проблемы.
Сравнение вычислительных затрат для exe c и analyti c comps