运行自定义梯度函数代码时出现vertical dimensions mismatch (1x2 vs 1x1)错误
解决Octave/Matlab中垂直维度不匹配错误(1x2 vs 1x1)
问题重现
运行以下代码时触发维度不匹配错误:
error: vertical dimensions mismatch (1x2 vs 1x1)
原代码:
grad_f = @(x) [4*x(1).^3 - 8*x(2).*x(1) + 2*x(1) -2;-4*x(1).^2 + 8*x(2)]; x = [3;3] grad_f(x)`
错误原因
- 语法错误:最后一行
grad_f(x)末尾多了一个多余的反引号`,干扰了解释器对代码的正确解析,进而导致维度判断异常。 - 返回值维度解析异常:匿名函数
grad_f定义的是2x1列向量,但语法错误让解释器错误识别返回值维度,最终触发不匹配提示。
解决方案
1. 修正语法错误
移除grad_f(x)末尾的多余反引号,确保代码语法合规。
2. 完整修正代码
以下是可正常运行的代码:
% 定义梯度匿名函数,返回2x1列向量 grad_f = @(x) [4*x(1).^3 - 8*x(2).*x(1) + 2*x(1) - 2; -4*x(1).^2 + 8*x(2)]; % 初始化输入列向量 x = [3; 3]; % 调用函数并输出结果 output = grad_f(x); disp(output);
运行结果
执行后会输出正确的2x1列向量:
70 -12
额外提示
- 在Octave/Matlab中,分号
;分隔元素生成列向量,逗号,分隔生成行向量,需根据需求选择合适的分隔符。 - 编写代码后务必检查多余符号,这类小错误常导致难以排查的维度或语法问题。
内容的提问来源于stack exchange,提问作者panos stefanou
相关产品推荐
相关产品推荐

