我有以下参数和功能:
require(plot3D)
require(numDeriv)
require(rgl)
Mass.init<-8.8
k<-8.617333262*10^(-5)
r_tref.d<-0.300
e.d<-0.4
eh.d<-3
th.d<-31
tref.d<-20
TPC.dev<-function(x){
r_tref.d*exp((-e.d/k)*(1/(x+273.15)-1/(tref.d+273.15)))/
(1+exp((eh.d/k)*(1/(th.d+273.15)-1/(x+273.15))))}
我想找到一阶导数等于0的x值。我尝试做一个循环:
Mean.vector <- seq(10, 30, 0.01)
tolerance <- 1e-6
x_values <- numeric()
for (i in 1:length(Mean.vector)) {
x <- Mean.vector[i]
deriv.dev <- genD(TPC.dev, x)
if (all(abs(deriv.dev$D[, 1]) < tolerance)) { # Vérifiez la dérivée par rapport à la deuxième colonne
x_values <- c(x_values, x)
}
}
print(x_values)
但是当我运行代码时,我得到了这个:
> print(x_values)
numeric(0)
但从视觉上看,应该在 25 左右。你知道我如何找到它吗?
您的代码仅检查
Mean.vector
中的三个值,并且它们都不够接近函数的峰值,因此您得不到结果。相反,您可以使用优化:
# Function whose minimum will be searched for
f_opt <- function(x) {
abs(genD(TPC.dev, x)$D[, 1])
}
opt <- optimize(f_opt, c(10, 30))
opt$minimum
# [1] 26.10623