R语言中如何将D()生成的导数表达式传入uniroot()求解零点
问题原因
uniroot() 要求传入的第一个参数为可调用的函数对象,而D()返回的是表达式/调用类型对象,不满足uniroot()的参数要求,因此直接传入会报错。
可行解决方案
方案1:用as.function()直接转换导数表达式
通过alist()构造参数列表,将导数表达式包装为可调用的单参数函数:
deriv1 <- D(expression(x^2-2*x),"x") # 转换为函数 deriv_func <- as.function(alist(x =, eval(deriv1))) # 调用uniroot求解 uniroot(deriv_func, c(0,5))
方案2:手动封装自定义函数求值
将导数表达式的求值逻辑包裹在自定义函数内部:
deriv1 <- D(expression(x^2-2*x),"x") deriv_func2 <- function(x) { eval(deriv1) } uniroot(deriv_func2, c(0,5))
两种方案运行后均可得到正确的零点结果1,和手动定义导数函数的运行结果一致。
内容的提问来源于stack exchange,提问作者Lucas
相关产品推荐
相关产品推荐

