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

R语言绘制二元函数图像及求解最优值时报错问题咨询

问题原因

两个报错均来自函数入参形式和调用函数的传参规则不匹配:

  • outer() 要求传入的目标函数必须接收两个独立参数(分别对应x、y网格的取值),当前定义的fb仅接收1个长度为2的向量参数,无法接收outer传入的第二个Y参数,因此触发报错。
  • optim() 默认会将待优化的所有参数打包为单个向量传入目标函数,出现argument "y" is missing是因为中途为适配outer修改过fb的入参定义,将单向量入参改成了x、y两个独立入参,和optim的传参逻辑不兼容。
可直接运行的修复代码

多变量函数可视化部分

保留适配optim的单向量入参版本的fb,调用outer时通过匿名函数做参数转换,不需要修改原函数定义:

# 原目标函数定义,单向量入参,适配optim调用
fb <- function(x) {
  5*x[1]^2 + 2*x[1]*x[2] + 4*x[2]^2 + 4*x[1] - 2*x[2] - 2
}

x <- -50:50
y <- -50:50
# 套匿名函数完成参数格式转换,适配outer传参规则
z <- outer(x, y, function(xi, yi) fb(c(xi, yi)))

# 可视化示例,按需选择绘图函数
persp(x, y, z, theta = 35, phi = 20, col = "aliceblue", ticktype = "detailed")
# 或者绘制等高线图
contour(x, y, z, nlevels = 30)

最大值求解部分

将fb恢复为单向量入参的形式即可直接调用optim,fnscale参数设置为任意负数即代表最大化目标函数,不需要绑定函数值量级:

opt_result <- optim(
  par = c(0, 0),
  fn = fb,
  control = list(fnscale = -1)
)

# 提取结果
# 最优点坐标:opt_result$par
# 对应最大值:opt_result$value

验证参考:该函数为凸二次函数,解析解为x1=-10/19≈-0.526,x2=6/19≈0.316,和optim数值计算结果一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 23:16:01