问题
我有一个计算一维多项式的公式,联合函数我想在给定的范围内找到该函数的所有局部极大值。
我的方法
我目前的解决方案是,我在一定数量的范围内评估函数,然后我通过这些点,记住函数从上升到下降的变化点。因为我可以在间隔内改变样本数,但我想尽可能找到尽可能低的样本数的所有最大值。
问题
你能给我推荐一些有效的算法吗?

最佳答案

寻找未知函数的所有极大值是困难的。你永远不能肯定你发现的最大值只是一个最大值,或者你没有忽略某个地方的最大值。
但是,如果对函数有所了解,您可以尝试利用它最简单的一个是,当然,如果函数已知是有理的并且在等级上是有界的直到五级有理函数,才有可能从一个封闭公式导出所有四个极值,详情见http://en.wikipedia.org/wiki/Quartic_equation#General_formula_for_roots。最有可能的是,你不想实现这一点,但是对于线性、平方和三次根,闭公式是可行的,可以用来求四次函数的极大值。
这只是可能知道的最简单的信息,其他有趣的信息是你能否给二阶导数一个界这将允许您在发现强坡度时降低采样密度。
你也可以利用你打算如何使用你发现的最大值的信息。它可以告诉你你需要多精确。知道一个点是否接近最大值就足够了吗?或者一个点是平的?如果马鞍点被分类为最大值,这真的是一个问题吗?或者如果一个最大的右转弯处被忽略?允许的误差范围是多少?
如果您不能利用这样的信息,您将被退回到以小步骤采样您的函数,并希望您不会犯太多的错误。
编辑:
你在评论中提到你的函数实际上是一个核密度估计这至少提供了以下信息:
除非内核不受扩展限制,否则估计的函数将是一个分段函数:它上的任何点都只会受到可精确计算的测量点数量的影响。
如果核是基于有理函数的,则得到的估计函数将是分段有理的。它的等级和内核是一样的!
如果核是统一核,则估计的函数将是阶跃函数。
这种情况需要特殊处理,因为在数学意义上不会有任何极大值。不过,这也让你的工作变得很容易。
如果核是三角核,则估计函数是分段线性函数。
如果核是Epanechnikov核,则估计函数将是分段二次函数。
在所有这些情况下,产生分段函数并找到它们的极大值是微不足道的。
如果核的等级太高或是超验的,你仍然知道你的估计所基于的度量,你也知道核的性质。这允许你推导出你的最大值有多大的启发。
至少,你知道核的一阶和二阶导数。
原则上,这允许您计算估计函数在任何点的一阶和二阶导数。
在局部核的情况下,在任意点计算估计函数的一阶导数和二阶导数的上界可能更为谨慎。
有了这个信息,应该有可能约束搜索到有最大值的区域,避免斜坡的过采样。
如您所见,有很多有用的信息,您可以从您的功能知识中获得,并且您可以利用这些信息来提高您的优势。

07-27 18:23