在组件上使用复杂步骤必须满足哪些要求?
What requirements must be met to use complex steps on a component?
组件必须满足什么要求才能使用复杂的步骤来逼近组件上的偏导数?
首先,函数的定义方式必须使其能够接受复杂的输入并提供相应的输出。 numpy
中的许多 函数支持这一点。一个没有 table 的例外是 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
基本上,组件中的数学需要包含能够干净地处理复数而不截断虚部的函数。例如,如果您只使用实数进行 table 查找,这意味着即使输入的虚部发生变化,响应也不会改变。
其次,函数必须复杂解析。这基本上意味着它们在复平面的两个方向上都是连续可微的。绝对值是非复解析函数的一个例子。您可以在此处阅读有关复杂分析函数的更多信息:https://en.wikiversity.org/wiki/Complex_analytic_function
组件必须满足什么要求才能使用复杂的步骤来逼近组件上的偏导数?
首先,函数的定义方式必须使其能够接受复杂的输入并提供相应的输出。 numpy
中的许多 函数支持这一点。一个没有 table 的例外是 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
基本上,组件中的数学需要包含能够干净地处理复数而不截断虚部的函数。例如,如果您只使用实数进行 table 查找,这意味着即使输入的虚部发生变化,响应也不会改变。
其次,函数必须复杂解析。这基本上意味着它们在复平面的两个方向上都是连续可微的。绝对值是非复解析函数的一个例子。您可以在此处阅读有关复杂分析函数的更多信息:https://en.wikiversity.org/wiki/Complex_analytic_function