擅长:python、mysql、java
<p>多项式是振荡的,并且有几个极值。你得到的只是不同的。请注意,局部极小值找到<em>a</em>极小值,如果有多个,则报告其中一个。你知道吗</p>
<p>对于多项式,最好使用专门的极小值。例如,使用伴随矩阵方法区分并找到导数的根:</p>
<pre><code>In [53]: coef = [-26, 2*145, 3*28, -4*26, -5*2] # coefficients for the derivative
In [54]: coef = np.asarray(coef, dtype=float)
In [55]: coef /= 6 # make it monic
In [56]: coef
Out[56]: array([ -4.33333333, 48.33333333, 14. , -17.33333333, -1.66666667])
In [57]: a = np.diag(np.ones(4), -1) # build the companion matrix
In [58]: a[:, -1] = -coef
</code></pre>
<p>伴随矩阵的特征值是导数的根(反之亦然),因此原始多项式的极值:</p>
<pre><code>In [61]: np.linalg.eigvals(a)
Out[61]: array([-3.39056572, -1.54447197, 0.08767236, 2.17555358, 4.33847842])
In [62]: pp = np.poly1d([1, -2, -26, 28, 145, -26, -80]) # sanity check
In [63]: pp(np.linalg.eigvals(a))
Out[63]:
array([-436.94699498, 86.08835849, -81.14762431, 264.15457395,
-794.0522912 ])
</code></pre>
<p>必须注意的一点是,最好避免使用高次多项式,因为它们是不稳定的。你知道吗</p>