<p>正如你所怀疑的,在计算导数时,问题是由数值引起的。正确的二阶导数,正如<a href="https://stackoverflow.com/questions/33246398/second-derivative-of-fadeeva-function-from-scipy-special#comment54298847_33246398">@clwainwright</a>已经在注释中指出的那样,是</p>
<pre><code>Zpp = -2*(Z(x) + x*Zp(x))
</code></pre>
<p>这两个项的虚部表现如下:</p>
<p><a href="https://i.stack.imgur.com/3sHDX.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/3sHDX.png" alt="problem"/></a></p>
<p>证明有两个很小的量,<em>几乎</em>相等,然后计算它们的差。在</p>
<p>更多细节</p>
^{pr2}$
<p>想象的部分是</p>
<pre><code>Im(Zpp) = - 4*x/sqrt(pi) - 2*(1-2*x**2)*Im(Z)
</code></pre>
<p>并且<code>Im(Z)</code>与Dawson函数<code>D</code>(<code>scipy.special.dawsn</code>)成正比</p>
<pre><code>Im(Z) = 2/sqrt(pi) * D
</code></pre>
<p>问题是你有</p>
<pre><code>Im(Zpp(x)) = -4/sqrt(pi)*( x - 2*x**2*dawsn(x) ) - 4/sqrt(pi)*dawsn(x)
</code></pre>
<p>为什么这是一个问题是因为<a href="https://en.wikipedia.org/wiki/Dawson_function" rel="nofollow noreferrer">the asymptotic expansion of the Dawson function</a>开头是</p>
<pre><code>D(x) ~ 1/(2x) + ...
</code></pre>
<p>它的前导项被<code>Im(Zpp(x))</code>的第一项吃掉,小的修正给了函数它的值(实际上,前导项是<code>Im(Zpp(x))</code>最后一项中的<code>1/(2x)</code>。在</p>
<p>所以这个问题是<code>Zpp</code>的解析表达式所固有的。您可以尝试重塑分析表达式以解决此数值问题(特别是精度损失),但这并不容易。您也可以尝试使用<code>sympy</code>。我已经尝试了一段时间了,但没有成功。可能还是有可能的。在</p>