openmdao - 在组件上使用复杂步骤必须满足哪些要求?
问题描述
组件必须满足哪些要求才能使用复杂的步骤来逼近组件的偏导数?
解决方案
首先,函数必须以一种可以接受复杂输入并提供相应输出的方式定义。 许多功能numpy
支持这一点。一个值得注意的例外是arctan2
。
您可以自己演示一下,让我们使用 np.sin 并使用复数步计算其导数:
>>> import numpy as np
>>> x = 3.231662
>>> np.sin(x)
-0.08994761472861613
>>> dx = 0+1E-16j
>>> # The complex step solution
>>> (np.sin(x+dx) - np.sin(x))/1.0E-16j
(-0.995946497862527-0j)
>>> # The analytic solution
>>> np.cos(x)
-0.995946497862527
基本上,您的组件中的数学需要包含干净地处理复数而不截断虚部的函数。例如,如果您曾经只使用实数进行表查找,这意味着如果输入的虚部发生变化,响应不会改变。
其次,函数必须是复解析的。这基本上意味着它们在复平面的两个方向上都是连续可微的。绝对值是非复解析函数的一个例子。您可以在此处阅读有关复杂分析函数的更多信息: https ://en.wikiversity.org/wiki/Complex_analytic_function
推荐阅读
- drake - 对于多机器人仿真,我们是否需要多个多体植物?
- .htaccess - 在 RewriteCond 中没有扩展名的 REQUEST_FILENAME
- loops - BASIC:了解我自己的 Ada 代码。查找将整数除以无分数的数字
- c++ - C++中的指针向量
- markdown - 为什么我的 Rmarkdown ioslides 中不显示 ggplotly 函数
- react-native - 在 TabBottomNavigation React Native 上添加图标
- triggers - 更新触发器后用 null 替换空字符串将该列中的所有数据更新为 null
- python - 在浏览器中打开 JavaScript 以继续
- python-3.x - 如何根据不同变量的值命名类变量?
- docker - 在 Jenkinsfile 中使用 docker 命令给了我不一致的结果(有时工作,有时找不到)