【问题标题】:Apply a vector to an optimize function in R将向量应用于 R 中的优化函数
【发布时间】:2013-10-14 02:28:18
【问题描述】:

如何应用观察向量来找到 R 中每个观察之间的局部最大值。我执行以下代码,但根据绘图结果应该只是两个局部最大值。 我如何在 R 中做到这一点?

    x = c(0.0000005, 0.1578947, 0.3157895, 0.4736842, 0.6315789, 0.7894737, 
      0.9473684, 1.1052632,1.2631579, 1.4210526, 1.5789474, 1.7368421,
      1.8947368, 2.0526316, 2.2105263, 2.3684211, 2.5263158 ,
      2.6842105, 2.8421053, 3.000000)     
    f = function(x) (x+1)*(x-2)*(x-1)*(x)*(x+1)*(x-2)*(x-3)
    plot(x, f(x), type="l")
     maximums = sapply(x, function(x)optimize(f, c(0, x), maximum = TRUE)$maximum)

【问题讨论】:

  • 它似乎给了你正确的结果。如果你检查maximums,你会看到它给你0.462.00作为你的最大值,这与你的情节一致。
  • 是的,当然,但我想最后得到局部最大值,而不是其他点。我怎样才能摆脱别人?
  • 好吧,您要求它在每个间隔中给出局部最大值,它正在给您。为确保它是局部峰值,您必须检查该点的二阶导数是否为负。

标签: r maximization


【解决方案1】:

我不确定如何为此目的将optimize 应用于该序列,但肯定不会逐点应用它。您可以想象制作多项式样条曲线,然后对其进行微分。微分的数值模拟是diff,局部最大值的条件是一阶导数小,二阶导数为负。这是一个满足这些条件的图(将颜色移动一个以考虑diff它时向量的缩短:

plot(x,f(x), 
     col=c("red","blue")[1+seq_along(x) %in%    # adding one to the logical values 0,1
                         c(0, which( diff(diff(f(x)))<0 & diff(f(x)) < 0.1))])

【讨论】:

    猜你喜欢
    • 2017-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-23
    • 1970-01-01
    相关资源
    最近更新 更多