如果你不声明任何部分会发生什么?

What happens if you don't declare any partials?

openMDAO 是尝试仅通过有限差分计算出所有部分,还是什么?

如果没有声明部分,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)

您可以通过此处所示的抛物面示例进行试验,了解优化行为如何变化:http://openmdao.org/twodocs/versions/latest/basic_guide/first_optimization.html

使用此处定义的抛物面模型: http://openmdao.org/twodocs/versions/latest/basic_guide/first_analysis.html