繁体   English   中英

Matlab中的下标分配维不匹配错误

[英]Subscripted assignment dimension mismatch error in 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

有人可以帮助我解决吗?

您的代码似乎存在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

您的脚本中有一些错误:

  • 网格物体的meshgrid :当您指定x(1)x(2)定义2个标量时,输出为2个矩阵
  • zexp不需要^它“已经”是指数了; 同样,由于您使用的是矩阵(由meshgrid生成),因此所有operand都必须以meshgrid . (点),以便将其应用于矩阵的每个元素

这是更新的代码。

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

在此处输入图片说明

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM