如何解决这个MATLAB“Matrix dimension must agree”错误?

时间:2011-03-09 20:37:27

标签: matlab matrix dimensions

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

??? 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,但我已将其定义为将其定义为{{1}}。而且我知道exp不是函数,因为我在我的文件中的其他地方使用过它。

编辑#2:

行。所以,如果我不能使用我当前的x和y,那么无论如何我可以定义它们以保持它们在这些边界上,同时仍然使它们具有相同的大小?

2 个答案:

答案 0 :(得分:4)

<强>更新

好了,既然您已确认变量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. 如果您希望在f32x2范围内的每个唯一一对点评估y1,则应使用函数MESHGRID生成您的值。这样您还可以在x2y1的范围内获得不同数量的点数:

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

    以上将创建x2y1作为101 x 51阵列,这样f32也将是在给定的所有点上评估的101 x 51阵列价值范围。

  3. 上一个回答:

    要测试的第一件事是,如果要放入等式中的所有变量都具有相同的大小或标量值,那么它们必须是这样的,因为您使用的是元素方式运算符,如.^和{{ 1}}。对于第一个等式,请查看执行此操作时得到的输出:

    .*

    如果他们给出相同的结果,或者size(x2) size(y1) ,那么那不是你的问题。

    接下来要检查的是,您是否通过名称[1 1]创建变量来隐藏EXP函数。如果您在命令窗口中将代码作为脚本运行,请键入whos并查看名为exp的变量是否显示。如果是,则需要删除或重命名,以便您可以使用功能 EXP。

答案 1 :(得分:0)

-x2.^2-y1.^2x2大小不同时,您期望y1如何工作? x2=0:0.1:5有五十个左右,而y1=-5:0.1:5有一百个左右的条目。