我有 picwise 三次函数,我想找到它的所有局部最大值,我怎样才能找到所有峰值?
问问题
395 次
2 回答
2
一种选择是使用 找到最大值optimize
。首先,您必须编写实际功能:
x <- c(0.014, 0.034, 0.059, 0.061, 0.069, 0.080, 0.123, 0.142, 0.165,
0.210, 0.381, 0.464, 0.479, 0.556, 0.574, 0.839, 0.917, 1.649, 1.702,
1.893, 1.932 ,2.337, 2.628, 4.510, 4.584, 5.267, 5.299)
f<-function(z){
z1<-pmax(0,z-x)
sum(z1^2-(z^3-z1^3)/3)
}
然后:
> optimize(f,c(0,5),maximum=T)
$maximum
[1] 2.22133
$objective
[1] 8.486057
于 2013-10-13T22:11:12.100 回答
0
我想出了一种使用正则表达式的方法,并且可能有更好的方法来找到三次函数的所有局部最大值,但这很有效。它还将考虑重复值和边界条件。
vals=f(x)
text=paste0(substr(format(diff(vals),scientific=TRUE),1,1),collapse="")
sort(na.omit(c(gregexpr('[ ][0]*-',text)[[1]]+1,ifelse(grepl('^-',text),1,NA),
ifelse(grepl('[^-]$',text),length(vals),NA))))
于 2013-10-14T04:12:39.430 回答