gpt4 book ai didi

Python minimize_scalar 计算多项式最小值不正确

转载 作者:行者123 更新时间:2023-12-01 06:50:25 25 4
gpt4 key购买 nike

我正在尝试使用minimum_scalar来计算一维多项式的最小值和最大值。

多项式为 x^{6}-2x^{5}-26x^{4}+28x^{3}+145x^{2}-26x-80

代码如下所示

import numpy as np
from scipy.optimize import *
ppar = np.array([1, -2, -26, 28, 145, -26, -80])
p = np.poly1d(ppar)
print p

maximum = minimize_scalar(-p, bounds=(-3.978, 3.068), method = 'bounded')
print "(-3.978, 3.068)", -maximum.fun
print maximum

minimum = minimize_scalar(p, bounds=(-3.978, 3.068), method = 'bounded')
print "(-3.978, 3.068)", minimum.fun
print minimum

结果是

   6     5      4      3       2
1 x - 2 x - 26 x + 28 x + 145 x - 26 x - 80
(-3.978, 3.068) 86.0883584933
status: 0
nfev: 12
success: True
fun: -86.0883584932823
x: -1.5444720061831096
message: 'Solution found.'
(-3.978, 3.068) -81.1476243092
status: 0
nfev: 11
success: True
fun: -81.147624309245643
x: 0.08767224353999728
message: 'Solution found.'

但是,一维多项式的实际解应最大:在 x=2.176 时为 264.155,在 x = -3.391 时最小为 -436.947

有人知道我的代码有什么问题或者我错过了什么吗?

感谢您的任何帮助评论。

最佳答案

多项式是振荡的,并且有几个极值。你得到的只是不同的。请注意,本地最小化器会找到一个最小值,如果有多个,它会报告其中一个。

对于多项式,您最好使用专门的最小化器。例如,使用伴随矩阵方法微分并求导数的根:

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

伴随矩阵的特征值是导数的根(反之亦然),因此是原始多项式的极值:

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 ])

必须注意的是,最好避免使用大次多项式,因为它们不稳定。

关于Python minimize_scalar 计算多项式最小值不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59037169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com