如何在R中为所有y值优化函数获取对应x最大值用于绘图
问题原因
报错核心是optimize为单变量优化函数,单次仅支持单个固定alpha值下的velo优化,你直接将长度为551的y向量整体传入alpha参数,会导致x_position单次调用返回多值向量,optimize无法识别该类返回值,因此抛出无效函数值报错。此外你原有代码的参数顺序不符合optimize的要求,被优化的变量velo需要放在函数的第一个参数位置。
修正后的可运行代码
y <- seq(0, 55, 0.1) # 调整参数顺序:被优化变量velo放在第一位 x_position <- function(velo, alpha) { # 额外添加角度转弧度处理:R三角函数默认接收弧度值,若你的y本身是弧度可删除*pi/180 velo*cos(alpha*pi/180) * (velo*sin(alpha*pi/180) + sqrt((velo^2*sin(alpha*pi/180))^2 + 2*16.5*9.81))/9.81 } # 遍历每个alpha值单独做优化,拼接结果为等长向量 x <- sapply(y, function(alpha_val) { optimize(x_position, interval = c(1, 1000), alpha = alpha_val, maximum = TRUE)$objective })
运行后得到的x就是和y一一对应的最大值向量,可直接用于后续绘图。
内容的提问来源于stack exchange,提问作者Gilalar
相关产品推荐
相关产品推荐

