如何解决找到负抛物线方程的最大值
我有以下负二次方程
-0.03402645959398278x^{2}+156.003469x-178794.025
我想知道当导数的斜率为零(最大值)时,是否有直接的方法(使用 numpy/scipy 库或任何其他库)来获取 x 的值。我知道我可以:
- 改变方程的符号并应用 scipy.optimize.minima 方法或
- 使用方程的导数,这样我就可以得到斜率为零时的值
例如:
from scipy.optimize import minimize
quad_eq = np.poly1d([-0.03402645959398278,156.003469,-178794.025])
############SCIPY####################
neg_quad_eq = np.poly1d(np.negative(quad_eq))
fit = minimize(neg_quad_eq,x0=15)
slope_zero_neg = fit.x[0]
maxima = np.polyval(quad_eq,slope_zero_neg)
print(maxima)
##################numpy######################
import numpy as np
first_dev = np.polyder(quad_eq)
slope_zero = first_dev.r
maxima = np.polyval(quad_eq,slope_zero)
print(maxima)
有什么直接的方法可以得到相同的结果吗? 打印(最大值)
解决方法
您不需要所有这些代码... a x^2 + b x + c
的一阶导数是 2a x + b
,因此对 2a x + b = 0
求解 x
会产生 x = -b / (2a)
实际上是您要搜索的最大值
import numpy as np
import matplotlib.pyplot as plt
def func(x,a=-0.03402645959398278,b=156.003469,c=-178794.025):
result = a * x**2 + b * x + c
return result
def func_max(a=-0.03402645959398278,c=-178794.025):
maximum_x = -b / (2 * a)
maximum_y = a * maximum_x**2 + b * maximum_x + c
return maximum_x,maximum_y
x = np.linspace(-50000,50000,100)
y = func(x)
mx,my = func_max()
print('maximum:',mx,my)
maximum: 2292.384674478263 15.955750522436574
并验证
plt.plot(x,y)
plt.axvline(mx,color='r')
plt.axhline(my,color='r')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。