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

调用optim函数时矩阵乘法出现“non-conformable”错误的解决方法

解决optim函数调用时的"non-conformable arguments"错误

问题原因

optim函数会自动将par参数扁平化为向量传入目标函数,而非保留原有的矩阵结构。你的代码中初始W是2×2矩阵,但optim调用时会把它转成长度为4的向量,此时在函数里执行W %*% x就会因维度不兼容报错。

解决方案

在目标函数内部,先将传入的向量形式的W重新转换为原矩阵的维度(2行2列),再执行后续计算。修改后的代码如下:

f <- function(W_vec, x, y){
  # 将向量转换回2×2矩阵
  W <- matrix(W_vec, nrow = 2, ncol = 2)
  temp <- W %*% x
  temp1 <- t(temp) %*% temp
  temp2 <- t(temp) %*% y
  temp3 <- t(y) %*% y
  (temp1 - 2 * temp2 + temp3)[1]
}

x <- matrix(c(1,2), ncol=1)
y <- matrix(c(5,3), ncol=1)
W_init <- matrix(c(1,2,3,4), ncol=2)

# 调用optim时传入扁平化的初始参数,或直接传矩阵(optim会自动转成向量)
optim(par = W_init, fn = f, x = x, y = y)

补充说明

  • 函数参数名从W改为W_vec仅为表述清晰,也可保留原名,只要内部完成矩阵转换即可。
  • 若需要指定优化方法(比如无约束优化常用的L-BFGS-B或Nelder-Mead),可添加method参数,示例:
    optim(par = W_init, fn = f, x = x, y = y, method = "L-BFGS-B")
    
  • 修改后单独测试函数也能正常运行:
    f(as.vector(W_init), x = x, y = y)
    # 输出:53,和之前的结果一致
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 17:40:38