微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

找到负抛物线方程的最大值

如何解决找到负抛物线方程的最大值

我有以下负二次方程

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

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。