Что произойдет, если вы не объявите какие-либо частичные? - PullRequest
0 голосов
/ 23 апреля 2020

Пытается ли openMDAO отработать все партиалы по конечной разнице или как?

1 Ответ

1 голос
/ 23 апреля 2020

Если никакие партиалы не объявлены, 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

...