<p>您试图做的事情背后的想法是正确的,但要使其按预期工作,有两点:</p>
<ol>
<li>calc_diffY(X)中有一个输入错误,X**2的导数是2*X,而不是2**X:</li>
</ol>
<pre><code> def calc_diffY(X):
yval_dash = 3*(X**2) + 2*X
</code></pre>
<p>通过这样做,您不会获得更好的结果:</p>
<pre><code>yval_dash = [5, 16, 33, 56, 85]
numpyDiff = [10. 24. 44. 70.]
</code></pre>
<ol start=“2”>
<li>要计算数值导数,你应该做一个“差商”,它是导数的近似值</li>
</ol>
<pre><code>numpyDiff = np.diff(yval)/np.diff(xval)
</code></pre>
<p>如果点的值更密集,则近似效果会越来越好。
x轴上的点之间的差值为1,因此在这种情况下结束(蓝色表示分析导数,红色表示数值):</p>
<p><a href="https://i.stack.imgur.com/uftmR.png" rel="noreferrer"><img src="https://i.stack.imgur.com/uftmR.png" alt="enter image description here"/></a></p>
<p>如果您将x点的差值减少到0.1,您会得到这样的结果,这要好得多:</p>
<p><a href="https://i.stack.imgur.com/EwEJc.png" rel="noreferrer"><img src="https://i.stack.imgur.com/EwEJc.png" alt="enter image description here"/></a></p>
<p>为了增加一些内容,请看这张图片,它显示了减少数值计算导数的点的距离的效果,取自<a href="https://en.wikipedia.org/wiki/Derivative#Rigorous_definition" rel="noreferrer">Wikipedia</a>:</p>
<p><a href="https://i.stack.imgur.com/vviiO.gif" rel="noreferrer"><img src="https://i.stack.imgur.com/vviiO.gif" alt="enter image description here"/></a></p>