Если никакие партиалы не объявлены, OpenMDAO не будет вычислять партиалы для данного компонента.
Если вы хотите, чтобы OpenMDAO аппроксимировал все партиалы по компоненту через конечную разницу, включите следующее в метод setup
вашего компонента :
self.declare_partials(of='*', wrt='*', method='fd')
Подстановочные знаки здесь расширяются, чтобы соответствовать любому имени входа или выхода, поэтому мы инструктируем OpenMDAO аппроксимировать частичное значение каждого вывода по отношению к каждому входу, используя метод конечных разностей.
Для более точного приближения вы можете использовать комплексный подход (при условии, что ваши базовые математические функции являются комплексно-совместимыми).
self.declare_partials(of='*', wrt='*', method='cs')
Метод declare_partials
также позволяет вам указать значение по умолчанию для частичных. Например, если компонент вычисляет функцию:
outputs['z'] = 3*inputs['y']
Для dz / dy производная постоянна, поэтому нет необходимости повторно вычислять с помощью аппроксимации или в compute_partials
. Вместо этого мы можем просто указать его значение по умолчанию в вызове declare_partials
и оставить его там.
self.declare_partials(of='z', wrt='y', val=3.0)
Вы можете увидеть, как меняется поведение оптимизации, экспериментируя с примером Paraboloid, показанным здесь: http://openmdao.org/twodocs/versions/latest/basic_guide/first_optimization.html
, который использует модель параболоида, как определено здесь: http://openmdao.org/twodocs/versions/latest/basic_guide/first_analysis.html