【问题标题】:How can I solve this MATLAB "Matrix dimensions must agree" error?如何解决这个 MATLAB“矩阵尺寸必须一致”错误?
【发布时间】:2026-02-07 05:30:01
【问题描述】:

我正在为一个类输入一些代码,但每次运行该函数时都会遇到相同的错误:

??? Error using ==> plus
Matrix dimensions must agree.

Error in ==> Test at 6
f32=3.*exp((-x2.^2-y1.^2)./3);

我知道问题是一个简单的索引错误,但我似乎无法在任何地方找到它。有人可以帮帮我吗?

以下代码行也有同样的问题:

f34=(exp(-0.3./x2))./(log(y2).*sqrt(x2));

编辑#1:

x2 被定义为0:0.1:5y1 被定义为-5:0.1:5,但这就是我被分配定义它们的原因。而且我知道 exp 不是一个函数,因为我在文件的其他地方使用过它。

编辑 #2:

好的。因此,如果我不能使用我当前的 x 和 y,我可以定义它们以保持它们在那些边界上,同时仍然使它们具有相同的大小?

【问题讨论】:

    标签: matlab matrix dimensions


    【解决方案1】:

    更新:

    好的,既然您已经确认变量 x2y1 包含不同数量的元素,那么您有两个解决方案可供选择:

    1. 对于每个变量,您可以使用函数LINSPACE 在各自的范围内创建一组值。例如:

      x2 = linspace(0,5,101);   %# 101 values spanning the range 0 to 5
      y1 = linspace(-5,5,101);  %# 101 values spanning the range -5 to 5
      

      但是,当您计算结果 f32(也将是一个 101 元素的数组)时,它只会在 x2y1 中的相应值对进行评估(例如 x2(1)y1(1)x2(50)y1(50) 等)。

    2. 如果您希望在x2y1 范围内的每个 唯一点对上评估f32,则应该改用函数MESHGRID 来生成您的值。这也将允许您在x2y1 的范围内拥有不同数量的点:

      [x2,y1] = meshgrid(0:0.1:5,-5:0.1:5);
      

      上面将创建 x2y1 作为 101×51 数组,这样 f32 也将是一个 101×51 数组,在给定值范围内的所有点上求值。

    上一个答案:

    首先要测试的是,您放入方程的所有变量是否具有相同的大小或标量值,因为您使用的是元素运算符,例如 .^.*,所以它们必须相同。对于第一个等式,看看执行此操作时会得到什么输出:

    size(x2)
    size(y1)
    

    如果他们给出相同的结果,或者是[1 1],那么这不是你的问题。

    接下来要检查的是您是否通过创建名为exp 的变量来隐藏EXP 函数。如果您在命令窗口中将代码作为脚本运行,请键入 whos 并查看是否出现名为 exp 的变量。如果是这样,您需要删除或重命名它,以便您可以使用 function EXP。

    【讨论】:

      【解决方案2】:

      x2y1 的大小不同时,您希望-x2.^2-y1.^2 如何工作? x2=0:0.1:5 有大约 50 个条目,而 y1=-5:0.1:5 有大约 100 个条目。

      【讨论】: