首页 > 解决方案 > 查找三次函数的局部最小值/最大值

问题描述

我正在寻找一个 Python 函数,该函数接受 6 个变量,a, b, c, d, e, f其中a, b是要计算的区间(例如[1, 3],所有实数),并且c, d, e, f是三次多项式的系数,即f(x) = cx^3 + dx^2 + ex + f,并返回局部最小值/最大值间隔[a, b]

我对如何编程有一个粗略的想法(尽管计算时间会很糟糕),我在其中创建一个新的步骤列表0.01或类似的小东西 from ato b,评估f每个值,然后简单地返回列表的最小值/最大值. a, b对于相距甚远的值,这将需要很长时间。

做这个的最好方法是什么?是否有任何用于科学/数学计算的外部库?谢谢你。

标签: pythonmathscientific-computing

解决方案


对于三次函数,您可以在没有优化但使用微分的情况下找到潜在最小值/最大值的位置:

  • 得到一阶和二阶导数
  • 找到一阶导数的零点(求解二次方程)
  • 检查找到点的二阶导数 - 符号表明该点是最小值、最大值还是鞍点

我认为差异化应该在sympy包装中

还要检查问题陈述是否假设考虑了边界值(正如@Lakshay Garg 在评论中指出的那样)


推荐阅读