Hoew我可以应用观测矢量来找到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)
答案 0 :(得分:0)
我不确定如何为此目的将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))])