You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言optim()函数报错:参数param缺失无默认值的解决咨询

解决optim()函数参数传递的错误问题

嗨,我一眼就看到问题出在哪啦~你在调用optim()的时候,给fn和gr参数传的是函数调用结果(加了括号的Time_1()和D_Time()),但optim()需要的是函数本身(不带括号)——它会自动把par里的初始猜测值传给这些函数,所以你现在的写法相当于直接调用了没有传参的Time_1()和D_Time(),自然会报参数缺失的错误。

修正步骤:

  1. 移除函数名后的括号:把fn = Time_1()改成fn = Time_1,gr = D_Time()改成gr = D_Time,让optim()拿到函数对象,而不是函数执行后的结果。
  2. 补充Brent方法的边界(可选但推荐):因为你用的是单变量优化的Brent方法,指定lower和upper可以让优化更稳定,根据你的问题场景,X1的合理范围应该是0到25,所以加上这两个参数。

修正后的完整代码:

# 定义T的函数
Time_1 <- function(param){
  ((sqrt(param^2 + 225))/10) + ((sqrt(((25-param)^2) + 100))/2)
} 

# 定义(dT/dX1)的函数
D_Time <- function(param){
  (param / (10*(sqrt(param ^ 2 + 225)))) + ((param- 25) / (2*sqrt((25 - param) ^ 2 + 100)))
} 

start_guess <- 1 # 初始猜测值
# 修正后的optim调用
mle_param <- optim(par=start_guess, 
                   fn = Time_1, 
                   gr = D_Time, 
                   method = 'Brent',
                   lower = 0, 
                   upper = 25)

# 查看最优解和最小时间
print(paste("使T最小的X1值:", mle_param$par))
print(paste("最小时间T:", mle_param$value))

补充说明:

  • 你的导数函数D_Time是正确的,我核对过啦,和手动求导的结果一致~
  • 运行修正后的代码后,mle_param$par就是你要找的最优X1,mle_param$value对应的是最小时间T。

内容的提问来源于stack exchange,提问作者Cecilia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:50:17