R语言integrate函数积分报错:表达式非函数类问题咨询
R语言积分自定义函数表达式的错误修正
错误原因
integrate()函数的第一个参数必须是以积分变量为输入的函数,而你直接传入了表达式x * get_p(x,y,t,u)。这种写法会触发两种错误:
- 未定义x时,R无法找到变量x,报错
object 'x' not found; - 预先定义x时,表达式会被计算成单一数值,而
integrate()需要的是函数类型输入,因此报错'x * get_p(x, y, t, u)' is not a function, character or symbol。
修正方案
你需要把被积表达式包装成以x为参数的函数,以下是两种可行写法:
写法一:利用全局变量定义被积函数
# 参数定义 alpha <- 0.86 y <- 70000 t <- 600 u <- 5353.65 get_p <- function(x,y,t,u) { (((alpha^alpha) * ((1 - alpha)^(1 - alpha)) * (y - t * x)) / u)^(1 / (1 - alpha)) } # 定义以x为唯一参数的被积函数 integrand <- function(x) { x * get_p(x, y, t, u) } # 执行积分 result <- integrate(integrand, lower = 0, upper = 39) print(result)
写法二:通过integrate()的额外参数传递变量(更严谨)
这种方式避免依赖全局变量,把所有参数明确传递给被积函数,适合大型项目:
# 参数定义 alpha <- 0.86 y <- 70000 t <- 600 u <- 5353.65 # 定义包含所有参数的被积函数,x作为第一个参数 integrand <- function(x, y, t, u, alpha) { p_val <- (((alpha^alpha) * ((1 - alpha)^(1 - alpha)) * (y - t * x)) / u)^(1 / (1 - alpha)) x * p_val } # 通过integrate的...参数传递额外变量 result <- integrate(integrand, lower = 0, upper = 39, y = y, t = t, u = u, alpha = alpha) print(result)
执行结果说明
两种写法都会返回积分结果和对应的绝对误差范围,示例输出类似:
1.234567e+08 with absolute error < 1.4e+03
内容的提问来源于stack exchange,提问作者Victor Nielsen
相关产品推荐
相关产品推荐

