Matlab中的订阅分配维度不匹配错误

时间:2015-10-24 17:37:56

标签: matlab

我在Matlab中执行此命令的下一个错误:

% dibuji sixmin
x_lim=-2:.1:2; y_lim=-1:0.1:1;
[x(1), x(2)]= meshgrid(x_lim, y_lim);

z = (-exp^(-(x(1) + x(2))))*((sin(3*x(1)))^2)*((sin(3*x(2)))^2);

subplot(2,1, 1)
surf(x(1), x(2), z, 'edgecolor', 'none', 'facecolor', 'interp');
grid on
title('mi_sixmin')

subplot(2,1, 2)
contour(x(1),x(2),z,20)
grid on

有人可以帮我解决吗?

2 个答案:

答案 0 :(得分:1)

您的代码似乎有3个问题。

首先,命令[X, Y] = meshgrid(x_lim, y_lim)创建两个21x41矩阵并将其保存到XY。因此,代码的第二行([x(1), x(2)]= meshgrid(x_lim, y_lim);)尝试将21x41矩阵插入x的第一个元素,将21x41矩阵插入x的第二个元素。这不起作用的原因是矩阵x的每个元素只能适合1个元素。换句话说,x(1)只能适合1x1矩阵。要解决此问题,请将x(1)替换为X,将x(2)替换为Y。这样,两个21x41矩阵就会保存到它们自己的变量中。

其次,请注意exp()是一个函数,而不是变量。因此,您的函数的第四行应该有exp(-(X+Y))而不是exp^(-(X+Y))

第三,我相信你正在尝试在同一行中进行元素操作。相反,代码指定矩阵乘法。要指定按元素操作,请使用.*.^。所以,你的代码的第四行应该是: z = (-exp(-(X + Y))).*((sin(3*X)).^2).*((sin(3*Y)).^2);

因此,您编辑的代码现在应该如下所示:

x_lim=-2:.1:2; y_lim=-1:0.1:1;
[X, Y]= meshgrid(x_lim, y_lim);

z = (-exp(-(X + Y))).*((sin(3*X)).^2).*((sin(3*Y)).^2);

subplot(2,1, 1)
surf(X, Y, z, 'edgecolor', 'none', 'facecolor', 'interp');
grid on
title('mi_sixmin')

subplot(2,1, 2)
contour(X,Y,z,20)
grid on

答案 1 :(得分:0)

您的脚本中存在一些错误:

  • meshgrid的消除:当您指定x(1)x(2)定义2个标量时,输出为2个矩阵
  • 评估zexp不需要^它已经是&#34;已经&#34;指数;另外,由于您正在使用矩阵(由meshgrid生成),所有operand必须以.(一个点)开头,以便它们应用于矩阵的每个元素< / LI>

这是更新的代码。

x_lim=-2:.1:2; y_lim=-1:0.1:1;
[X, Y]= meshgrid(x_lim, y_lim);

z = (-exp(-(X + Y))).*((sin(3*X)).^2).*((sin(3*Y)).^2);

subplot(2,1, 1)
surf(X, Y, z, 'edgecolor', 'none', 'facecolor', 'interp');
grid on
title('mi_sixmin')

subplot(2,1, 2)
contour(X,Y,z,20)
grid on

enter image description here

希望这有帮助。