如何求 x 的一阶导数

问题描述 投票:0回答:1

我有以下参数和功能:

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 左右。你知道我如何找到它吗?

r loops derivative
1个回答
0
投票

您的代码仅检查

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
© www.soinside.com 2019 - 2024. All rights reserved.