openMDAO是否试图通过有限差分来计算所有的参数,或者是什么?
解决方案:
如果没有声明partials,OpenMDAO将不会计算给定组件的partials。
当您想让OpenMDAO通过有限差分来逼近一个组件的所有参数时,请在您组件的 setup
方法。
self.declare_partials(of='*', wrt='*', method='fd')
这里的通配符可扩展为匹配任何输入或输出名称,所以我们指示OpenMDAO使用有限差分法对每个输入的每个输出部分进行近似。
要想获得更精确的近似,您可以使用复阶法(假设您的底层数学函数与复阶法兼容)。
self.declare_partials(of='*', wrt='*', method='cs')
复杂步法 declare_partials
方法还允许你为partials指定一个默认值。 例如,如果一个组件计算函数。
outputs['z'] = 3*inputs['y']
dzdy,导数是常数,所以不需要通过逼近或在 compute_partials
. 相反,我们可以只提供它的默认值在 declare_partials
调用,然后就不去管它了。
self.declare_partials(of='z', wrt='y', val=3.0)
你可以通过实验这里显示的Paraboloid例子来了解优化行为的变化。http:/openmdao.orgtwodocsversionslatestbasic_guidefirst_optimization.html。
其中使用了这里定义的Paraboloid模型。http:/openmdao.orgtwodocsversionslatestbasic_guidefirst_analysis.html。